Tính toán khoảng cách bằng Ultralytics YOLO26#
Tính toán khoảng cách là gì?#
Tính toán khoảng cách là quá trình đo khoảng cách giữa hai đối tượng được phát hiện trong ảnh hoặc khung hình video. Với Ultralytics YOLO26, tâm của bounding box được dùng để tính khoảng cách giữa các bounding box do người dùng chọn.
Xem: Cách ước tính khoảng cách giữa các đối tượng được phát hiện bằng Ultralytics YOLO theo pixel 🚀
Hình ảnh minh họa#
| Tính toán khoảng cách bằng Ultralytics YOLO26 |
|---|
![]() |
Ưu điểm của tính toán khoảng cách#
- Độ chính xác định vị Precision: Tăng độ chính xác của việc xác định vị trí trong không gian trong các tác vụ thị giác máy tính.
- Ước tính kích thước: Cho phép ước tính kích thước đối tượng để hiểu rõ hơn ngữ cảnh.
- Hiểu cảnh: Cải thiện khả năng hiểu cảnh 3D để đưa ra quyết định tốt hơn trong các ứng dụng như xe tự hành và hệ thống giám sát.
- Tránh va chạm: Cho phép hệ thống phát hiện nguy cơ va chạm bằng cách theo dõi khoảng cách giữa các đối tượng đang chuyển động.
- Phân tích không gian: Hỗ trợ phân tích mối quan hệ và tương tác giữa các đối tượng trong môi trường được giám sát.
Tính toán khoảng cách
- Nhấp chuột trái vào hai bounding box bất kỳ để tính khoảng cách.
- Nhấp chuột phải để xóa tất cả các điểm đã vẽ.
Khoảng cách chỉ là giá trị ước tính
Khoảng cách chỉ là giá trị ước tính và có thể không hoàn toàn chính xác vì được tính toán bằng dữ liệu 2D, vốn không có thông tin về độ sâu.
Tính khoảng cách bằng YOLO26#
Giải pháp DistanceCalculation theo dõi các đối tượng qua nhiều khung hình và đo khoảng cách Euclid, tính bằng pixel, giữa tâm của hai bounding box bất kỳ mà bạn chọn bằng chuột. Chạy ví dụ bên dưới, sau đó nhấp chuột trái vào hai đối tượng để vẽ đường nối và xem khoảng cách; nhấp chuột phải để xóa lựa chọn.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Bộ ghi video
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 = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Khởi tạo đối tượng tính toán khoảng cách
distancecalculator = solutions.DistanceCalculation(
model="yolo26n.pt", # đường dẫn đến tệp model YOLO26.
show=True, # hiển thị đầu ra
)
# Xử lý video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = distancecalculator(im0)
print(results) # truy cập đầu ra
video_writer.write(results.plot_im) # ghi khung hình đã xử lý.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # đóng tất cả cửa sổ đang mởCác đối số của DistanceCalculation()#
Dưới đây là bảng các đối số của DistanceCalculation:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Đường dẫn đến tệp model Ultralytics YOLO. |
line_width | int | 2 | Độ dày đường viền của box, keypoint và số đếm mà giải pháp vẽ. |
verbose | bool | True | Bật nhật ký theo từng frame của giải pháp, gồm shape đầu vào, số lượng class và tốc độ xử lý. Bản thân lệnh gọi tracking luôn không ghi nhật ký. |
Bạn cũng có thể sử dụng nhiều đối số track trong giải pháp DistanceCalculation.
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | Chỉ định thuật toán theo dõi cần sử dụng. Các tùy chọn tích hợp sẵn: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | Đặt ngưỡng confidence cho các đối tượng được phát hiện; giá trị thấp hơn cho phép theo dõi nhiều đối tượng hơn nhưng có thể bao gồm cả kết quả dương tính giả. |
iou | float | 0.7 | Đặt ngưỡng Intersection over Union (IoU) để lọc các đối tượng phát hiện bị chồng lấn. |
classes | list | None | Lọc kết quả theo chỉ mục class. Ví dụ: classes=[0, 2, 3] chỉ theo dõi các class được chỉ định. |
device | str | None | Chỉ định thiết bị dùng để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng chọn CPU, một GPU cụ thể hoặc thiết bị tính toán khác để chạy model. |
imgsz | int or tuple | 640 | Kích thước ảnh suy luận mục tiêu: số nguyên cho ảnh vuông hoặc cặp (height, width). Kích thước sẽ được điều chỉnh theo stride của model. |
max_det | int | 300 | Số lượng đối tượng phát hiện tối đa được giữ lại trong mỗi khung hình trước khi theo dõi, giới hạn số đối tượng mà một giải pháp xử lý trong các cảnh dày đặc. |
quantize | int or str | None | Độ chính xác suy luận: 16 (FP16) hoặc 32/không đặt (FP32) cho model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác do artifact và runtime lựa chọn. Thay thế cờ half đã lỗi thời. |
Ngoài ra, có thể sử dụng các đối số trực quan hóa sau:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nếu True, hiển thị ảnh hoặc video đã được chú thích trong một cửa sổ. Hữu ích để nhận phản hồi trực quan ngay lập tức trong quá trình phát triển hoặc kiểm thử. |
show_conf | bool | True | Hiển thị điểm confidence bên cạnh nhãn của mỗi detection. Cho biết mức độ chắc chắn của model đối với từng detection. |
show_labels | bool | True | Hiển thị nhãn cho mỗi detection trong đầu ra trực quan. Giúp nhận biết ngay các đối tượng được phát hiện. |
Chi tiết triển khai#
Lớp DistanceCalculation hoạt động bằng cách theo dõi các đối tượng qua các khung hình video và tính khoảng cách Euclid giữa tâm của các bounding box được chọn. Khi bạn nhấp vào hai đối tượng, giải pháp sẽ:
- Trích xuất tâm (điểm trung tâm) của các bounding box được chọn
- Tính khoảng cách Euclid giữa các tâm này theo đơn vị pixel
- Hiển thị khoảng cách trên khung hình bằng một đường nối giữa các đối tượng
Triển khai sử dụng phương thức mouse_event_for_distance để xử lý tương tác chuột, cho phép người dùng chọn đối tượng và xóa lựa chọn khi cần. Phương thức process xử lý từng khung hình, theo dõi đối tượng và tính khoảng cách.
Ứng dụng#
Tính khoảng cách bằng YOLO26 có nhiều ứng dụng thực tiễn:
- Phân tích bán lẻ: Đo khoảng cách giữa khách hàng và sản phẩm, đồng thời phân tích hiệu quả bố trí cửa hàng
- An toàn công nghiệp: Giám sát khoảng cách an toàn giữa người lao động và máy móc
- Quản lý giao thông: Phân tích khoảng cách giữa các phương tiện và phát hiện hành vi bám đuôi
- Phân tích thể thao: Tính khoảng cách giữa các cầu thủ, bóng và những vị trí quan trọng trên sân
- Chăm sóc sức khỏe: Đảm bảo khoảng cách phù hợp trong khu vực chờ và theo dõi di chuyển của bệnh nhân
- Robot học: Giúp robot duy trì khoảng cách phù hợp với chướng ngại vật và con người
Câu hỏi thường gặp#
Để tính khoảng cách giữa các đối tượng bằng Ultralytics YOLO26, bạn cần xác định tâm bounding box của các đối tượng được phát hiện. Quy trình này bao gồm việc khởi tạo lớp
DistanceCalculationtừ modulesolutionscủa Ultralytics và sử dụng đầu ra tracking của model để tính khoảng cách.Tính khoảng cách bằng Ultralytics YOLO26 mang lại một số lợi ích:
- Độ chính xác định vị: Cung cấp vị trí chính xác của các đối tượng trong không gian.
- Ước tính kích thước: Giúp ước tính kích thước vật lý, góp phần hiểu rõ hơn ngữ cảnh.
- Hiểu cảnh: Tăng cường khả năng hiểu cảnh 3D, hỗ trợ đưa ra quyết định tốt hơn trong các ứng dụng như lái xe tự hành và giám sát.
- Xử lý thời gian thực: Thực hiện phép tính ngay khi cần, phù hợp để phân tích video trực tiếp.
- Khả năng tích hợp: Hoạt động liền mạch với các giải pháp YOLO26 khác như theo dõi đối tượng và ước tính tốc độ.
Có, bạn có thể tính khoảng cách trên luồng video thời gian thực bằng Ultralytics YOLO26. Quy trình này bao gồm thu nhận khung hình video bằng OpenCV, chạy phát hiện đối tượng bằng YOLO26 và sử dụng lớp
DistanceCalculationđể tính khoảng cách giữa các đối tượng trong những khung hình liên tiếp. Để xem hướng dẫn triển khai chi tiết, hãy tham khảo ví dụ về luồng video.Để xóa các điểm đã vẽ trong quá trình tính khoảng cách bằng Ultralytics YOLO26, bạn có thể nhấp chuột phải. Thao tác này sẽ xóa tất cả các điểm bạn đã vẽ. Để biết thêm chi tiết, hãy xem phần ghi chú trong ví dụ tính toán khoảng cách.
Các đối số chính để khởi tạo lớp
DistanceCalculationtrong Ultralytics YOLO26 bao gồm:model: Đường dẫn đến tệp model YOLO26.tracker: Thuật toán tracking cần sử dụng (các giải pháp mặc định dùngtracktrack.yaml).conf: Ngưỡng confidence cho các đối tượng được phát hiện.show: Cờ hiển thị đầu ra.
Để xem danh sách đầy đủ và các giá trị mặc định, hãy tham khảo các đối số của DistanceCalculation.
