YOLOv11实时目标检测 | 摄像头视频图片文件检测

article/2025/8/21 20:12:45

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492,我们详细探讨了YOLO11的部署以及推理训练,但是评论区的观众老爷就说了:“博主博主,你这个只能推理只能推理图片,还要将图片放在文件夹下,有没有更简单方便的推理方法?” 有的兄弟,有的,像这样更简单的方法还有10086个,下面我挑一个用于流式视频文件检测。

摄像头视频图片文件检测

  • 视频文件
  • 图片文件
  • 效果如下
    • 视频与摄像头
    • 图片文件

视频文件

对于视频或者摄像头等输入,可以将以下代码复制到predict_camera.py运行检测:

from ultralytics import YOLO
import cv2
import torch
from pathlib import Path
import sys
import os
import tkinter as tk
from tkinter import filedialogdef choose_input_source():print("请选择输入来源:")print("[1] 摄像头")print("[2] 视频文件")choice = input("请输入数字 (1 或 2): ").strip()if choice == "1":return 0, "摄像头"elif choice == "2":#选择视频文件root = tk.Tk()root.withdraw()video_path = filedialog.askopenfilename(title="选择视频文件",filetypes=[("视频文件", "*.mp4;*.avi;*.mkv;*.mov"), ("所有文件", "*.*")])if not video_path:print("未选择视频文件,程序退出")sys.exit(0)return video_path, video_pathelse:print("无效的输入,程序退出")sys.exit(1)def detect_media():# ======================= 配置区 =======================# 模型配置model_config = {'model_path': r'E:\git-project\YOLOV11\ultralytics-main\weights\yolo11n.pt',  # 本地模型路径,注意配置!!!!!!!!!!!!!!!!!!!!!!!'download_url': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt'  # 如果没有模型文件下载URL}# 推理参数predict_config = {'conf_thres': 0.25,     # 置信度阈值'iou_thres': 0.45,      # IoU阈值'imgsz': 640,           # 输入分辨率'line_width': 2,        # 检测框线宽'device': 'cuda:0' if torch.cuda.is_available() else 'cpu'  # 自动选择设备}# ====================== 配置结束 ======================try:# 选择输入来源input_source, source_desc = choose_input_source()# 初始化视频源cap = cv2.VideoCapture(input_source)if isinstance(input_source, int):# 如果使用摄像头,设置分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, 720)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)if not cap.isOpened():raise IOError(f"无法打开视频源 ({source_desc}),请检查设备连接或文件路径。")# 询问是否保存推理出的视频文件save_video = Falsevideo_writer = Noneoutput_path = Noneanswer = input("是否保存推理出的视频文件?(y/n): ").strip().lower()if answer == "y":save_video = True# 创建保存目录:代码文件所在目录下的 predict 文件夹save_dir = os.path.join(os.getcwd(), "predict")os.makedirs(save_dir, exist_ok=True)# 获取视频属性(宽度、高度、fps)frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))fps = cap.get(cv2.CAP_PROP_FPS)if fps == 0 or fps is None:fps = 25  # 如果无法获取fps,设定默认值# 构造输出视频文件路径output_path = os.path.join(save_dir, "output_inference.mp4")fourcc = cv2.VideoWriter_fourcc(*"mp4v")video_writer = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height))print(f"推理视频将保存至: {output_path}")# 加载模型(带异常捕获)if not Path(model_config['model_path']).exists():if model_config['download_url']:print("开始下载模型...")YOLO(model_config['download_url']).download(model_config['model_path'])else:raise FileNotFoundError(f"模型文件不存在: {model_config['model_path']}")# 初始化模型model = YOLO(model_config['model_path']).to(predict_config['device'])print(f"✅ 模型加载成功 | 设备: {predict_config['device'].upper()}")print(f"输入来源: {source_desc}")# 实时检测循环while True:ret, frame = cap.read()if not ret:print("视频流结束或中断")break# 执行推理results = model.predict(source=frame,stream=True,  # 流式推理verbose=False,conf=predict_config['conf_thres'],iou=predict_config['iou_thres'],imgsz=predict_config['imgsz'],device=predict_config['device'])# 遍历生成器获取结果(取第一个结果)for result in results:annotated_frame = result.plot(line_width=predict_config['line_width'])break# 摄像头模式下显示FPSif isinstance(input_source, int):fps = cap.get(cv2.CAP_PROP_FPS)cv2.putText(annotated_frame, f'FPS: {fps:.2f}', (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 显示实时画面cv2.imshow('YOLO Real-time Detection', annotated_frame)# 如保存视频,写入视频文件if save_video and video_writer is not None:video_writer.write(annotated_frame)# 按键退出qif cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源cap.release()if video_writer is not None:video_writer.release()cv2.destroyAllWindows()print("✅ 检测结束")if save_video and output_path is not None:print(f"推理结果视频已保存至: {output_path}")except Exception as e:print(f"\n❌ 发生错误: {str(e)}")print("问题排查建议:")print("1. 检查视频源是否正确连接或文件路径是否正确")print("2. 确认模型文件路径正确")print("3. 检查CUDA是否可用(如需GPU加速)")print("4. 尝试降低分辨率设置")if __name__ == "__main__":detect_media()

