使用Ultralytics YOLOv8 🚀 计算距离
什么是距离计算?
测量两个物体之间的间距被称为特定空间内的距离计算。在 Ultralytics YOLOv8中,边界框中心点被用来计算用户突出显示的边界框的距离。
观看: 使用Ultralytics YOLOv8
视觉效果
使用Ultralytics YOLOv8 |
---|
距离计算的优势?
- 定位精度:提高计算机视觉任务中的空间定位精度。
- 尺寸估算:允许估算物理尺寸,以便更好地理解上下文。
- 场景理解:有助于对环境的三维理解,从而改进决策。
距离计算
- 用鼠标左键单击任意两个边界框,计算距离
使用YOLOv8 计算距离示例
from ultralytics import YOLO
from ultralytics.solutions import distance_calculation
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("distance_calculation.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
# Init distance-calculation obj
dist_obj = distance_calculation.DistanceCalculation()
dist_obj.set_args(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 = dist_obj.start_process(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
备注
- 鼠标右键点击将删除所有绘制点
- 鼠标左键可用于绘制点
可选参数 set_args
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
names |
dict |
None |
班级名称 |
view_img |
bool |
False |
显示带有计数的帧 |
line_thickness |
int |
2 |
增加边界框厚度 |
line_color |
RGB |
(255, 255, 0) |
映射到两个边界框上的中心点的线条颜色 |
centroid_color |
RGB |
(255, 0, 255) |
每个边界框的中心点颜色 |
论据 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 |
显示物体跟踪结果 |