news 2026/5/1 1:41:42

用YOLO11做了个智能监控小项目,附全过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用YOLO11做了个智能监控小项目,附全过程

用YOLO11做了个智能监控小项目,附全过程

1. 为什么选YOLO11做监控?不是为了追新,而是真好用

你有没有试过在树莓派上跑目标检测模型,结果卡在加载模型那一步,风扇狂转、温度飙升、画面卡成PPT?我试过。YOLOv8、YOLOv10都跑过,要么显存爆掉,要么推理一帧要两秒——这哪叫实时监控,这叫延时回放。

直到遇到YOLO11。不是官方命名的“YOLOv11”,而是Ultralytics团队在2024年中后期发布的新一代轻量级主干架构迭代版本(内部代号YOLO11),它不是简单改个数字,而是在保持YOLO系列易用性的同时,对边缘部署做了三处关键优化:

  • 首帧启动快3倍:模型加载+预热时间压缩到1.2秒内(实测树莓派5);
  • 内存占用降40%:YOLO11n仅需约780MB RAM,比同精度YOLOv8n低220MB;
  • 原生支持NCNN导出:不用手动改图结构,一行命令直接生成可嵌入C++项目的二进制模型。

这不是参数表里的漂亮数字,是我在仓库里架起摄像头、连上树莓派、按下运行键后,屏幕上每秒稳定输出6.8帧带框标注画面的真实反馈。没有花哨的benchmark截图,只有能立刻用起来的安静流畅。

下面带你从零开始,把YOLO11变成你家/办公室/小店门口的智能守卫——不讲原理推导,只说怎么让摄像头真正“看懂”画面。

2. 环境准备:三步到位,拒绝环境地狱

YOLO11镜像已为你预装全部依赖,但实际使用前,得先确认它“活”着,并且你能“摸到”它。这里不走复杂SSH密钥配置,用最直觉的方式连上去。

2.1 启动镜像并进入工作目录

镜像启动后,默认打开Jupyter Lab界面(见文档第一张图)。但注意:Jupyter只是开发入口,真正跑监控脚本必须进终端。点击右上角+Terminal,新开一个终端标签页。

然后执行:

cd ultralytics-8.3.9/

这是YOLO11核心代码所在目录。别跳过这步——很多新手卡在找不到train.py,其实是没进对文件夹。

2.2 验证基础能力:先让模型“认出一张图”

别急着接摄像头。先用一张静态图验证环境是否正常:

python detect.py --source https://ultralytics.com/images/bus.jpg --weights yolo11n.pt --conf 0.25

几秒后,终端会输出类似:

Results saved to runs/detect/predict

接着在左侧文件浏览器里点开runs/detect/predict/bus.jpg,你应该看到一辆公交车被清晰框出,车窗、车轮、车牌位置都有标注——说明PyTorch环境、CUDA(如果启用)、模型权重全就绪。

如果报错ModuleNotFoundError: No module named 'cv2',执行pip install opencv-python-headless即可。这是镜像为精简体积默认未装GUI版OpenCV,而监控不需要显示窗口,headless版更省资源。

2.3 关于硬件选择的实在话

你可能正看着手边的树莓派犹豫:该用哪个型号?我的建议很直接——

  • 树莓派4B(4GB):够用,但需关闭桌面环境(用raspi-config→ Boot Options → Desktop/CLI → Console Autologin),否则内存吃紧;
  • 树莓派5(8GB):推荐,开启超频后实测YOLO11n可达7.2 FPS,且USB3接口能直连高速USB摄像头;
  • 别用树莓派Zero/3:CPU太弱,YOLO11n勉强跑通但帧率<2,失去监控意义。

记住:监控不是跑分,是持续稳定输出。多花100块钱升级硬件,比花三天调环境更值得。

3. 实战:从单图检测到实时视频流监控

现在进入核心环节。我们不做“训练自己的数据集”这种高门槛事——YOLO11预训练模型对人、车、包、猫狗等常见目标识别准确率已超92%(COCO val2017测试),足够应付日常监控场景。

3.1 方案选型:两种实时流接入方式对比

YOLO11支持多种视频源输入,但对树莓派而言,只有两种真正实用:

接入方式优点缺点适用场景
Picamera2直连延迟最低(<120ms)、CPU占用稳、无需额外服务仅支持树莓派官方摄像头(CSI接口)固定安装、追求极致响应
TCP流转发兼容任意USB摄像头、IP摄像头、甚至手机投屏需额外启服务、延迟略高(~200ms)、偶发丢帧临时调试、多设备切换、非CSI摄像头

我全程用Picamera2方案(代码更简洁、稳定性更高),但文末会附TCP流完整代码供你按需切换。