需要更改的参数:
1.model_path:模型文件位置,默认使用的是yolo11n.pt
2.predict_config下置信度等
3.分辨率等
需要注意的是退出按q,点击视频框的×是无法退出的,当然也可以使用Ctrl+C方式退出,退出不会造成摄像头不保存推理文件,文件保存在代码所在文件夹下predict文件夹内。

图片文件

对于图片文件,将图片放在picture文件夹下太麻烦,同样采用选择图片进行检测,同时可以框选多个图片,可以将以下代码复制到predict_images.py运行检测:

from ultralytics import YOLO
import cv2
import torch
from pathlib import Path
import os
import tkinter as tk
from tkinter import filedialogdef choose_input_files():root = tk.Tk()root.withdraw()  # 隐藏主窗口image_paths = filedialog.askopenfilenames(title="选择图片文件",filetypes=[("图片文件", "*.jpg;*.jpeg;*.png;*.bmp;*.tiff;*.gif"), ("所有文件", "*.*")])if not image_paths:print("未选择任何图片文件,程序退出")exit(0)return image_pathsdef detect_images():# ======================= 配置区 =======================# 模型配置model_config = {'model_path': r'E:\git-project\YOLOV11\ultralytics-main\weights\yolo11n.pt',  # 本地模型路径'download_url': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt'  # 如果没有模型文件可在此处添加下载URL}# 推理参数predict_config = {'conf_thres': 0.25,     # 置信度阈值'iou_thres': 0.45,      # IoU阈值'imgsz': 640,           # 输入分辨率'line_width': 2,        # 检测框线宽'device': 'cuda:0' if torch.cuda.is_available() else 'cpu'  # 自动选择设备}# ====================== 配置结束 ======================try:# 选择图片文件image_paths = choose_input_files()# 创建保存目录:代码文件所在目录下的 predict 文件夹save_dir = os.path.join(os.getcwd(), "predict", "exp")os.makedirs(save_dir, exist_ok=True)if os.path.exists(save_dir):i = 1while os.path.exists(f"{save_dir}{i}"):i += 1save_dir = f"{save_dir}{i}"os.makedirs(save_dir)# 加载模型(带异常捕获)if not Path(model_config['model_path']).exists():if model_config['download_url']:print("开始下载模型...")YOLO(model_config['download_url']).download(model_config['model_path'])else:raise FileNotFoundError(f"模型文件不存在: {model_config['model_path']}")# 初始化模型model = YOLO(model_config['model_path']).to(predict_config['device'])print(f"✅ 模型加载成功 | 设备: {predict_config['device'].upper()}")# 处理每个选定的图片文件for image_path in image_paths:print(f"正在处理图片: {image_path}")img = cv2.imread(image_path)if img is None:print(f"无法读取图片: {image_path}")continue# 执行推理results = model.predict(source=img,  # 输入图片stream=False,  # 禁用流模式verbose=False,conf=predict_config['conf_thres'],iou=predict_config['iou_thres'],imgsz=predict_config['imgsz'],device=predict_config['device'])# 解析并绘制结果(取第一个结果)for result in results:annotated_img = result.plot(line_width=predict_config['line_width'])break# 保存推理结果图像到文件output_image_path = os.path.join(save_dir, f"output_{os.path.basename(image_path)}")cv2.imwrite(output_image_path, annotated_img)print(f"推理结果已保存至: {output_image_path}")# 显示实时画面,取消下面注释就会边检测边弹出结果# cv2.imshow('YOLO Real-time Detection', annotated_img)# 等待按键退出当前图片查看if cv2.waitKey(0) & 0xFF == ord('q') :breakcv2.destroyAllWindows()print("✅ 检测结束")except Exception as e:print(f"\n❌ 发生错误: {str(e)}")print("问题排查建议:")print("1. 检查图片文件路径是否正确")print("2. 确认模型文件路径正确")print("3. 检查CUDA是否可用(如需GPU加速)")print("4. 尝试降低分辨率设置")if __name__ == "__main__":detect_images()

