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

文章目录

Github

官网

简介

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

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

视频帧推理

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

视频设备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")
相关推荐
我命由我1234536 分钟前
Function Calling 模型
人工智能·python·学习·ai·学习方法·ai编程·ai写作
XMXFS1 小时前
小红书推荐算法底层逻辑解析:用数据思维做内容优化
python·算法·新媒体运营·推荐算法
hans7748829681 小时前
仅根据BMI反推身高和体重?还真能做到!只需要简单的数论知识~
python·数学
追光者492 小时前
我把 55 篇自动化日志翻了一遍:最容易出事的是这 4 个地方
python·自动化运维
2601_962885722 小时前
如何用 Python计算 CR能量指标(中间意愿指标)?
开发语言·python
打工仔折腾 AI2 小时前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
FL16238631292 小时前
塔吊下方站人检测数据集VOC+YOLO格式1049张1类别
人工智能·深度学习·yolo
hhb_6182 小时前
Flask+SQLite实现用户管理接口
python·sqlite·flask
全栈练习生2 小时前
RAG 准确率保障的体系化方案
python·ai
萌萌的提莫队长2 小时前
Unity相机捕捉,图像识别,抠像+合成
opencv·unity