YOLO入门实操(四):用YOLO预训练模型快速实现目标检测
这个系列主要面向计算机视觉新手、深度学习入门者,不追求晦涩的公式堆砌,重点拆解YOLO的核心逻辑、实操技巧和工程落地场景,帮助大家从“听说过YOLO”到“能上手用YOLO”,逐步吃透这个目标检测领域的“明星算法”。

文章目录
- 一、前置准备:PyCharm配置yolo_v11虚拟环境
- 步骤1:在PyCharm中打开Ultralytics的源代码
- 步骤2:配置已有的yolo_v11虚拟环境(核心步骤,环境名重点适配)
- 步骤3:PyCharm基础设置
- 环境配置高频避坑指南
- 二、核心实操:YOLOv11预训练模型实现目标检测
- 先了解:YOLOv11预训练模型版本选择
- 先了解:YOLO数据集文件分布
- 三大核心组成详细解读
- 1. 核心配置文件:**coco8.yaml**
- 2. 图片文件夹:images/
- 3. 标注文件夹:labels/
- YOLO 标准标注格式(txt 文件)
- 事前准备
- 场景1:图片检测
- 步骤1:准备批量检测图片
- 步骤2:新建Python文件,编写批量检测代码
- 步骤3:运行代码,查看批量检测结果
- 场景2:本地视频检测(适配监控视频、日常视频)
- 步骤1:准备本地视频
- 步骤2:新建Python文件,编写视频检测代码
- 步骤3:运行代码,操作视频检测
- 场景3高频踩坑指南
- 场景3:摄像头实时检测(适配电脑摄像头、外接摄像头)
- 步骤1:检查摄像头(前置准备)
- 步骤2:新建Python文件,编写摄像头检测代码
- 步骤3:运行代码,体验实时检测
- 场景4高频踩坑指南
- 提升:依赖 model.predict() 高层封装方法
- 实例代码
- predict 参数列举
- 三、拓展内容:YOLOv11预训练模型参数优化
- 1. 核心参数解读
- 2. 参数优化建议
- 3. YOLOv11预训练模型导出
- 四、全文总结与后续衔接
- 尾声
- 感谢大伙观看,别忘了三连支持一下
- 大伙也可以关注一下我的其它专栏,同样精彩喔~
- 大伙也可以添加下面的微信来交流
上一篇我们已经手把手完成了Windows/Linux双版本YOLO环境搭建,重点搭建了适配YOLOv11的yolo_v11虚拟环境,解决了新手最头疼的环境踩坑问题。
今天我们正式进入YOLO入门实操核心——用YOLOv11预训练模型快速实现目标检测,全程基于「Windows系统+PyCharm」(如果没有下载 Pycharm 可以看看下面这篇文章:https://blog.csdn.net/sikimayi/article/details/142887074),无需手动训练模型、无需标注数据集,直接复用官方预训练模型,3分钟就能实现图片、视频、摄像头实时检测。
先做好 PyCharm 与 yolo_v11 环境的衔接,再详细拆解 YOLOv11 预训练模型的全流程实操(从代码编写、参数解读到结果分析),同时标注 PyCharm 下 v11专属高频踩坑点和解决方案,补充v11预训练模型的版本选择、参数优化等实用技巧,确保每一步都能跟着复刻,帮新手快速建立YOLO实操信心,为后续自定义数据集训练、复杂场景优化打下坚实基础。
核心前提:
- 已完成上一篇的Windows YOLO环境搭建,成功创建yolo_v11虚拟环境(安装好Python 3.9、PyTorch 2.0+、Ultralytics 8.0+框架);
- 已安装PyCharm(推荐Community社区版,免费好用);
- 电脑已联网(首次运行需下载YOLOv11预训练模型,体积约100-300MB,下载后可重复使用,无需再次联网);
- 所有文件、路径均不包含中文和空格。
一、前置准备:PyCharm配置yolo_v11虚拟环境
上一篇我们在Anaconda中创建了yolo_v11虚拟环境,现在需要在PyCharm中配置该环境,确保代码能正常调用之前安装的PyTorch、Ultralytics等依赖,这是新手最容易卡壳的一步,全程分步拆解,无图文也能轻松操作,补充环境名适配的专属细节。
步骤1:在PyCharm中打开Ultralytics的源代码
在Pycharm上方打开文件夹中选择之前下载的Ultralytics的源码:

步骤2:配置已有的yolo_v11虚拟环境(核心步骤,环境名重点适配)
可以打开设置找到 python 解释器的部分,也可以直接点右下角快速打开。

如下图配置即可。

添加成功之后会出现下面的这些包。

步骤3:PyCharm基础设置
做好以下设置,可避免后续代码运行时出现中文乱码、依赖导入失败、控制台报错等问题,全程适配YOLOv11实操需求,新手必做。
-
编码设置(解决中文乱码):点击「File→Settings→Editor→File Encodings」,将「Global Encoding」「Project Encoding」「Default encoding for properties files」均设置为「UTF-8」,点击「Apply→OK」保存设置。
-
自动导包设置(提升效率):点击「File→Settings→Editor→General→Auto Import」,勾选「Add unambiguous imports on the fly」「Optimize imports on the fly」,勾选后代码中使用的cv2、ultralytics等模块会自动导入,无需手动编写导入语句。
-
控制台设置(避免运行报错):点击「File→Settings→Editor→Console→Python Console」,确保「Interpreter」选择的是yolo_v11,编码设置为UTF-8;同时取消勾选「Emulate terminal in output console」,避免摄像头实时检测时控制台乱码。
-
文件命名设置(规范实操):后续新建的Python文件、检测用的图片/视频,命名均采用「小写字母+下划线」的格式(如yolov11_detect.py、test_img.jpg),不要用中文、大写字母或空格,避免文件加载失败。
环境配置高频避坑指南
-
坑1:PyCharm找不到yolo_v11环境 → 排查3点:① Anaconda是否安装成功,是否能正常打开;② Anaconda Prompt中输入「conda activate yolo_v11」,确认能成功激活环境;③ 重新检查Python解释器路径,确保是yolo_v11目录下的python.exe,而非Anaconda根目录。
-
坑2:配置环境后报错「No module named ‘ultralytics’」或「No module named ‘torch’」 → 确认当前环境是yolo_v11(右下角显示),若还是报错,打开PyCharm底部的Terminal(终端),输入「pip install ultralytics torch==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple」,重新安装依赖即可(镜像源加速,避免超时)。
-
坑3:环境配置成功后,运行代码提示「Python interpreter is not selected」 → 点击PyCharm右下角,手动切换到yolo_v11环境,重启PyCharm后再次运行代码。
-
坑4:Anaconda Prompt中能激活yolo_v11,但PyCharm中找不到 → 重新配置Anaconda环境变量,确保D:Anaconda3、D:Anaconda3Scripts、D:Anaconda3Libraryin三个路径已添加到系统环境变量,重启电脑后再配置PyCharm。
二、核心实操:YOLOv11预训练模型实现目标检测
YOLOv11作为当前高精度场景的首选版本,其预训练模型是官方用COCO海量数据集(包含80+类日常目标,如人、车、猫、狗、桌椅、电器等)训练好的,我们无需手动训练、无需标注数据,直接调用就能实现高精度目标检测,操作逻辑简洁,适合新手入门。
统一说明:所有代码均在PyCharm中编写、运行,全程基于yolo_v11环境;本文按「从简单到复杂」的顺序,依次拆解「单张图片检测→多张图片检测→本地视频检测→摄像头实时检测」,每一种场景都提供完整可运行代码、详细注释和结果查看方法,新手可先从单张图片检测入手,熟悉后再逐步拓展其他场景;代码可直接复制使用,仅需修改「图片/视频路径」等简单参数。
先了解:YOLOv11预训练模型版本选择
官方提供了5个不同尺度的YOLOv11预训练模型,适配不同算力设备和精度需求,新手无需纠结,优先选择v11s.pt(中等尺度,兼顾速度和精度,适配大部分人群的电脑),具体选择建议如下:
-
yolov11n.pt:轻量化版本,参数量最小(约2.1M),速度最快,适合低配电脑、笔记本(无独立显卡),精度略低,低配电脑首选。
-
yolov11s.pt:中等尺度版本,参数量6.8M,速度快(推理速度约320帧/秒),精度高(COCO mAP@0.5达52.1%),兼顾速度与精度。
-
yolov11m.pt:中高精度版本,参数量15.2M,精度高于v11s,速度略慢,适合有独立显卡、对精度有一定要求的人群。
-
yolov11l.pt、yolov11x.pt:高精度版本,参数量大(分别为25.9M、43.7M),精度极高,适合复杂场景、高精度需求,但速度较慢,对电脑算力要求高(需独立显卡,GPU显存≥8G)。
补充:所有模型首次运行时会自动下载,下载完成后保存在本地,后续运行无需再次下载,若下载失败,可手动访问Ultralytics官方网站下载,放入对应路径即可,网址如下:https://docs.ultralytics.com/zh/models/yolo11/#performance-metrics。
具体位置如下图:

先了解:YOLO数据集文件分布
我们先来看看YOLO格式的数据集是什么样的,以 COCO8 为例:
coco8/ # 数据集根目录
├── coco8.yaml # YOLO数据集核心配置文件
├── images/ # 存放所有图片(训练+验证),图片与标注一一对应
│ ├── train/ # 训练集图片
│ │ ├── 000000000009.jpg
│ │ ├── 000000000025.jpg
│ │ └──
│ └── val/ # 验证集图片
│ ├── 000000000139.jpg
│ ├── 000000000285.jpg
│ └──
└── labels/ # 存放所有标注文件(训练+验证,纯文本txt格式),与images目录结构完全一致
├── train/ # 训练集标注文件(txt文件,与train图片一一同名)
│ ├── 000000000009.txt
│ ├── 000000000025.txt
│ └──
└── val/ # 验证集标注文件(txt文件,与val图片一一同名)
├── 000000000139.txt
├── 000000000285.txt
└──
- 同名对应:每张图片对应一个同名的 txt 标注文件(如000000000009.jpg ↔ 000000000009.txt),无图片的标注、无标注的图片都会被模型忽略;
- 结构一致:labels/的目录结构必须和images/完全一致,否则模型无法匹配图片与标注;
- 命名规则:所有文件 / 文件夹名无中文、无空格、无特殊符号,建议用数字 / 字母 / 下划线,路径也需遵循此规则;
- 格式要求:图片支持jpg/png/jpeg(YOLO 默认优先识别 jpg),标注必须为纯文本 txt 格式(不支持 VOC 的 xml、COCO 的 json,需转换)。
三大核心组成详细解读
1. 核心配置文件:coco8.yaml
coco8.yaml 是 YOLO 模型加载数据集的唯一入口,存放数据集的根路径、训练 / 验证集路径、类别数量、类别名称等关键信息,模型训练前会先读取该文件,格式错误会直接导致训练失败。
path: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
...
yaml 配置关键避坑
- path建议用绝对路径(如D:/YOLO_Practice/datasets/coco8),相对路径易因项目目录变化导致 “找不到数据集”;
- nc必须与names的长度一致(如 COCO8 的 nc=8,names 有 8 个元素),否则模型会报维度错误;
- names的索引顺序不可随意修改,必须与标注文件中的class_id完全匹配(如标注中 class_id=0 代表 person,names [0] 就必须是 person);
- 路径分隔符用/(斜杠),不要用 Windows 的(反斜杠),否则会被识别为转义字符导致路径报错。
2. 图片文件夹:images/
存放 YOLO 模型训练的输入图片,分为train/(训练集,用于模型学习特征)和val/(验证集,用于训练过程中评估模型精度,不参与模型学习)
新手实操注意
1.图片分辨率无需统一,YOLO 模型会自动在训练时将图片缩放至指定尺寸(如 640×640,YOLOv11 默认尺寸);
2.避免使用过大 / 过小的图片(如分辨率超过 4K、小于 100×100),会增加训练耗时或导致特征提取不充分;
3.图片质量需清晰,模糊、过曝、过暗的图片会降低模型训练精度。
3. 标注文件夹:labels/
存放图片对应的YOLO 格式标注文件(txt 格式),与images/目录结构完全一致,是 YOLO 数据集的核心,标注格式为 YOLO 专属的归一化五值格式,也是新手制作自定义数据集的重点和难点。
YOLO 标准标注格式(txt 文件)
COCO8 的每个 txt 标注文件,内部每行对应图片中的一个目标,每行包含5 个归一化数值,格式为:
class_id x_center y_center width height
7 0.502 0.313 0.996 0.625
class_id:目标类别 ID,整数,与coco8.yaml中names的索引一一对应(如 COCO8 中 car 的 class_id=2);
x_center:目标框中心的 x 坐标,相对图片宽度的归一化值(0~1 之间);
y_center:目标框中心的 y 坐标,相对图片高度的归一化值(0~1 之间);
width:目标框的宽度,相对图片宽度的归一化值(0~1 之间);
height:目标框的高度,相对图片高度的归一化值(0~1 之间)。
事前准备
为了后期的维护,和整个工程的协调性,我们先来建两个文件夹,在我们的Ultralytics里面。
models,用来存储我们的模型
datasets,用来存储我们的数据集
场景1:图片检测
核心目标:用YOLOv11预训练模型,检测本地图片中的目标,标注目标框、类别和置信度,实现可视化显示和结果保存,全程3行核心代码,新手3分钟可完成。
步骤1:准备批量检测图片
-
创建一个「images」文件夹,将需要批量检测的图片(无中文、无空格,命名规范)全部复制到该文件夹中(如test_img1.jpg、test_img2.jpg、car_img.jpg等),数量不限。
-
确保所有图片格式为常见格式(jpg、png均可),避免使用特殊格式(如webp),否则可能导致读取失败。
步骤2:新建Python文件,编写批量检测代码
右键点击项目名称→「New→Python File」,文件名改为「yolov11_pretrain_batch_detect.py」,复制以下代码(完整可运行,带详细注释):
# 导入核心依赖模块
from ultralytics import YOLO
import cv2
import os
# 1. 加载YOLOv11预训练模型(与场景1一致,新手首选yolov11s.pt)
model = YOLO('yolov11s.pt')
# 2. 定义批量检测的图片路径和结果保存路径(重点)
img_dir = 'images' # 图片存放目录(批量读取该目录下的所有图片)
result_dir = 'batch_results' # 批量检测结果保存目录(自动创建)
# 3. 创建结果保存目录(若不存在则创建,避免报错)
if not os.path.exists(result_dir):
os.makedirs(result_dir)
# 4. 批量读取图片,进行检测(核心批量处理逻辑)
# 遍历images目录下的所有文件,筛选出图片文件(jpg、png)
for img_name in os.listdir(img_dir):
# 筛选图片文件(仅处理jpg、png格式,可补充其他格式)
if img_name.endswith(('.jpg', '.png', '.jpeg')):
# 拼接图片完整路径(避免路径报错)
img_path = os.path.join(img_dir, img_name)
print(f"正在检测图片:{img_name}")
# 调用模型检测(参数与场景1一致,可根据需求调整)
results = model(img_path, stream=False, conf=0.25, iou=0.7)
# 处理每张图片的检测结果,保存到batch_results目录
for result in results:
annotated_frame = result.plot(conf=True, labels=True, boxes=True)
# 保存检测结果,文件名与原始图片一致,便于对照
save_path = os.path.join(result_dir, img_name)
cv2.imwrite(save_path, annotated_frame)
# 可选:显示当前检测的图片(按ESC键切换到下一张,不显示可删除以下3行)
cv2.imshow('YOLOv11 Batch Image Detection', annotated_frame)
key = cv2.waitKey(0)
if key == 27:
cv2.destroyAllWindows()
# 批量检测完成,控制台提示
cv2.destroyAllWindows() # 关闭所有显示窗口
print("="*50)
print(f"批量检测完成!共检测图片:{len([f for f in os.listdir(img_dir) if f.endswith(('.jpg', '.png', '.jpeg'))])}张")
print(f"所有检测结果已保存到:{result_dir} 文件夹中")
print("="*50)
步骤3:运行代码,查看批量检测结果
-
坑1:代码运行报错「Could not find image file」 → 图片路径错误,检查img_path是否正确,确保图片已放入images文件夹,文件名无中文、无空格;推荐使用os.path.join()方法编写路径,避免路径格式错误。
-
坑2:首次运行模型下载失败、超时 → 切换国内镜像源,打开PyCharm Terminal,输入「pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple」,重启代码运行;或用手机热点联网下载(部分校园网、公司网限制)。
-
坑3:显示窗口一闪而过 → 忘记编写cv2.waitKey(0)语句,补充该语句即可(代码中已包含,不要删除);若仍一闪而过,检查是否有多个cv2.imshow()语句,关闭多余语句。
-
坑4:检测结果中没有目标(控制台显示目标数量为0) → 调整conf参数(降低至0.2或0.15),部分目标置信度较低,默认0.25会过滤;或更换一张目标清晰、常见的图片(如包含公交车、行人的图片)。
-
坑5:报错「cv2.error: (-215:Assertion failed)」 → 图片路径错误或图片损坏,重新确认图片路径,更换一张完好的图片,再次运行代码。
场景2:本地视频检测(适配监控视频、日常视频)
核心目标:用YOLOv11预训练模型检测本地视频中的目标,实时标注目标框、类别和置信度,支持视频播放、暂停,检测完成后可保存检测后的视频,适配监控视频分析、日常视频目标检测等场景,操作简单,仅需修改视频路径。
步骤1:准备本地视频
-
在项目目录下,右键点击项目名称→「New→Directory」,新建「videos」文件夹,用于存放本地视频。
-
找一段本地视频(如MP4格式,建议时长1-5分钟,避免过长导致检测耗时久),命名为「test_video.mp4」(无中文、无空格),复制到「videos」文件夹中;新手可下载一段简短的监控视频、街头视频,便于快速测试。
步骤2:新建Python文件,编写视频检测代码
右键点击项目名称→「New→Python File」,文件名改为「yolov11_pretrain_video_detect.py」,复制以下代码(完整可运行,带详细注释):
# 导入核心依赖模块
from ultralytics import YOLO
import cv2
import os
# 1. 加载YOLOv11预训练模型(新手首选yolov11s.pt,视频检测兼顾速度和精度)
model = YOLO('yolov11s.pt')
# 2. 定义本地视频路径和检测结果保存路径
video_path = os.path.join('videos', 'test_video.mp4') # 本地视频路径(替换为你的视频路径)
video_result_dir = 'video_results' # 视频检测结果保存目录
if not os.path.exists(video_result_dir):
os.makedirs(video_result_dir)
# 3. 读取本地视频(调用cv2.VideoCapture,打开视频文件)
cap = cv2.VideoCapture(video_path)
# 检查视频是否成功打开(避免视频路径错误、视频损坏)
if not cap.isOpened():
raise ValueError("无法打开视频文件,请检查视频路径是否正确、视频是否完好!")
# 4. 配置视频保存参数(保存检测后的视频,可选,新手可保留)
# 获取视频的帧率、宽、高(用于保存视频时匹配原始视频参数)
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定义视频编码器(MP4格式,适配大部分播放器)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# 定义视频保存路径和参数
video_save_path = os.path.join(video_result_dir, 'detected_test_video.mp4')
out = cv2.VideoWriter(video_save_path, fourcc, fps, (width, height))
print("视频检测开始,按ESC键退出检测,按空格暂停/继续播放!")
print("="*50)
# 5. 循环读取视频帧,进行实时检测(核心逻辑)
while cap.isOpened():
# 读取一帧视频(ret:是否读取成功,frame:当前视频帧)
ret, frame = cap.read()
if not ret:
break # 视频读取完毕,退出循环
# 调用YOLOv11模型检测当前帧(stream=False,适配视频帧检测)
results = model(frame, stream=False, conf=0.25, iou=0.7)
# 处理当前帧的检测结果,绘制目标框
annotated_frame = results[0].plot(conf=True, labels=True, boxes=True)
# 显示检测后的视频帧(实时播放)
cv2.imshow('YOLOv11 Video Detection', annotated_frame)
# 保存当前帧到视频文件(检测完成后生成完整视频)
out.write(annotated_frame)
# 键盘控制:按ESC键退出,按空格暂停/继续
key = cv2.waitKey(1) & 0xFF
if key == 27: # ESC键,退出检测
break
elif key == 32: # 空格键,暂停/继续
cv2.waitKey(0)
# 6. 检测完成,释放资源(必写,避免占用内存、导致报错)
cap.release() # 释放视频读取资源
out.release() # 释放视频保存资源
cv2.destroyAllWindows() # 关闭所有显示窗口
print("="*50)
print("视频检测完成!")
print(f"检测后的视频已保存到:{video_save_path}")
print("="*50)
步骤3:运行代码,操作视频检测
-
运行代码,视频会自动开始播放,播放窗口中会实时显示目标框、类别和置信度(如视频中的人、车)。
-
键盘控制技巧(新手必记):① 按空格键:暂停/继续播放视频(暂停后可仔细查看检测结果);② 按ESC键:退出视频检测(无需等待视频播放完毕)。
-
检测完成后,「video_results」文件夹中会生成检测后的视频(detected_test_video.mp4),可打开播放,查看完整的检测效果(目标框实时跟随视频中的目标)。
场景3高频踩坑指南
-
坑1:报错「无法打开视频文件,请检查视频路径是否正确」 → 视频路径错误,检查video_path是否正确,确保视频已放入videos文件夹,文件名无中文、无空格;视频格式不支持(如flv),转换为MP4格式后再检测。
-
坑2:视频播放卡顿、帧率低 → 更换轻量化模型(yolov11n.pt),降低conf参数(如0.2),或关闭视频保存功能(删除out.write(annotated_frame)相关代码),提升播放速度。
-
坑3:检测后的视频无法打开 → 视频编码器配置错误,确保fourcc = cv2.VideoWriter_fourcc(*‘mp4v’),保存格式为MP4;若仍无法打开,降低视频分辨率(代码中可添加width、height缩放逻辑,新手可暂时跳过)。
-
坑4:视频播放完毕后,程序未自动退出 → 手动按ESC键退出,或检查代码中「if not ret: break」语句是否存在(代码中已包含)。
场景3:摄像头实时检测(适配电脑摄像头、外接摄像头)
核心目标:调用电脑内置摄像头(或外接摄像头),用YOLOv11预训练模型实时检测摄像头拍摄范围内的目标,实时标注、实时显示,适合实时监控、现场目标检测等场景,无需准备图片/视频,打开摄像头即可检测。
步骤1:检查摄像头(前置准备)
-
确保电脑内置摄像头正常工作(打开电脑相机应用,确认能正常拍摄);若使用外接摄像头,连接电脑后,确认摄像头已被识别(设备管理器中查看)。
-
关闭电脑中占用摄像头的应用(如相机、微信视频通话),避免摄像头被占用,导致代码报错。
步骤2:新建Python文件,编写摄像头检测代码
右键点击项目名称→「New→Python File」,文件名改为「yolov11_pretrain_camera_detect.py」,复制以下代码(完整可运行,无需修改核心参数):
# 导入核心依赖模块
from ultralytics import YOLO
import cv2
# 1. 加载YOLOv11预训练模型(摄像头实时检测,新手首选yolov11s.pt,兼顾速度和精度)
model = YOLO('yolov11s.pt')
# 2. 调用电脑摄像头(0表示内置摄像头,1表示外接摄像头)
cap = cv2.VideoCapture(0)
# 检查摄像头是否成功打开
if not cap.isOpened():
raise ValueError("无法打开摄像头,请检查摄像头是否正常工作、是否被其他应用占用!")
print("摄像头实时检测开始,按ESC键退出检测,按空格暂停/继续!")
print("检测范围:摄像头拍摄范围内的80+类目标(人、车、手机、水杯等)")
print("="*50)
# 3. 实时检测逻辑(循环读取摄像头帧,实时检测)
while cap.isOpened():
# 读取摄像头当前帧
ret, frame = cap.read()
if not ret:
break
# 调用模型实时检测当前帧(stream=False,实时性更强)
results = model(frame, stream=False, conf=0.25, iou=0.7)
# 绘制检测结果(实时标注目标框、类别、置信度)
annotated_frame = results[0].plot(conf=True, labels=True, boxes=True)
# 实时显示检测结果(弹出窗口,显示摄像头画面和检测标注)
cv2.imshow('YOLOv11 Camera Real-Time Detection', annotated_frame)
# 键盘控制:按ESC键退出,按空格暂停/继续
key = cv2.waitKey(1) & 0xFF
if key == 27: # ESC键,退出实时检测
break
elif key == 32: # 空格键,暂停/继续检测
cv2.waitKey(0)
# 4. 检测完成,释放资源
cap.release()
cv2.destroyAllWindows()
print("="*50)
print("摄像头实时检测已退出!")
print("="*50)
步骤3:运行代码,体验实时检测
-
运行代码,电脑内置摄像头会自动打开(外接摄像头需将代码中cap = cv2.VideoCapture(0)改为cap = cv2.VideoCapture(1))。
-
弹出显示窗口,窗口中会实时显示摄像头拍摄的画面,同时自动标注画面中的目标(如手、手机、水杯、人脸等),显示类别和置信度,实时跟随目标移动。
-
键盘控制:① 按空格键:暂停实时检测,可仔细查看标注结果;再次按空格键,恢复检测;② 按ESC键:退出实时检测,关闭摄像头和显示窗口。
场景4高频踩坑指南
-
坑1:报错「无法打开摄像头,请检查摄像头是否正常工作」 → 摄像头被其他应用占用(关闭相机、微信等应用);摄像头硬件故障(检查摄像头是否开启);外接摄像头未正确连接(重新插拔摄像头)。
-
坑2:实时检测卡顿、延迟高 → 更换轻量化模型(yolov11n.pt);降低conf参数(如0.2);关闭电脑中其他占用内存、CPU的应用(如游戏、视频软件),提升实时性。
-
坑3:检测不到目标 → 摄像头拍摄范围内无常见目标(可手持手机、水杯等物品对准摄像头);调整conf参数(降低至0.15);确保光线充足(光线过暗会影响检测精度)。
-
坑4:退出检测后,摄像头仍在工作(指示灯亮) → 代码未正常释放资源,手动关闭PyCharm,或在任务管理器中结束Python进程,摄像头即可关闭。
提升:依赖 model.predict() 高层封装方法
使用这个方法我们可以让我们的代码更加简洁,更具可读性。
实例代码
# 这是识别图片的,基本规则和前面说的一样,这里就不罗嗦了。
from ultralytics import YOLO
# 可配置参数
image_source = r"datasets" # 图片路径(单张/文件夹)
save_path = r"results" # 结果存储地址
# 加载对应精度的YOLO模型
model = YOLO(f"./models/yolov8n.pt")
# 执行图片识别
model.predict(
source=image_source,
save_dir=save_path, # 自定义结果存储地址
save=True, # 保存识别结果
show=False, # 不实时显示识别画面
stream=False,
conf=0.25, # 置信度阈值(可根据需求调整,越高识别越严格)
iou=0.7,
)
print(f"图片识别完成,结果已保存至:{save_path}")
predict 参数列举
source: str/Path/PIL/np.ndarray/list/torch.Tensor → None
推理输入源;支持:图片/视频本地路径、PIL图像、numpy数组、torch张量、摄像头(0/1)、网络流URL(如RTSP)
conf: float → 0.25
检测置信度阈值,仅保留置信度≥该值的预测框,调参核心(如0.5可过滤低置信度误检)
iou: float → 0.7
NMS非极大值抑制IOU阈值,过滤重叠预测框,值越小过滤越严格
imgsz: int/tuple → 640
推理图像尺寸,需为32的倍数;int自动转为正方形(如640→(640,640)),tuple支持自定义宽高(如(1280,720))
device: str/int/torch.device → None
推理设备,自动优先GPU;支持:0/cuda:0(GPU)、cpu、mps(苹果芯片)
show: bool → False
是否弹出窗口实时显示推理结果(图片/视频帧)
save: bool → False
是否保存带标注的推理结果到本地
classes: list/int → None
指定仅检测的类别,传入类别编号(如COCO:0=人,2=汽车);示例:classes=0 或 classes=[0,2,5]
project: str/Path → ‘runs/predict’
推理结果保存的根目录,可自定义绝对/相对路径
name: str/Path → ‘exp’
推理结果子目录名,最终保存路径为「project/name」
exist_ok: bool → False
是否覆盖已存在的保存目录;False则自动创建exp1/exp2等新目录,True直接覆盖
max_det: int → 300
单张图像最大检测目标数,限制预测框输出数量(如小目标场景可调大)
augment: bool → False
是否使用测试时增强(TTA),提升推理精度(会增加少量推理时间)
三、拓展内容:YOLOv11预训练模型参数优化
前文代码中使用的是默认参数(conf=0.25、iou=0.7),可根据检测效果,适当调整参数,优化检测精度和速度,以下是YOLOv11常用参数解读和优化建议,适配不同场景需求。
1. 核心参数解读
-
conf(置信度阈值):默认0.25,取值范围0-1,数值越大,检测越严格(只有置信度高于该值的目标才会被标注);数值越小,检测越宽松(易检测到模糊、不清晰的目标)。
-
iou(交并比阈值):默认0.7,取值范围0-1,用于过滤重复目标框(避免一个目标被多次标注);数值越大,允许的重复框越多;数值越小,过滤越严格。
-
stream(流式检测):默认False,用于控制是否启用流式检测;单张图片、视频、摄像头检测,建议设为False(速度更快);批量检测大量图片/视频,可设为True(节省内存)。
-
device(运行设备):默认自动识别(优先使用GPU,无GPU则使用CPU);可手动指定device=‘cpu’(强制使用CPU)、device=0(使用第1块GPU),新手无需手动指定,默认即可。
2. 参数优化建议
- 场景优化:
- ① 高精度需求(如细小目标检测):conf=0.2-0.25,iou=0.6-0.7,更换模型为yolov11m.pt;
- ② 快速检测需求(如摄像头实时检测):conf=0.25-0.3,iou=0.7-0.8,更换模型为yolov11n.pt;
- ③ 避免重复标注:降低iou参数(如0.5-0.6)。
- 常见问题优化:
- ① 检测不到目标:降低conf至0.15-0.2,更换清晰图片/视频,确保光线充足;
- ② 目标标注重复:降低iou至0.5-0.6;
- ③ 检测速度慢:更换轻量化模型,提高conf参数,关闭显示功能。
3. YOLOv11预训练模型导出
新手后续若需将YOLOv11预训练模型部署到其他平台(如嵌入式设备、网页),可将模型导出为ONNX、TensorRT等格式,操作简单,PyCharm中仅需1行核心代码,示例如下:
from ultralytics import YOLO
# 加载YOLOv11预训练模型
model = YOLO('yolov11s.pt')
# 导出模型(支持导出为onnx、tensorrt、coreml等格式,新手首选onnx)
model.export(format='onnx') # 导出为ONNX格式,保存路径为当前项目目录
print("模型导出完成!导出格式:ONNX,可用于后续部署。")
四、全文总结与后续衔接
本文基于Windows系统+PyCharm,以yolo_v11虚拟环境为基础,详细拆解了YOLOv11预训练模型的全场景实操,提供了完整可运行代码、详细注释和高频踩坑指南,无需手动训练、无需标注数据,新手3分钟可上手,成功实现高精度目标检测。
核心收获:
- 掌握PyCharm与yolo_v11环境的衔接方法,解决环境配置的高频问题;
- 学会调用YOLOv11预训练模型,实现多场景目标检测,理解核心代码逻辑;
- 掌握参数优化技巧,能根据检测效果调整参数,提升检测精度和速度;
- 熟悉YOLOv11的模型版本选择,适配自身电脑配置。
尾声
入门YOLO实操,预训练模型是最好的“敲门砖”——无需投入大量时间训练模型、标注数据,就能快速体验目标检测的乐趣和价值,而YOLOv11作为当前高精度版本,既能满足新手的入门需求,也能适配后续复杂场景的实操,是新手进阶的优质选择。
希望通过本文的实操讲解,大家能顺利上手YOLOv11预训练模型,建立YOLO实操信心,避开常见坑点,为后续的自定义训练、模型优化和项目部署打下坚实基础。下一篇自定义数据集训练,我们不见不散~