同样需要更改模型文件地址、置信度等,图片文件保存在代码文件夹的predict文件夹下exp中,如果想要检测时就查看图片,可以将这段代码取消注释:

            # 显示实时画面cv2.imshow('YOLO Real-time Detection', annotated_img)

效果如下

视频与摄像头

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图片文件

在这里插入图片描述
在这里插入图片描述
所有推理出的文件都会在代码同级的predict目录下,按q退出。


http://www.hkcw.cn/article/rQhPAAXSIS.shtml

相关文章

【计算机视觉】生成对抗网络(GAN)在图像生成中的应用

生成对抗网络(GAN)在图像生成中的应用 一、前言1.1 图像生成的重要性与挑战​1.2 GAN 的发展历程​二、生成对抗网络(GAN)基础​2.1 GAN 的基本原理​2.1.1 生成器与判别器​2.1.2 对抗训练过程​2.2 GAN 的数学原理​2.3 GAN 的代码实现(以 PyTorch 为例)​2.4 GAN 训练…

Coze实战:基于数据库的视频混剪工作流搭建(喂饭级教程)

作者:后端小肥肠 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: Coze一键生成打字机效果书单视频(保姆级工作流拆解)-CSDN博客 Coze实战:《如果书籍会说话》保姆级教程&#xff…

自动语音识别(ASR)技术详解

语音识别(Automatic Speech Recognition, ASR)是人工智能和自然语言处理领域的重要技术,旨在将人类的语音信号转换为对应的文本。近年来,深度学习的突破推动语音识别系统从实验室走入日常生活,为智能助手、实时翻译、医…

计算机视觉——YOLO11原理代码分块解读与模型基准对比测试

一、概述 2024 年对 YOLO 而言是具有里程碑意义的一年。这一年,YOLO 系列在 9 月的最后一天推出了其年度第三部重磅之作。2024 年 2 月 21 日,距离 2023 年 1 月 YOLOv8 正式发布已过去一年有余,YOLOv9 终于问世。YOLOv9 创新性地提出了可编…

[嵌入式实验]实验四:串口打印电压及温度

一、实验目的 熟悉开发环境在开发板上读取电压和温度信息使用串口和PC通信在PC上输出当前电压和温度信息 二、实验环境 硬件:STM32开发板、CMSIS-DAP调试工具 软件:STM32CubeMX软件、ARM的IDE:Keil C51 三、实验内容 配置相关硬件设施 &…

代码随想录算法训练营 Day59 图论Ⅸ dijkstra优化版 bellman_ford

图论 题目 47. 参加科学大会(第六期模拟笔试) 改进版本的 dijkstra 算法(堆优化版本) 朴素版本的 dijkstra 算法解法的时间复杂度为 O ( n 2 ) O(n^2) O(n2) 时间复杂度与 n 有关系,与边无关系 类似于 prim 对应点多…

Webots R2025a和ROS2 Jazzy部分资料汇总-250529

使用注意要点: 安装webot-ros包: sudo apt install ros-jazzy-webots-ros2 sudo apt install ros-jazzy-webots-ros2 sudo apt install ros-jazzy-webots-ros2 Reading package lists... Done Building dependency tree... Done Reading state infor…

jdbcTemplate防止注入写法

前一期写过拼接查询 https://blog.csdn.net/qq_44749121/article/details/148084689 但是会涉及到注入风险 所幸这一期给一个改进写法 在 Spring 框架中使用 JdbcTemplate 时,可以通过以下方式有效防止 SQL 注入: 1. 使用预编译语句(Prepare…

Spring AI 系列3: Promt提示词

一、Promt提示词 Promt提示是引导 AI 模型生成特定输出的输入, 提示的设计和措辞会显著影响模型的响应。 在 Spring AI 中与 AI 模型交互的最低层级,处理提示有点类似于在 Spring MVC 中管理”视图”。 这涉及创建带有动态内容占位符的大段文本。 这些占…

