大家好,今天咱们用最接地气的方式,从零搭一个能实时看车、看人的交通监控小系统,全程不用复杂数学,不用啃大部头论文,复制粘贴改一改就能跑通。
先唠两句为啥选YOLOv9。它就像AI视觉里的“全能外卖员”,跑得快、看得准、还不挑设备,不管是路口车流、小区行人,都能稳稳抓住。咱们今天做的交通监控,就是用它识别车辆、行人、自行车这些交通里常见的目标,实时画框、统计数量,最后还能把画面存下来,新手也能直接落地。
整个流程分五步:准备环境→装依赖→跑通demo→改造成交通监控→优化上线,每一步都给你拆成大白话,跟着做就行。
一、前期准备:别慌,就装俩工具
首先得有Python,建议3.8以上版本,3.10最稳,兼容性拉满。不用懂环境配置,就像装手机APP一样简单。
然后是代码编辑器,VSCode就行,免费好用,打开就能写代码。
重点说下虚拟环境,这东西就像你的“专属工具箱”,把项目用到的库都装在这里面,不会和电脑里其他软件冲突。打开命令行,输入下面两行,一键创建并进入环境:
python -m venv yolov9_traffic
yolov9_traffic\Scripts\activate(Windows)
source yolov9_traffic/bin/activate(Mac/Linux)
看到命令行前面多了(yolov9_traffic),就说明进对地方了。
二、一键装依赖:复制粘贴就完事
环境准备好了,接下来装干活的库。YOLOv9现在有Ultralytics封装好的包,不用自己编译,不用下一堆源码,一行命令搞定所有依赖,包括PyTorch、OpenCV这些核心工具,相当于给系统装完“驱动”。
pip install ultralytics opencv-python
等个一两分钟,所有库自动装好,不用管版本冲突,不用手动配置CUDA,CPU就能跑,有GPU的话会自动加速,简直是新手福音。
三、先跑通demo:确认环境没毛病
装完依赖,先跑个小demo,确保环境没问题。新建一个Python文件,叫test.py,复制下面代码:
from ultralytics import YOLO
model = YOLO("yolov9s.pt")
results = model("bus.jpg")
results[0].show()
随便找一张有车有人的图片,和代码放同一个文件夹,改名叫bus.jpg,运行代码。如果弹出带检测框的图片,框出公交车、人,说明环境完全没问题,接下来就能改造交通监控了。
四、核心改造:做成实时交通监控
现在进入重头戏,把demo改成能实时读视频、实时检测、实时显示的交通监控系统。咱们支持两种输入:本地交通视频、电脑摄像头(模拟实时监控),代码全程注释,每一行都给你讲明白。
新建traffic_monitor.py,复制下面完整代码:
import cv2
from ultralytics import YOLO
import time
model = YOLO("yolov9s.pt")
video_source = 0
cap = cv2.VideoCapture(video_source)
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter("traffic_result.mp4", fourcc, 20.0, (640, 480))
traffic_classes = [0, 1, 2, 3, 5, 7]
print("交通监控启动,按q退出")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv2.resize(frame, (640, 480))
results = model(frame, classes=traffic_classes, conf=0.5)
annotated_frame = results[0].plot()
car_num = len([box for box in results[0].boxes if box.cls == 2])
person_num = len([box for box in results[0].boxes if box.cls == 0])
cv2.putText(annotated_frame, f"Car:{car_num} Person:{person_num}",
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("Traffic Monitor", annotated_frame)
out.write(annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
核心逻辑拆解
• 视频源:就像给系统接了个“眼睛”,摄像头或视频都能看
• 模型推理:让AI“看”画面,找出咱们要的交通目标
• 绘制框:把AI找到的目标标出来,方便肉眼看
• 统计数量:数清楚有多少车、多少人,简单实用
五、参数微调:让监控更准更快
新手跑起来可能会遇到两个问题:要么误识别(把路灯当成车),要么画面有点卡,咱们调两个参数就能解决,比调手机相机参数还简单。
1. 置信度conf:默认0.5,改成0.6,误识别直接减少,AI只认更确定的目标。
2. 缩帧尺寸:把640×480改成480×360,速度直接提升,低配电脑也能流畅跑。
3. 类别过滤:只保留需要检测的目标,减少计算压力。
六、进阶小功能:让监控更实用
1. 拥堵提醒
if car_num > 10:
cv2.putText(annotated_frame, "Congestion!", (10, 60),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
2. 时间戳显示
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
cv2.putText(annotated_frame, now_time, (10, 90),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 2)
七、常见问题:踩过的坑都给你填好
1. 运行报错找不到模型:第一次运行会自动下载,耐心等待即可。
2. 摄像头打不开:检查video_source是否为0,关闭其他占用软件。
3. 视频保存不了:检查路径权限,编码使用mp4v,后缀为.mp4。
4. 检测速度慢:缩小分辨率,提高置信度,关闭不必要功能。
八、项目拓展:想升级就这么改
咱们这个基础系统,扩展性拉满,想进阶的话,直接往这几个方向改:
• 多摄像头监控:循环打开多个摄像头,分屏显示
• 数据统计:把车辆、人数存到Excel,生成日报表
• 边缘部署:放到树莓派、工控机上,做成离线监控设备
• 车牌识别:配合OCR模型,实现车牌检测+识别
九、总结
今天咱们从零开始,用几十行代码,搭了一个完整的YOLOv9实时交通监控系统,全程不用懂复杂算法,不用写复杂逻辑,复制粘贴就能跑,还能按需改功能。
AI视觉没那么神秘,不用怕数学,不用怕编程,找对简单的工具,跟着实战流程走,普通人也能做出能用的AI项目。