使用Ultralytics YOLOv8 🚀 进行速度估计
什么是速度估算?
速度估计是在给定环境下计算物体运动速度的过程,通常用于计算机视觉应用中。使用 Ultralytics YOLOv8现在,您可以使用物体跟踪以及距离和时间数据来计算物体的速度,这对交通和监控等任务至关重要。速度估计的准确性直接影响到各种应用的效率和可靠性,使其成为推动智能系统和实时决策过程的关键组成部分。
观看: 速度估算使用Ultralytics YOLOv8
速度估算的优势?
- 高效的交通控制:准确的速度估计有助于管理交通流量、提高安全性和减少道路拥堵。
- 精确的自主导航:在自动驾驶汽车等自主系统中,可靠的速度估计可确保车辆导航的安全性和准确性。
- 增强监控安全性:监控分析中的速度估算有助于识别异常行为或潜在威胁,提高安全措施的有效性。
真实世界的应用
交通运输 | 交通运输 |
---|---|
道路速度估算Ultralytics YOLOv8 | 桥梁速度估算Ultralytics YOLOv8 |
使用YOLOv8 进行速度估算示例
from ultralytics import YOLO
from ultralytics.solutions import speed_estimation
import cv2
model = YOLO("yolov8n.pt")
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
# Video writer
video_writer = cv2.VideoWriter("speed_estimation.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
line_pts = [(0, 360), (1280, 360)]
# Init speed-estimation obj
speed_obj = speed_estimation.SpeedEstimator()
speed_obj.set_args(reg_pts=line_pts,
names=names,
view_img=True)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = speed_obj.estimate_speed(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
速度估计
速度只是估计值,可能不完全准确。此外,估算值还可能因 GPU 速度而异。
可选参数 set_args
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
reg_pts |
list |
[(20, 400), (1260, 400)] |
定义区域面积的点 |
names |
dict |
None |
班级名称 |
view_img |
bool |
False |
显示带有计数的帧 |
line_thickness |
int |
2 |
增加边界框厚度 |
region_thickness |
int |
5 |
对象计数器区域或线条的厚度 |
spdl_dist_thresh |
int |
10 |
速度检测线的欧氏距离阈值 |
论据 model.track
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
source |
im0 |
None |
图像或视频的源目录 |
persist |
bool |
False |
帧与帧之间的持久轨迹 |
tracker |
str |
botsort.yaml |
跟踪方法 "bytetrack "或 "botsort |
conf |
float |
0.3 |
置信度阈值 |
iou |
float |
0.5 |
借据阈值 |
classes |
list |
None |
按类别筛选结果,即 classes=0,或 classes=[0,2,3] |
verbose |
bool |
True |
显示物体跟踪结果 |