用 Python 模拟雪花飘落效果

用 Python 模拟雪花飘落效果 雪花轻轻飘落,给冬日带来一份浪漫与宁静。本文将带你用一份简单的 Python 脚本,手把手实现「雪花飘落效果」动画。文章深入浅出,零基础也能快速上手,完整代码仅需一个脚本文件即可运行。 目录 前言…

Linux `cp` 命令深度解析与高阶应用指南

Linux `cp` 命令深度解析与高阶应用指南 一、核心功能解析1. 基本作用2. 与类似命令对比二、选项系统详解1. 基础选项矩阵2. 高阶选项说明三、高阶应用场景1. 企业数据备份2. 容器环境部署3. 系统安全审计四、特殊文件处理1. 符号链接处理2. 稀疏文件优化五、性能优化策略1. 大…

中国寻亲网宣布将关闭服务器 25年终落幕

近日,中国寻亲网发布公告称将于2025年7月15日起停止运行并关闭服务器。公告于2025年4月1日发布,内容提到根据公司股东大会决议,公司将停止全部业务并进行注销。自2025年5月1日起,中国寻亲网将不再发布新的寻亲信息,仅提供原有信息的更改服务,直至最终关闭。对于无法继续为…

Spring代理工厂类ProxyFactory作用以及实现原理

代理工厂类ProxyFactory AdvisedSupport(代理配置信息类)ProxyFactory(代理工厂类)小结测试 源码见:mini-spring 在 AOP(面向切面编程)中,Spring 支持两种常见的代理机制&#xff1a…

旺店通ERP集成金蝶ERP(金蝶EAS、KIS、K3、云星空、云星辰、云星瀚)

对接说明 旺店通ERP完成所有供应链业务单向同步到金蝶ERP进行成本核算和生成财务凭证: 旺店通ERP货品数据同步至金蝶ERP物料档案旺店通ERP供应商数据同步至金蝶ERP供应商档案旺店通ERP店铺数据同步至金蝶ERP客户档案旺店通ERP仓库数据同步至金蝶ERP仓库档案旺店通…

美国年轻人遭遇“求职寒冬” 就业市场冻结

5月23日,美国加利福尼亚州奥兰治,查普曼大学毕业生参加了毕业典礼。从5月到6月,美国大学迎来了毕业季。来自政府、研究机构和招聘平台的数据揭示了一个令年轻人不安的事实:求职者,尤其是职场新人,面临异常激烈的就业市场。CNBC报道指出,应届毕业生发现劳动力市场比几个月…

俄罗斯一副市长遭人肉炸弹袭击死亡 俄乌冲突背景下的悲剧

俄罗斯一副市长遭人肉炸弹袭击死亡 俄乌冲突背景下的悲剧!5月28日,俄罗斯斯塔夫罗波尔市副市长古尔齐耶夫遭遇爆炸袭击身亡。事发时,一名熟人走近古尔齐耶夫,随后该熟人携带的包发生爆炸。爆炸导致34岁的古尔齐耶夫和29岁的熟人身亡,这名男子在事发地附近租了一套公寓。古…

ArkUI(方舟UI框架)介绍

ArkUI(方舟UI框架)介绍 构建快速入门 使用ArkWeb构建页面

对话云蝠智能魏佳星:大模型呼叫如何重塑智能营销未来?

在数字化浪潮席卷全球的当下,智能营销已然成为企业角逐市场的关键 “武器”。而云蝠智能,作为行业内的 “弄潮儿”,正凭借创新技术引领着这一领域的变革。近日,我们有幸与云蝠智能创始人魏佳星展开深度对话,一同探寻云…

3条警犬退役训导员湿了眼眶 无言战友光荣卸甲

“立正!敬礼!”猎狐、涛涛、巴依从今天开始光荣退役。感谢它们用忠诚和无畏为昭通公安做出的突出贡献。近日,在云南省昭通市公安局警犬基地训练场上,民警辅警庄严敬礼,向三位特殊的战友——警犬“猎狐”“涛涛”“巴依”致以最高礼遇。这场催人泪下的退役仪式为它们的职业…

聊聊 Metasploit 免杀

各位小伙伴们,晚上好! 咱们今天打开宵夜“安全食材箱”,聊聊渗透测试绕过杀毒(免杀)的那些门道。你可以把免杀理解为——深夜做宵夜时,家里有人睡觉,但你非得去厨房整点美食,还不能…