YOLO Vision 2026:

Tính toán khoảng cách sử dụ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 một khung hình ảnh hoặc video. Trong trường hợp của Ultralytics YOLO26, tâm của bounding box được sử dụng để tính toán khoảng cách cho các bounding box được người dùng đánh dấu.



Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀

Hình ảnh trực quan#

Tính toán khoảng cách sử dụng Ultralytics YOLO26
Ultralytics YOLO26 Distance Calculation

Ưu điểm của tính toán khoảng cách#

  • Độ chính xác định vị: Nâng cao khả năng định vị không gian chính xác trong các tác vụ computer vision.
  • Ước tính kích thước: Cho phép ước tính kích thước đối tượng để hiểu ngữ cảnh tốt hơn.
  • Hiểu bối cảnh: Cải thiện khả năng hiểu cảnh 3D để ra quyết định tốt hơn trong các ứng dụng như autonomous vehicles và hệ thống giám sát.
  • Tránh va chạm: Cho phép hệ thống phát hiện các va chạm tiềm ẩn bằng cách theo dõi khoảng cách giữa các đối tượng đang di chuyển.
  • Phân tích không gian: Tạo điều kiện phân tích các mối quan hệ và tương tác của đố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 bất kỳ hai bounding box nào để tính toán khoảng cách.
  • Sử dụng nút chuột phải để xóa tất cả các điểm đã vẽ.
  • Nhấp chuột trái vào bất kỳ vị trí nào trong khung hình để thêm các điểm mới.
Khoảng cách chỉ là giá trị ước tính

Khoảng cách là giá trị ước tính và có thể không hoàn toàn chính xác vì nó được tính toán bằng dữ liệu 2D, vốn thiếu thông tin về độ sâu.

Tính toán khoảng cách với YOLO26#

Giải pháp DistanceCalculation theo dõi các đối tượng qua các khung hình và đo khoảng cách Euclid, tính bằng pixel, giữa tâm của bất kỳ hai bounding box nào 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à đọc khoảng cách; nhấp chuột phải để xóa lựa chọn của bạn.

Tính toán khoảng cách sử dụng Ultralytics YOLO
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Video writer
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))

# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(
    model="yolo26n.pt",  # path to the YOLO26 model file.
    show=True,  # display the output
)

# Process 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)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

Đối số DistanceCalculation()#

Dưới đây là bảng chứa các đối số của DistanceCalculation:

Đối sốLoạiMặc địnhMô tả
modelstrNoneĐường dẫn đến tệp model Ultralytics YOLO.
line_widthint2Độ dày đường viền cho các khung, keypoints và số lượng mà giải pháp vẽ ra.
verboseboolTrueBật nhật ký theo từng khung hình của giải pháp về hình dạng đầu vào, số lượng lớp và tốc độ xử lý. Bản thân lệnh gọi tracking luôn ở chế độ im lặng.

Bạn cũng có thể tận dụng nhiều tham số track khác nhau trong giải pháp DistanceCalculation.

Đối sốLoạiMặc địnhMô tả
trackerstr'botsort.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.
conffloat0.25Thiết lập ngưỡng tin cậy cho các phát hiện; các giá trị thấp hơn cho phép nhiều đối tượng được theo dõi hơn nhưng có thể bao gồm các kết quả dương tính giả.
ioufloat0.7Đặt ngưỡng Intersection over Union (IoU) để lọc các phát hiện trùng lặp.
classeslistNoneLọc kết quả theo chỉ mục lớp. Ví dụ: classes=[0, 2, 3] chỉ theo dõi các lớp được chỉ định.
devicestrNoneChỉ định thiết bị để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng lựa chọn giữa CPU, GPU cụ thể hoặc các thiết bị tính toán khác để thực thi mô hình.

Hơn nữa, các tham số trực quan hóa sau đây cũng có sẵn:

Đối sốLoạiMặc địnhMô tả
showboolFalseNếu là True, hiển thị các hình ả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_confboolTrueHiển thị điểm số tin cậy (confidence score) cho mỗi phát hiện cùng với nhãn. Cung cấp thông tin chi tiết về độ chắc chắn của model đối với từng phát hiện.
show_labelsboolTrueHiển thị nhãn cho mỗi phát hiện trong đầu ra hình ảnh. Cung cấp khả năng nhận biết tức thì 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 toán 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ẽ:

  1. Trích xuất các trọng tâm (điểm trung tâm) của các bounding box đã chọn
  2. Tính toán khoảng cách Euclidean giữa các trọng tâm này theo đơn vị pixel
  3. Hiển thị khoảng cách trên khung hình với một đường nối giữa các đối tượng

Việc triển khai sử dụng phương thức mouse_event_for_distance để xử lý các 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ý việc xử lý từng khung hình, theo dõi đối tượng và tính toán khoảng cách.

Ứng dụng#

Tính toán khoảng cách với YOLO26 có nhiều ứng dụng thực tế:

  • Phân tích bán lẻ: Đo lường khoảng cách của khách hàng tới sản phẩm và 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 công nhân 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 toán khoảng cách giữa các cầu thủ, quả bóng và các vị trí chính 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à giám sát sự di chuyển của bệnh nhân
  • Robot: Cho phép robot duy trì khoảng cách phù hợp với các chướng ngại vật và con người

Câu hỏi thường gặp#

  • Để tính toán 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. Quá trình này bao gồm việc khởi tạo lớp DistanceCalculation từ mô-đun solutions của Ultralytics và sử dụng kết quả đầu ra theo dõi của mô hình để tính toán khoảng cách.

  • Sử dụng tính toán khoảng cách với Ultralytics YOLO26 mang lại một số ưu điểm:

    • Độ chính xác định vị: Cung cấp khả năng định vị không gian chính xác cho các đối tượng.
    • Ướ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 về ngữ cảnh.
    • Hiểu bối cảnh: Tăng cường khả năng hiểu bối 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ự động và giám sát.
    • Xử lý thời gian thực: Thực hiện các phép tính tức thời, làm cho 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ư object trackingspeed estimation.
  • Có, bạn có thể thực hiện tính toán khoảng cách trong luồng video thời gian thực với Ultralytics YOLO26. Quá trình này bao gồm việc chụp các khung hình video bằng OpenCV, chạy object detection của YOLO26 và sử dụng lớp DistanceCalculation để tính toán khoảng cách giữa các đối tượng trong các khung hình liên tiếp. Để biết thông tin triển khai chi tiết, hãy xem ví dụ về luồng video.

  • Để xóa các điểm đã vẽ trong quá trình tính toán khoảng cách với Ultralytics YOLO26, bạn có thể sử dụng 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 tham khảo phần lưu ý trong ví dụ tính toán khoảng cách.

  • Các tham số chính để khởi tạo lớp DistanceCalculation trong Ultralytics YOLO26 bao gồm:

    • model: Đường dẫn đến tệp mô hình YOLO26.
    • tracker: Thuật toán tracking cần sử dụng (Solutions mặc định dùng botsort.yaml).
    • conf: Ngưỡng độ tin cậy cho các phát hiện.
    • show: Cờ hiển thị kết quả đầu ra.

    Để xem danh sách đầy đủ và các giá trị mặc định, hãy xem các tham số của DistanceCalculation.

Bình luận