Theo dõi đa đối tượng với Ultralytics YOLO
Theo dõi đối tượng trong lĩnh vực phân tích video là một nhiệm vụ quan trọng không chỉ xác định vị trí và lớp đối tượng trong khung mà còn duy trì ID duy nhất cho mỗi đối tượng được phát hiện khi video tiến triển. Các ứng dụng là vô hạn — từ giám sát và bảo mật đến phân tích thể thao theo thời gian thực.
Tại sao chọn Ultralytics YOLO để theo dõi đối tượng?
Đầu ra từ Ultralytics trackers phù hợp với phát hiện đối tượng tiêu chuẩn nhưng có thêm giá trị của ID đối tượng. Điều này giúp dễ dàng theo dõi các đối tượng trong luồng video và thực hiện phân tích tiếp theo. Đây là lý do tại sao bạn nên cân nhắc sử dụng Ultralytics YOLO cho nhu cầu theo dõi đối tượng của bạn:
- Hiệu quả: Xử lý luồng video theo thời gian thực mà không làm giảm độ chính xác .
- Linh hoạt: Hỗ trợ nhiều thuật toán và cấu hình theo dõi.
- Dễ sử dụng: Giản dị Python API và CLI các tùy chọn để tích hợp và triển khai nhanh chóng.
- Khả năng tùy chỉnh: Dễ sử dụng với đào tạo tùy chỉnh YOLO mô hình, cho phép tích hợp vào các ứng dụng miền cụ thể.
Xem: Phát hiện và theo dõi đối tượng với Ultralytics YOLO .
Ứng dụng trong thế giới thực
Giao thông vận tải | Bán lẻ | Nuôi trồng thủy sản |
---|---|---|
Theo dõi xe | Theo dõi mọi người | Theo dõi cá |
Tổng quan về các tính năng
Ultralytics YOLO Mở rộng các tính năng phát hiện đối tượng của nó để cung cấp theo dõi đối tượng mạnh mẽ và linh hoạt:
- Theo dõi thời gian thực: Theo dõi liền mạch các đối tượng trong video có tốc độ khung hình cao.
- Hỗ trợ nhiều trình theo dõi: Chọn từ một loạt các thuật toán theo dõi đã được thiết lập.
- Cấu hình trình theo dõi có thể tùy chỉnh: Điều chỉnh thuật toán theo dõi để đáp ứng các yêu cầu cụ thể bằng cách điều chỉnh các thông số khác nhau.
Trình theo dõi có sẵn
Ultralytics YOLO Hỗ trợ các thuật toán theo dõi sau. Chúng có thể được kích hoạt bằng cách chuyển tệp cấu hình YAML có liên quan, chẳng hạn như tracker=tracker_type.yaml
:
- BoT-SORT -Dùng
botsort.yaml
để bật trình theo dõi này. - ByteTrack -Dùng
bytetrack.yaml
để bật trình theo dõi này.
Trình theo dõi mặc định là BoT-SORT.
Theo dõi
Thông tin ngưỡng trình theo dõi
Nếu điểm tin cậy đối tượng sẽ thấp, tức là thấp hơn track_high_thresh
, sau đó sẽ không có bản nhạc nào được trả lại và cập nhật thành công.
Để chạy trình theo dõi trên các luồng video, hãy sử dụng mô hình Phát hiện, Phân đoạn hoặc Tư thế đã được đào tạo như YOLO11n, YOLO11n-seg và YOLO11n-pose.
Ví dụ
from ultralytics import YOLO
# Load an official or custom model
model = YOLO("yolo11n.pt") # Load an official Detect model
model = YOLO("yolo11n-seg.pt") # Load an official Segment model
model = YOLO("yolo11n-pose.pt") # Load an official Pose model
model = YOLO("path/to/best.pt") # Load a custom trained model
# Perform tracking with the model
results = model.track("https://youtu.be/LNwODJXcvt4", show=True) # Tracking with default tracker
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml") # with ByteTrack
# Perform tracking with various models using the command line interface
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4" # Official Detect model
yolo track model=yolo11n-seg.pt source="https://youtu.be/LNwODJXcvt4" # Official Segment model
yolo track model=yolo11n-pose.pt source="https://youtu.be/LNwODJXcvt4" # Official Pose model
yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4" # Custom trained model
# Track using ByteTrack tracker
yolo track model=path/to/best.pt tracker="bytetrack.yaml"
Như có thể thấy trong cách sử dụng ở trên, theo dõi có sẵn cho tất cả các mô hình Phát hiện, Phân đoạn và Tư thế chạy trên video hoặc các nguồn phát trực tuyến.
Cấu hình
Thông tin ngưỡng trình theo dõi
Nếu điểm tin cậy đối tượng sẽ thấp, tức là thấp hơn track_high_thresh
, sau đó sẽ không có bản nhạc nào được trả lại và cập nhật thành công.
Theo dõi đối số
Cấu hình theo dõi chia sẻ các thuộc tính với chế độ Dự đoán, chẳng hạn như conf
, iou
và show
. Để biết thêm cấu hình, hãy tham khảo Dự đoán trang mô hình.
Ví dụ
Lựa chọn trình theo dõi
Ultralytics Cũng cho phép bạn sử dụng tệp cấu hình trình theo dõi đã sửa đổi. Để làm điều này, chỉ cần tạo một bản sao của tệp cấu hình trình theo dõi (ví dụ: custom_tracker.yaml
) từ ultralytics/cfg/trình theo dõi và sửa đổi bất kỳ cấu hình nào (ngoại trừ tracker_type
) theo nhu cầu của bạn.
Ví dụ
Để biết danh sách đầy đủ các đối số theo dõi, hãy tham khảo ultralytics/cfg/trackers trang.
Python Ví dụ
Vòng lặp theo dõi liên tục
Đây là một Python kịch bản sử dụng Mở CV (cv2
) và YOLO11 để chạy theo dõi đối tượng trên khung video. Tập lệnh này vẫn giả định rằng bạn đã cài đặt các gói cần thiết (opencv-python
và ultralytics
). Các persist=True
Đối số cho trình theo dõi biết rằng hình ảnh hoặc khung hình hiện tại là hình ảnh hoặc khung tiếp theo trong một chuỗi và mong đợi các bản nhạc từ hình ảnh trước đó trong hình ảnh hiện tại.
Phát trực tuyến theo vòng lặp với tính năng theo dõi
import cv2
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLO11 tracking on the frame, persisting tracks between frames
results = model.track(frame, persist=True)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLO11 Tracking", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
Xin lưu ý sự thay đổi từ model(frame)
đến model.track(frame)
, cho phép theo dõi đối tượng thay vì phát hiện đơn giản. Tập lệnh sửa đổi này sẽ chạy trình theo dõi trên mỗi khung hình của video, trực quan hóa kết quả và hiển thị chúng trong cửa sổ. Vòng lặp có thể được thoát ra bằng cách nhấn 'q'.
Vẽ các bản nhạc theo thời gian
Việc trực quan hóa các dấu vết của vật thể trên các khung hình liên tiếp có thể cung cấp những hiểu biết có giá trị về các mẫu chuyển động và hành vi của các vật thể được phát hiện trong video. Với Ultralytics YOLO11, việc vạch ra những đường đi này là một quá trình liền mạch và hiệu quả.
Trong ví dụ sau, chúng tôi trình bày cách sử dụng khả năng theo dõi của YOLO11 để vẽ biểu đồ chuyển động của các đối tượng được phát hiện trên nhiều khung hình video. Tập lệnh này bao gồm việc mở tệp video, đọc từng khung hình và sử dụng YOLO mô hình để xác định và theo dõi các đối tượng khác nhau. Bằng cách giữ lại các điểm trung tâm của các hộp giới hạn được phát hiện và kết nối chúng, chúng ta có thể vẽ các đường biểu diễn các đường đi mà các đối tượng được theo dõi đi theo.
Vẽ các bản nhạc trên nhiều khung hình video
from collections import defaultdict
import cv2
import numpy as np
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
# Store the track history
track_history = defaultdict(lambda: [])
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLO11 tracking on the frame, persisting tracks between frames
results = model.track(frame, persist=True)
# Get the boxes and track IDs
boxes = results[0].boxes.xywh.cpu()
track_ids = results[0].boxes.id.int().cpu().tolist()
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Plot the tracks
for box, track_id in zip(boxes, track_ids):
x, y, w, h = box
track = track_history[track_id]
track.append((float(x), float(y))) # x, y center point
if len(track) > 30: # retain 90 tracks for 90 frames
track.pop(0)
# Draw the tracking lines
points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
# Display the annotated frame
cv2.imshow("YOLO11 Tracking", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
Theo dõi đa luồng
Theo dõi đa luồng cung cấp khả năng chạy theo dõi đối tượng trên nhiều luồng video cùng một lúc. Điều này đặc biệt hữu ích khi xử lý nhiều đầu vào video, chẳng hạn như từ nhiều camera giám sát, nơi xử lý đồng thời có thể nâng cao đáng kể hiệu quả và hiệu suất.
Trong cung cấp Python kịch bản, chúng tôi sử dụng Python's threading
mô-đun để chạy đồng thời nhiều phiên bản của trình theo dõi. Mỗi luồng chịu trách nhiệm chạy trình theo dõi trên một tệp video và tất cả các luồng chạy đồng thời trong nền.
Để đảm bảo rằng mỗi luồng nhận được các tham số chính xác (tệp video, mô hình sử dụng và chỉ mục tệp), chúng tôi xác định một hàm run_tracker_in_thread
chấp nhận các thông số này và chứa vòng lặp theo dõi chính. Chức năng này đọc từng khung hình video, chạy trình theo dõi và hiển thị kết quả.
Hai mô hình khác nhau được sử dụng trong ví dụ này: yolo11n.pt
và yolo11n-seg.pt
, mỗi đối tượng theo dõi trong một tệp video khác nhau. Các tệp video được chỉ định trong video_file1
và video_file2
.
Các daemon=True
tham số trong threading.Thread
có nghĩa là các luồng này sẽ được đóng ngay sau khi chương trình chính kết thúc. Sau đó, chúng tôi bắt đầu các chủ đề với start()
và sử dụng join()
để làm cho luồng chính đợi cho đến khi cả hai luồng trình theo dõi kết thúc.
Cuối cùng, sau khi tất cả các luồng đã hoàn thành nhiệm vụ của chúng, các cửa sổ hiển thị kết quả sẽ được đóng bằng cách sử dụng cv2.destroyAllWindows()
.
Phát trực tuyến theo vòng lặp với tính năng theo dõi
import threading
import cv2
from ultralytics import YOLO
# Define model names and video sources
MODEL_NAMES = ["yolo11n.pt", "yolo11n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"] # local video, 0 for webcam
def run_tracker_in_thread(model_name, filename):
"""
Run YOLO tracker in its own thread for concurrent processing.
Args:
model_name (str): The YOLO11 model object.
filename (str): The path to the video file or the identifier for the webcam/external camera source.
"""
model = YOLO(model_name)
results = model.track(filename, save=True, stream=True)
for r in results:
pass
# Create and start tracker threads using a for loop
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
tracker_threads.append(thread)
thread.start()
# Wait for all tracker threads to finish
for thread in tracker_threads:
thread.join()
# Clean up and close windows
cv2.destroyAllWindows()
Ví dụ này có thể dễ dàng được mở rộng để xử lý nhiều tệp và mô hình video hơn bằng cách tạo nhiều luồng hơn và áp dụng cùng một phương pháp.
Đóng góp trình theo dõi mới
Bạn có thành thạo theo dõi đa đối tượng và đã triển khai hoặc điều chỉnh thành công thuật toán theo dõi với Ultralytics YOLO? Chúng tôi mời bạn đóng góp vào phần Trình theo dõi của chúng tôi trong ultralytics/cfg/trackers! Các ứng dụng và giải pháp trong thế giới thực của bạn có thể là vô giá đối với người dùng làm việc theo dõi các tác vụ.
Bằng cách đóng góp vào phần này, bạn giúp mở rộng phạm vi các giải pháp theo dõi có sẵn trong Ultralytics YOLO framework, thêm một lớp chức năng và tiện ích khác cho cộng đồng.
Để bắt đầu đóng góp của bạn, vui lòng tham khảo Hướng dẫn đóng góp của chúng tôi để được hướng dẫn toàn diện về cách gửi Yêu cầu kéo (PR) 🛠️ . Chúng tôi rất vui khi thấy những gì bạn mang đến cho bàn!
Cùng nhau, hãy nâng cao khả năng theo dõi của Ultralytics YOLO 🙏 hệ sinh thái !
FAQ
Theo dõi đa đối tượng là gì và làm thế nào Ultralytics YOLO Hỗ trợ nó?
Theo dõi đa đối tượng trong phân tích video liên quan đến cả việc xác định đối tượng và duy trì ID duy nhất cho từng đối tượng được phát hiện trên các khung video. Ultralytics YOLO hỗ trợ điều này bằng cách cung cấp theo dõi thời gian thực cùng với ID đối tượng, tạo điều kiện thuận lợi cho các tác vụ như giám sát an ninh và phân tích thể thao. Hệ thống sử dụng các trình theo dõi như BoT-SORT và ByteTrack, có thể được cấu hình thông qua các tệp YAML.
Làm cách nào để định cấu hình trình theo dõi tùy chỉnh cho Ultralytics YOLO?
Bạn có thể định cấu hình trình theo dõi tùy chỉnh bằng cách sao chép tệp cấu hình trình theo dõi hiện có (ví dụ: custom_tracker.yaml
) từ Ultralytics Thư mục cấu hình trình theo dõi và sửa đổi các tham số khi cần thiết, ngoại trừ tracker_type
. Sử dụng tệp này trong mô hình theo dõi của bạn như sau:
Ví dụ
Làm cách nào để chạy theo dõi đối tượng trên nhiều luồng video cùng một lúc?
Để chạy theo dõi đối tượng trên nhiều luồng video cùng một lúc, bạn có thể sử dụng Python's threading
Module. Mỗi luồng sẽ xử lý một luồng video riêng biệt. Dưới đây là ví dụ về cách bạn có thể thiết lập tính năng này:
Theo dõi đa luồng
import threading
import cv2
from ultralytics import YOLO
# Define model names and video sources
MODEL_NAMES = ["yolo11n.pt", "yolo11n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"] # local video, 0 for webcam
def run_tracker_in_thread(model_name, filename):
"""
Run YOLO tracker in its own thread for concurrent processing.
Args:
model_name (str): The YOLO11 model object.
filename (str): The path to the video file or the identifier for the webcam/external camera source.
"""
model = YOLO(model_name)
results = model.track(filename, save=True, stream=True)
for r in results:
pass
# Create and start tracker threads using a for loop
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
tracker_threads.append(thread)
thread.start()
# Wait for all tracker threads to finish
for thread in tracker_threads:
thread.join()
# Clean up and close windows
cv2.destroyAllWindows()
Các ứng dụng trong thế giới thực của theo dõi đa đối tượng với là gì Ultralytics YOLO?
Theo dõi đa đối tượng với Ultralytics YOLO có nhiều ứng dụng, bao gồm:
- Giao thông: Theo dõi xe để quản lý giao thông và lái xe tự động.
- Bán lẻ: Mọi người theo dõi để phân tích và bảo mật tại cửa hàng.
- Nuôi trồng thủy sản: Theo dõi cá để giám sát môi trường nước.
Các ứng dụng này được hưởng lợi từ Ultralytics YOLOKhả năng xử lý video tốc độ khung hình cao trong thời gian thực.
Làm cách nào để hình dung các bản nhạc đối tượng trên nhiều khung hình video với Ultralytics YOLO?
Để trực quan hóa các bản nhạc đối tượng trên nhiều khung hình, bạn có thể sử dụng YOLO các tính năng theo dõi của mô hình cùng với OpenCV để vẽ đường đi của các đối tượng được phát hiện. Dưới đây là một tập lệnh ví dụ chứng minh điều này:
Vẽ các bản nhạc trên nhiều khung hình video
from collections import defaultdict
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
track_history = defaultdict(lambda: [])
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
boxes = results[0].boxes.xywh.cpu()
track_ids = results[0].boxes.id.int().cpu().tolist()
annotated_frame = results[0].plot()
for box, track_id in zip(boxes, track_ids):
x, y, w, h = box
track = track_history[track_id]
track.append((float(x), float(y)))
if len(track) > 30:
track.pop(0)
points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
cv2.imshow("YOLO11 Tracking", annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
Tập lệnh này sẽ vẽ các đường theo dõi hiển thị đường di chuyển của các đối tượng được theo dõi theo thời gian.