3.2 Picamera2方案:12行代码搞定实时监控

新建文件monitor_pi.py,粘贴以下代码(已实测通过,无需修改):

import cv2 from picamera2 import Picamera2 from ultralytics import YOLO # 1. 初始化摄像头(适配树莓派5,1280x720@30fps) picam2 = Picamera2() picam2.preview_configuration.main.size = (1280, 720) picam2.preview_configuration.main.format = "RGB888" picam2.preview_configuration.align() # 自动适配传感器 picam2.configure("preview") picam2.start() # 2. 加载YOLO11轻量模型(自动下载yolo11n.pt到本地) model = YOLO("yolo11n.pt") # 3. 主循环:捕获→推理→绘制→显示 while True: frame = picam2.capture_array() # 获取RGB帧 results = model(frame, verbose=False) # 关闭日志,提速 annotated_frame = results[0].plot(boxes=True, labels=True, conf=True) # 绘制检测框 # 显示(窗口名可自定义) cv2.imshow("YOLO11 Smart Monitor", annotated_frame) # 按q退出 if cv2.waitKey(1) == ord("q"): break # 4. 清理资源 cv2.destroyAllWindows() picam2.stop()

关键细节说明

  • verbose=False关掉每帧的控制台日志,避免IO拖慢速度;
  • plot()conf=True会在框上显示置信度(如0.87),方便判断识别可靠性;
  • cv2.imshow在树莓派上需确保已启用桌面环境(或通过VNC连接),若纯终端运行,删掉cv2.imshow相关行,改用cv2.imwrite保存截图即可。

运行它:

python monitor_pi.py

你会看到一个窗口实时显示摄像头画面,人走过时自动标出绿色方框,汽车驶过标出蓝色方框——这就是你的第一个智能监控节点。

3.3 进阶:让监控“有记忆”,不只是“看一眼”

实时检测只是起点。真正的智能监控需要事件触发:比如检测到人停留超10秒才告警,或只在凌晨时段对移动物体报警。

在上述代码循环内加入计时逻辑(替换while True:部分):

import time last_person_time = 0 alert_cooldown = 10 # 告警冷却时间(秒) while True: frame = picam2.capture_array() results = model(frame, verbose=False) boxes = results[0].boxes current_time = time.time() # 检测到人且置信度>0.5 person_detected = any(cls == 0 and conf > 0.5 for cls, conf in zip(boxes.cls, boxes.conf)) if person_detected: if current_time - last_person_time > alert_cooldown: print(f"[ALERT] Person detected at {time.strftime('%H:%M:%S')}") # 此处可添加:保存截图、发微信通知、触发声光报警 last_person_time = current_time

这段代码让系统不再“每帧都喊”,而是冷静观察——只有当人出现且间隔超10秒,才触发一次告警。这才是工程中真正可用的逻辑。

4. 效果实测:不吹牛,只列数据

我把这套系统架在自家玄关,连续运行72小时,记录关键指标:

测试项实测结果说明
平均帧率6.8 FPS树莓派5 + 官方HQ摄像头,室温25℃
单帧处理耗时142±18 ms含图像采集+推理+绘图,不含显示延迟
内存占用810 MBfree -h查看,稳定无增长
高温表现62℃运行3小时后,加装散热片后降至54℃
误报率<3%对窗帘晃动、宠物猫狗、光影变化的误检率

特别值得提的是夜间效果:开启摄像头红外模式(picam2.set_controls({"AeEnable": False, "ExposureTime": 20000}))后,YOLO11n对黑白画面中的人形轮廓识别依然稳定,框选准确率约86%——虽不如白天,但已远超传统运动检测算法。

5. 部署优化:让监控真正“无人值守”

写完代码只是开始。要让它7×24小时运行,还需三步加固:

5.1 开机自启:拔掉键盘鼠标后它依然工作

创建systemd服务,让树莓派重启后自动运行监控脚本:

sudo nano /etc/systemd/system/yolo-monitor.service

填入:

[Unit] Description=YOLO11 Smart Monitor After=network.target [Service] Type=simple User=pi WorkingDirectory=/home/pi/ultralytics-8.3.9 ExecStart=/usr/bin/python3 /home/pi/ultralytics-8.3.9/monitor_pi.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload sudo systemctl enable yolo-monitor.service sudo systemctl start yolo-monitor.service

现在拔掉显示器、键盘,只留电源和网线,它就在后台静静守护。

5.2 日志与告警:问题发生时你知道在哪

monitor_pi.py开头添加日志记录:

import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('/home/pi/yolo_monitor.log'), logging.StreamHandler() ] )

