📌 摘要

本文记录了使用 YOLO-World 模型结合 OpenCV 实现对视频流的实时目标检测的过程。针对使用 results[0].show() 显示图像时窗口频繁弹出导致卡顿的问题,进行了代码优化,改用 OpenCV 显示图像以提升性能与用户体验。

文章包含完整实现代码、关键逻辑解释以及实际运行效果展示,适用于初学者和有一定基础的 AI 开发者。


🎯 实现目的

在使用 Ultralytics 提供的 YOLO-World 模型进行视频目标检测时,发现官方接口中 results[0].show() 方法会不断弹出新的图像窗口,严重影响程序流畅度,甚至导致电脑卡顿。

因此,本文通过集成 OpenCV(cv2) 实现视频帧的统一显示,达到稳定、高效地展示检测结果的目的。


🛠️ 环境准备

确保你已安装以下依赖库:

pip install ultralytics opencv-python

模型文件:yolov8s-world.pt 可从 Ultralytics 官方仓库获取或自动下载。


🧩 核心代码解析

import datetime
import cv2
from ultralytics import YOLOWorld

# 加载YOLOWorld模型
model = YOLOWorld('yolov8s-world.pt')

resize_width = 1920
resize_height = 1080


def main():
    # 设置跳帧处理(提高性能)
    skip_frames = 2
    frame_count = 0
    
    # 打开摄像头(可以替换为视频路径)
    cap = cv2.VideoCapture(0)

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        frame_count += 1
        if frame_count % skip_frames != 0:
            continue  # 跳过部分帧以减少计算压力

        # 模型预测
        results = model.predict(frame, conf=0.1, save_txt=False)

        for result in results:
            img = result.plot(line_width=2, font_size=24)  # 绘制检测框和标签

            # 图像缩放(适配屏幕)
            img = cv2.resize(img, (resize_width, resize_height))

            # 添加时间水印
            cv2.putText(img, f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
                        (10, 20),
                        cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255), 2)

            # 使用OpenCV显示结果
            cv2.imshow("video", img)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    # 释放资源
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

🔧 关键改进点

改进点描述
使用 OpenCV 显示画面避免多个窗口弹出,提升稳定性
增加跳帧机制减少每秒处理帧数,降低CPU/GPU负载
添加时间戳水印方便调试和记录检测时间
图像分辨率自定义更好适配不同显示器

额外提示:可通过 model.set_classes(["person", "cat"]) 设置只识别特定类别,进一步提升效率。


📷 运行效果展示

在这里插入图片描述


🚀 扩展建议

  • 将检测结果保存为视频文件(使用 cv2.VideoWriter
  • 部署到树莓派或其他嵌入式设备上实现实时监控
  • 接入 RTSP 流媒体地址进行远程视频分析
  • 结合 Flask 或 FastAPI 构建 Web 检测服务

✅ 总结

本文通过将 YOLO-World 与 OpenCV 结合,实现了高效的视频目标检测流程。解决了原生 results.show() 方法带来的卡顿问题,提升了应用的实用性和用户体验。

如果你正在尝试搭建自己的实时检测系统,不妨参考本方案进行优化实践。


📌 如果你觉得这篇文章对你有帮助,请点赞 + 收藏 + 分享,让更多人了解如何用 YOLO-World 和 OpenCV 做实时目标检测!

💬 欢迎留言讨论你在部署过程中遇到的问题或优化建议。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