使用 OpenCV 和 YOLO 模型进行实时目标检测并在视频流中显示检测结果

文章目录

Github

官网

简介

Ultralytics 是一个软件公司,专注于开发计算机视觉和深度学习工具。他们的主要产品是 YOLOv5,这是一个快速、高效的目标检测模型,特别适用于实时应用。YOLOv5 是对经典的 YOLO(You Only Look Once)系列模型的升级,采用了现代化的深度学习技术和优化策略,以提供更好的性能和更低的计算成本。

Ultralytics 还开发了其他一些工具和库,帮助研究人员和开发者在计算机视觉和深度学习领域更高效地工作。他们的开源项目广受欢迎,为社区提供了强大的工具和资源,以推动计算机视觉技术的发展和应用。

视频帧推理

使用 OpenCV (cv2)YOLOv8 对视频帧进行推理。本脚本示例需要安装必要的软件包 (opencv-pythonultralytics).

视频设备ID

注: Mac 环境下可以使用 ffmpeg 进行搜索视频设备,当然此步骤可以省略盲填一个编号如果不出视频可再换设备编号。

bash 复制代码
brew install ffmpeg
# 列出视频的设备ID
ffmpeg -f avfoundation -list_devices true -i ""

注意: [0] FaceTime HD Camera,deviceID := 0 是电脑摄像头。

安装依赖

bash 复制代码
# 怕包冲突可以清理当前环境所有安装包
pip freeze | xargs pip uninstall -y
pip install --upgrade pip
bash 复制代码
pip install opencv-python
pip install ultralytics

检测示例

YOLOv8 这里显示的是经过预训练的检测模型。Detect、Segment 和 Pose 模型是在COCO数据集上预先训练的,而 Classify 模型则是在ImageNet数据集上预先训练的。

首次使用时,模型会自动从最新的Ultralytics 版本下载。

模型 尺寸(像素) mAPval 50-95 速度 CPU ONNX(毫秒) 速度 A100 TensorRT(毫秒) params (M) FLOPs (B) at 640
YOLOv8n 640 37.3 80.4 0.99 3.2 8.7
YOLOv8s 640 44.9 128.4 1.20 11.2 28.6
YOLOv8m 640 50.2 234.7 1.83 25.9 78.9
YOLOv8l 640 52.9 375.2 2.39 43.7 165.2
YOLOv8x 640 53.9 479.1 3.53 68.2 257.8
python 复制代码
import cv2

from ultralytics import YOLO

# 加载 YOLOv8 模型
model = YOLO("yolov8n.pt")

# 打开视频文件
# cap = cv2.VideoCapture("path/to/your/video/file.mp4")
# 或使用设备"0"打开视频捕获设备读取帧
cap = cv2.VideoCapture(0)

# 设置视频帧大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 200)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 200)

title = "YOLOv8 Inference"
# 设置窗口位置
cv2.namedWindow(title, cv2.WINDOW_NORMAL)
cv2.moveWindow(title, 200, 200)

# 循环播放视频帧
while cap.isOpened():
    # 从视频中读取一帧
    success, frame = cap.read()
    if success:
        # 在框架上运行 YOLOv8 推理
        results = model(frame)
        # 在框架上可视化结果
        annotated_frame = results[0].plot()
        # 显示带标注的框架
        cv2.imshow(title, annotated_frame)
        # 如果按下"q",则中断循环
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # 如果到达视频末尾,则中断循环
        break

# 释放视频捕获对象并关闭显示窗口
cap.release()
cv2.destroyAllWindows()
  • 输出结果


分类示例

模型 尺寸(像素) acc top1 acc top5 速度 CPU ONNX(毫秒) 速度 A100 TensorRT(毫秒) params (M) FLOPs (B) at 640
YOLOv8n-cls 224 69.0 88.3 12.9 0.31 2.7 4.3
YOLOv8s-cls 224 73.8 91.7 23.4 0.35 6.4 13.5
YOLOv8m-cls 224 76.8 93.5 85.4 0.62 17.0 42.7
YOLOv8l-cls 224 76.8 93.5 163.0 0.87 37.5 99.7
YOLOv8x-cls 224 79.0 94.6 232.0 1.01 57.4 154.8
  • 直接替换示例代码中的模型就可以。
python 复制代码
model = YOLO("yolov8n-cls.pt")
  • 输出结果(咖啡杯 0.78 左右)

姿势估计

模型 尺寸(像素) 50-95 mAPpose 50 速度 CPU ONNX(毫秒) 速度 A100 TensorRT(毫秒) params (M) FLOPs (B) at 640
YOLOv8n-pose 640 50.4 80.1 131.8 1.18 3.3 9.2
YOLOv8s-pose 640 60.0 86.2 233.2 1.42 11.6 30.2
YOLOv8m-pose 640 65.0 88.8 456.3 2.00 26.4 81.0
YOLOv8l-pose 640 67.6 90.0 784.5 2.59 44.4 168.6
YOLOv8x-pose 640 69.2 90.2 1607.1 3.73 69.4 263.2
YOLOv8x-pose-p6 1280 71.6 91.2 4088.7 10.04 99.1 1066.4
  • 直接替换示例代码中的模型就可以。
python 复制代码
model = YOLO("yolov8n-pose.pt")
相关推荐
YongCheng_Liang15 小时前
从零开始学 Python:自动化 / 运维开发实战(核心库 + 3 大实战场景)
python·自动化·运维开发
鸽芷咕15 小时前
为什么越来越多开发者转向 CANN 仓库中的 Python 自动化方案?
python·microsoft·自动化·cann
秋邱15 小时前
用 Python 写出 C++ 的性能?用CANN中PyPTO 算子开发硬核上手指南
开发语言·c++·python
wazmlp00188736916 小时前
python第三次作业
开发语言·python
深蓝电商API17 小时前
住宅代理与数据中心代理在爬虫中的选择
爬虫·python
2501_9413297217 小时前
改进YOLOv8-seg-act__鸡只计数检测实战
yolo
一招定胜负17 小时前
基于dlib和OpenCV的人脸替换技术详解
opencv·计算机视觉
历程里程碑18 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
weixin_3954489118 小时前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
执风挽^18 小时前
Python基础编程题2
开发语言·python·算法·visual studio code