并在告警处改为:

logging.info(f"Person detected at {time.strftime('%H:%M:%S')}")

这样所有告警和异常都会记入/home/pi/yolo_monitor.log,排查问题时直接tail -f yolo_monitor.log即可。

5.3 资源保护:防止SD卡被日志撑爆

树莓派SD卡寿命有限。在/etc/fstab中添加一行(需root权限):

tmpfs /var/log tmpfs defaults,noatime,nosuid,size=100m 0 0

重启后,所有日志写入内存临时文件系统,断电即清空,彻底告别SD卡损坏。

6. 总结:一个监控项目教会我的事

这个看似简单的YOLO11监控项目,其实浓缩了边缘AI落地的核心逻辑:

  • 不迷信最新模型:YOLO11n不是参数最多的,但它是当前树莓派上综合体验最好的——启动快、占内存少、生态成熟;
  • 监控的本质是可靠,不是炫技:与其追求识别100类物体,不如把人/车/包三类识别做到99%准、7FPS稳、72小时不崩;
  • 工程化思维比算法更重要:systemd自启、日志分级、SD卡保护……这些“不起眼”的配置,才是项目能否真正用起来的分水岭。

你现在拥有的,不是一个教程Demo,而是一个可立即部署的监控基线系统。下一步,你可以:

  • 把告警截图自动上传到私有云盘;
  • 用Flask搭个简易Web界面,远程查看实时画面;
  • 接入Home Assistant,实现“有人进门,客厅灯自动亮起”。

技术的价值,永远在于它解决了什么真实问题。而你的摄像头,此刻已经睁开了眼睛。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 17:54:57

Emotion2Vec+ Large模型加载超时?网络与缓存协同优化

Emotion2Vec Large模型加载超时&#xff1f;网络与缓存协同优化 1. 问题现场&#xff1a;为什么第一次识别总要等10秒&#xff1f; 你刚启动 Emotion2Vec Large 语音情感识别系统&#xff0c;兴冲冲点开 http://localhost:7860&#xff0c;上传一段3秒的录音&#xff0c;点击…

作者头像 李华
网站建设 2026/4/16 13:59:22

verl分布式训练入门:DP与TP并行策略解析

verl分布式训练入门&#xff1a;DP与TP并行策略解析 在大型语言模型&#xff08;LLM&#xff09;的强化学习后训练中&#xff0c;如何高效利用多GPU资源、平衡计算负载、降低通信开销&#xff0c;是工程落地的核心挑战。verl 作为字节跳动火山引擎团队开源的生产级RL训练框架&…

作者头像 李华
网站建设 2026/4/27 8:13:35

如何节省GPU资源?SenseVoiceSmall batch_size参数优化技巧

如何节省GPU资源&#xff1f;SenseVoiceSmall batch_size参数优化技巧 1. 为什么你总在为GPU显存发愁&#xff1f; 你是不是也遇到过这样的情况&#xff1a;刚把SenseVoiceSmall模型加载进显存&#xff0c;还没开始识别&#xff0c;GPU占用就飙到95%&#xff1f;上传一段30秒…

作者头像 李华
网站建设 2026/4/23 15:44:00

Llama3-8B保险理赔辅助:报案描述标准化

Llama3-8B保险理赔辅助&#xff1a;报案描述标准化 在保险行业&#xff0c;理赔效率直接影响客户满意度和公司运营成本。一线查勘员、客服人员每天要处理大量口头报案&#xff0c;这些原始描述往往存在信息缺失、表述模糊、术语不统一等问题——比如“车撞了树”没说车型&…

作者头像 李华
网站建设 2026/4/23 11:13:11

DeepSeek-R1-Distill-Qwen-1.5B法律咨询场景实战:合同审查系统

DeepSeek-R1-Distill-Qwen-1.5B法律咨询场景实战&#xff1a;合同审查系统 你是不是也遇到过这样的问题&#xff1a;一份几十页的采购合同&#xff0c;光是通读就要花两小时&#xff1b;条款里藏着“不可抗力”“单方解除权”“违约金上限”这些专业表述&#xff0c;稍不注意就…

作者头像 李华
网站建设 2026/4/16 11:07:46

一键部署YOLOE+Gradio,打造交互式AI应用

一键部署YOLOEGradio&#xff0c;打造交互式AI应用 你是否试过这样的场景&#xff1a;刚在论文里看到一个惊艳的开放词汇检测模型&#xff0c;兴冲冲下载代码&#xff0c;结果卡在环境配置第三步——CUDA版本不匹配、CLIP依赖冲突、Gradio端口被占……最后合上笔记本&#xff…

作者头像 李华