当前位置: 首页 > news >正文

Yolo-world+Python-OpenCV之摄像头视频实时目标检测

上一次介绍了如何使用最基本的 Yolo-word来做检测,现在我们在加opencv来做个实时检测的例子

基本思路

1、读取离线视频流
2、将视频帧给yolo识别
3、根据识别结果 对视频进行绘制边框、加文字之类的

完整代码如下:

import datetimefrom ultralytics import YOLO
import cv2
from loguru import logger as log#加载YOLO模型
model = YOLO('model/yolov8s-world.pt')resize_width = 1920
resize_height = 1080def predict(chosen_model, img, classes = [], conf = 0.5):img = cv2.resize(img, (resize_width, resize_height))if classes:results = chosen_model.predict(img, classes = classes, conf = conf, save_txt = False)else:results = chosen_model.predict(img, conf = conf, save_txt = False)return resultsdef predict_and_detect(chosen_model, img, classes = [], conf = 0.5):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), 1)results = predict(chosen_model, img, classes, conf = conf)person = 0for result in results:for box in result.boxes:# 如果标签是人的,将盒子做成绿色,并在盒子上用大号字体打印置信度if result.names[int(box.cls[0])] == "person":person += 1cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])),(int(box.xyxy[0][2]), int(box.xyxy[0][3])), (0, 255, 0), 2)cv2.putText(img, f"{result.names[int(box.cls[0])]} {box.conf[0]:.2f}",(int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10),cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)else:cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])),(int(box.xyxy[0][2]), int(box.xyxy[0][3])), (0, 0, 255), 2)cv2.putText(img, f"{result.names[int(box.cls[0])]} {box.conf[0]:.2f}",(int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10),cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255), 1)if person > 0:log.error(f"当前发现有{person}个人")return img, resultsdef main():# 在处理下一个帧之前跳过的帧数skip_frames = 2frame_count = 0cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakframe_count = 1 + frame_countif frame_count % skip_frames != 0:continueresult_frame, _ = predict_and_detect(model, frame)cv2.imshow("video", result_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':main()

运行效果:

在这里插入图片描述

http://www.lryc.cn/news/340338.html

相关文章:

  • vue-treeselect 的基本使用
  • Vue(二)
  • Python基于深度学习的车辆特征分析系统
  • 推理还原的干货
  • 【Redis 神秘大陆】006 灾备方案
  • 【Java基础】17.异常处理
  • 【python】flask结合SQLAlchemy,在视图函数中实现对数据库的增删改查
  • APIGateway的认证
  • MacOS Github Push项目 精简版步骤
  • Eclipse的基本使用讲解(建项目,建包,建类,写代码(基本语法))新手入门必备
  • 3D模型处理的并行化
  • 盲人安全导航技巧:科技赋能让出行更自如
  • 问,由于java存在性能上,以及部分功能上的缺点,请问如何正确使用C,C++,Go,这三个语言,提升Java Web项目的性能?
  • 【信号与系统 - 9】傅里叶变换的性质习题
  • C#探索之路基础夯实篇(5):语法糖概念解析
  • SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比
  • 深入理解汇编:平栈、CALL和RET指令详解
  • DP4 最小花费爬楼梯
  • OpenXR API概览与核心组件解析
  • 安装指定版本的ant-design-vue和指定版本的@ant-design/icons-vue 图标组件包
  • Zynq7000系列中的休眠模式
  • 在redhat7/8平台上部署ELK7.17.18的技术方案
  • (Chat For Al,创新Al,汇语Al助手,AiTab新标签,万能助手,LLaVA)分享6个好用的ChatGPT
  • MySQL-锁篇
  • 滤波器笔记(杂乱)
  • 【ARFoundation自学01】搭建AR框架,检测平面点击位置克隆物体
  • .Net ajax 接收参数
  • 智能零售:引领购物新时代
  • 【AIGC】AIGC在虚拟数字人中的应用:塑造未来互动体验的革新力量
  • 电机控制器电路板布局布线参考指导(五)