一.项目介绍
本人为新手小白,因为比赛需要参考yolov8官方库写了一份使用 OpenCV 和 ONNX Runtime 对图像进行目标检测代码。其中或有不足之处,仅供参考。
本项目使用yolov8.n模型训练并导出为onnx文件,在opencv中结合ONNX Runtime 开源库实现图像中目标检测。示例内容为在图像中检测字母A,B。
本项目旨在对输入图片进行目标检测,对于检测实时视频流,只需要将照片改为输入图像的每帧图像即可,想偷懒的你让ai帮你实现也是可行的。
二.项目技术和方法
1.OpenCV
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了数百种计算机视觉算法,包括图像处理、特征检测、目标跟踪、人脸识别等。OpenCV 支持多种编程语言(如 C++、Python、Java 等),并且可以跨平台运行(Windows、Linux、macOS、Android、iOS)。
使用 OpenCV 进行目标检测的优势包括:
广泛使用的库:OpenCV 是计算机视觉领域最常用的库之一,拥有庞大的用户社区和丰富的文档资源。
图像处理能力:OpenCV 提供了强大的图像处理功能,可以用于预处理图像以提高目标检测模型的准确性。
硬件加速:OpenCV 支持多种硬件加速,如使用 GPU 加速图像处理。
2. ONNX Runtime
ONNX Runtime 是一个用于加速机器学习推理的开源库。它通过跨平台、高性能的推理引擎,能够有效地运行 ONNX 格式的模型。ONNX(Open Neural Network Exchange)是一个开放的深度学习模型交换格式,允许不同的深度学习框架(如 PyTorch、TensorFlow 等)之间的模型互操作。
使用 ONNX Runtime 进行目标检测的优势包括:
跨平台支持:ONNX Runtime 支持多种操作系统(Windows、Linux、macOS)和硬件平台(CPU、GPU、TPU、FPGA)。
高性能推理:ONNX Runtime 通过优化计算图和利用硬件加速,提供了高效的推理性能。
模型兼容性:ONNX 格式允许模型在不同的深度学习框架之间进行转换,使得模型的部署更加灵活。
3. 结合 OpenCV 和 ONNX Runtime 进行目标检测
结合 OpenCV 和 ONNX Runtime 进行目标检测的基本步骤如下:
加载图像:使用 OpenCV 读取图像文件,并进行必要的预处理(如缩放、归一化等)。
加载模型:使用 ONNX Runtime 加载预训练好的 ONNX 格式的目标检测模型。
推理:将预处理后的图像输入到模型中,使用 ONNX Runtime 进行推理,得到目标检测的结果。
后处理:使用 OpenCV 对检测结果进行后处理,如绘制边界框和标签。
三.项目准备
1.使用yolo训练出自己的数据集,并导出为后缀名为onnx的文件。
此类教程互联网上有,这里就不赘述了。
2.安装opencv-python包
pip install opencv-python
3.安装ONNX Runtime包
pip install onnxruntime
四.项目源码(含注释)
#######这段代码主要是使用 OpenCV 和 ONNX Runtime 对图像进行目标检测
import cv2
import numpy as np
import onnxruntime as ort
# 定义类别标签
CLASSES = ["A", "B", "right", "left"]
# 随机生成每个类别的颜色
colors = np.random.uniform(0, 255, size=(len(CLASSES), 3))
# 初始化标志
no_flag = 0
# 绘制边界框的函数
def draw_bounding_box(img, class_id, confidence, x, y, x_plus_w, y_plus_h):
label = f"{
CLASSES[class_id]} ({
confidence:.2f})" # 创建标签字符串
color = colors[class_id]