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

embedded/2024/9/22 20:03:08/

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

基本思路

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

完整代码如下:

python">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.ppmy.cn/embedded/4885.html

相关文章

webpack 打包优化 - splitChunks

打包时会遇到的问题: 打包文件过大,首屏加载时间过长,js阻塞页面渲染导致白屏改动业务代码后,对于第三方库也会一并重新打包到一个出口文件,浏览器无法利用缓存来减少请求和加载的时间 针对以上两个问题,…

uniapp --- 实现图片压缩(兼容H5)

目录 创建组件 在 template 中添加组件 方法说明: compress() 方法参数: progress 方法回调对象属性详细说明: 源码示例: thank Canvas 是 HTML5 提供的一个用于在网页上绘制图形的元素,它可以实现图片压缩的功…

【前端】1. HTML【万字长文】

HTML 基础 HTML 结构 认识 HTML 标签 HTML 代码是由 “标签” 构成的. 形如: <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. <body> 为开始标签, </body> 为结束标签.少数标签只有开始标签, 称为 “单标签”.开始标签和…

ElementPlus el-form多选框校验默认触发问题

multiple自动触发了change事件 <el-form-item label"代码路径" prop"path_id"><el-selectv-model"editform.path_id"clearablefilterablemultipleplaceholder"代码路径"><el-optionv-for"item in (selectsData?.…

国产化里程碑:明道云HAP私有部署版获信创评估证书,荣登会员单位

近期&#xff0c;明道云HAP私有部署版荣获信创产品评估证书&#xff0c;这一成就不仅标志着我们在信创领域的深入布局和持续努力获得了行业的广泛认可&#xff0c;也是对我们积极拥抱和推动国产化技术发展的肯定。更值得一提的是&#xff0c;我们还被授予“成员单位”的称号&am…

部署ELFK+zookeeper+kafka架构

目录 前言 一、环境部署 二、部署ELFK 1、ELFK ElasticSearch 集群部署 1.1 配置本地hosts文件 1.2 安装 elasticsearch-rpm 包并加载系统服务 1.3 修改 elasticsearch 主配置文件 1.4 创建数据存放路径并授权 1.5 启动elasticsearch是否成功开启 1.6 查看节点信息 …

【Linux】提升Linux命令行效率:光标移动和文本操作的键盘快捷键

Just 那么年少 还那么骄傲 两眼带刀 不肯求饶 即使越来越少 即使全部都输掉 也要没心没肺地笑 Just 那么年少 我向你招手 让你看到 我混账到老 天涯海角 天荒地老 只等你摔杯为号 &#x1f3b5; 朴树《Forever Young》 Linux命令行界面&#xff08;CLI&am…

探索设计模式的魅力:融合AI大模型与函数式编程、开启智能编程新纪元

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索AI大模型与函数式编程模式融合之旅✨ 在编程世界的广阔疆域里&#xff0c;两大…