yolo26训练并作计数器
·
可以按这条流程做:标注数据 → 训练 YOLO26 → 验证效果 → 视频检测 → 加计数器。YOLO26 已支持检测、分割、姿态、分类等任务,Ultralytics 官方也提供了视频计数方案。(Ultralytics Docs)
1. 数据集格式
目录这样放:
dataset/
├─ images/
│ ├─ train/
│ ├─ val/
├─ labels/
│ ├─ train/
│ ├─ val/
└─ data.yaml
data.yaml 示例:
path: dataset
train: images/train
val: images/val
names:
0: person
1: car
每张图片对应一个同名 .txt 标注文件:
类别 x中心 y中心 宽 高
坐标都是归一化后的 0~1 数值。
2. 安装环境
pip install ultralytics opencv-python
测试是否可用:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model("test.jpg")
官方示例也是通过 YOLO("yolo26n.pt") 加载预训练模型。(Ultralytics Docs)
3. 训练自己的数据集
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="dataset/data.yaml",
epochs=100,
imgsz=640,
batch=16,
device=0
)
训练完成后,权重一般在:
runs/detect/train/weights/best.pt
4. 用训练好的模型检测视频
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.predict(
source="input.mp4",
save=True,
conf=0.4
)
5. 视频中加入计数器
如果你要“过线计数”,可以这样写:
import cv2
from ultralytics import solutions
video_path = "input.mp4"
output_path = "output_count.mp4"
model_path = "runs/detect/train/weights/best.pt"
cap = cv2.VideoCapture(video_path)
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
writer = cv2.VideoWriter(
output_path,
cv2.VideoWriter_fourcc(*"mp4v"),
fps,
(w, h)
)
# 一条计数线,坐标根据你的视频画面调整
line_points = [(100, 400), (1000, 400)]
counter = solutions.ObjectCounter(
show=True,
region=line_points,
model=model_path
)
while cap.isOpened():
success, frame = cap.read()
if not success:
break
results = counter(frame)
writer.write(results.plot_im)
cap.release()
writer.release()
cv2.destroyAllWindows()
Ultralytics 官方说明里,region 可以是两点构成的线,也可以是三点以上的多边形区域;视频计数本质是检测 + 跟踪 + 判断目标是否穿过计数区域。(Ultralytics Docs)
6. 只统计某一类
比如只统计第 0 类:
counter = solutions.ObjectCounter(
show=True,
region=line_points,
model=model_path,
classes=[0]
)
官方示例中 classes=[0, 2] 就是只统计指定类别。(Ultralytics Docs)
最关键要改的就是这几个地方:
model_path = "runs/detect/train/weights/best.pt"
video_path = "input.mp4"
line_points = [(100, 400), (1000, 400)]
classes=[0]
计`
计数线坐标要根据你视频画面实际位
调整。
更多推荐



所有评论(0)