Çoklu Nesne Takibi ile Ultralytics YOLO
Video analitiği alanında nesne takibi, yalnızca çerçeve içindeki nesnelerin konumunu ve sınıfını tanımlamakla kalmayıp aynı zamanda video ilerledikçe algılanan her nesne için benzersiz bir kimlik sağlayan kritik bir görevdir. Gözetim ve güvenlikten gerçek zamanlı spor analitiğine kadar uzanan uygulamalar sınırsızdır.
Neden Nesne Takibi için Ultralytics YOLO adresini seçmelisiniz?
Ultralytics izleyicilerinden elde edilen çıktı standart nesne algılama ile tutarlıdır ancak nesne kimliklerinin katma değerine sahiptir. Bu, video akışlarındaki nesneleri izlemeyi ve ardından analiz gerçekleştirmeyi kolaylaştırır. Nesne izleme ihtiyaçlarınız için neden Ultralytics YOLO adresini kullanmayı düşünmeniz gerektiğini açıklıyoruz:
- Verimlilik: Doğruluktan ödün vermeden video akışlarını gerçek zamanlı olarak işleyin.
- Esneklik: Çoklu izleme algoritmalarını ve konfigürasyonlarını destekler.
- Kullanım Kolaylığı: Hızlı entegrasyon ve dağıtım için basit Python API ve CLI seçenekleri.
- Özelleştirilebilirlik: Özel eğitimli YOLO modelleri ile kullanımı kolaydır ve alana özgü uygulamalara entegrasyon sağlar.
İzle: Ultralytics YOLO ile Nesne Tespiti ve Takibi .
Gerçek Dünya Uygulamaları
Ulaşım | Perakende | Akuakültür |
---|---|---|
Araç Takip | Kişi Takibi | Balık Takibi |
Bir Bakışta Özellikler
Ultralytics YOLO sağlam ve çok yönlü nesne takibi sağlamak için nesne algılama özelliklerini genişletir:
- Gerçek Zamanlı İzleme: Yüksek kare hızlı videolardaki nesneleri sorunsuzca izleyin.
- Çoklu İzleyici Desteği: Çeşitli yerleşik izleme algoritmaları arasından seçim yapın.
- Özelleştirilebilir İzleyici Yapılandırmaları: Çeşitli parametreleri ayarlayarak izleme algoritmasını özel gereksinimleri karşılayacak şekilde uyarlayın.
Mevcut İzleyiciler
Ultralytics YOLO aşağıdaki izleme algoritmalarını destekler. Bunlar, aşağıdaki gibi ilgili YAML yapılandırma dosyası geçirilerek etkinleştirilebilir tracker=tracker_type.yaml
:
- BoT-SORT - Kullanım
botsort.yaml
bu izleyiciyi etkinleştirmek için. - ByteTrack - Kullanım
bytetrack.yaml
bu izleyiciyi etkinleştirmek için.
Varsayılan izleyici BoT-SORT'tur.
Takip
İzleyici Eşik Bilgileri
Nesne güven puanı düşük olacaksa, yani track_high_thresh
bu durumda başarılı bir şekilde döndürülen ve güncellenen hiçbir parça olmayacaktır.
İzleyiciyi video akışları üzerinde çalıştırmak için YOLO11n, YOLO11n-seg ve YOLO11n-pose gibi eğitimli bir Algılama, Segment veya Poz modeli kullanın.
Örnek
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"
Yukarıdaki kullanımda görülebileceği gibi, videolar veya akış kaynakları üzerinde çalıştırılan tüm Detect, Segment ve Pose modelleri için izleme mevcuttur.
Konfigürasyon
İzleyici Eşik Bilgileri
Nesne güven puanı düşük olacaksa, yani track_high_thresh
bu durumda başarılı bir şekilde döndürülen ve güncellenen hiçbir parça olmayacaktır.
Argümanların İzlenmesi
İzleme yapılandırması, Tahmin modu ile aşağıdaki gibi özellikleri paylaşır conf
, iou
ve show
. Daha fazla konfigürasyon için bkz. Tahmin Et Model sayfası.
Örnek
İzleyici Seçimi
Ultralytics ayrıca değiştirilmiş bir izleyici yapılandırma dosyası kullanmanıza da olanak tanır. Bunu yapmak için, bir izleyici yapılandırma dosyasının bir kopyasını oluşturmanız yeterlidir (örn, custom_tracker.yaml
) dan ultralytics/cfg/trackers ve herhangi bir konfigürasyonu değiştirin (hariç tracker_type
) ihtiyaçlarınıza göre.
Örnek
İzleme argümanlarının kapsamlı bir listesi için ultralytics/cfg/trackers sayfasına bakın.
Python Örnekler
Devam Eden İzler Döngüsü
İşte Python komut dosyasını kullanarak OpenCV (cv2
) ve YOLO11 adreslerini kullanarak video kareleri üzerinde nesne izlemeyi çalıştırabilirsiniz. Bu betik hala gerekli paketleri zaten yüklediğinizi varsayar (opencv-python
ve ultralytics
). Bu persist=True
argümanı, izleyiciye geçerli görüntünün veya karenin bir dizinin sonraki görüntüsü olduğunu ve geçerli görüntüde önceki görüntüden izler beklemesini söyler.
İzleme ile for döngüsü akışı
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()
Lütfen şu değişikliğe dikkat edin model(frame)
için model.track(frame)
basit algılama yerine nesne izlemeyi etkinleştirir. Bu değiştirilmiş komut dosyası, videonun her karesinde izleyiciyi çalıştıracak, sonuçları görselleştirecek ve bir pencerede görüntüleyecektir. Döngüden 'q' tuşuna basılarak çıkılabilir.
İzleri Zaman İçinde Çizme
Ardışık kareler üzerindeki nesne izlerini görselleştirmek, bir videodaki algılanan nesnelerin hareket kalıpları ve davranışları hakkında değerli bilgiler sağlayabilir. Ultralytics YOLO11 ile bu izleri çizmek sorunsuz ve verimli bir süreçtir.
Aşağıdaki örnekte, tespit edilen nesnelerin hareketini birden fazla video karesi boyunca çizmek için YOLO11'un izleme yeteneklerinin nasıl kullanılacağını gösteriyoruz. Bu komut dosyası bir video dosyasını açmayı, kare kare okumayı ve çeşitli nesneleri tanımlamak ve izlemek için YOLO modelini kullanmayı içerir. Tespit edilen sınırlayıcı kutuların merkez noktalarını tutarak ve bunları birleştirerek, izlenen nesneler tarafından izlenen yolları temsil eden çizgiler çizebiliriz.
Birden fazla video karesi üzerinde izleri çizme
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()
Çok İş Parçacıklı İzleme
Çok iş parçacıklı izleme, nesne izlemeyi aynı anda birden fazla video akışı üzerinde çalıştırma olanağı sağlar. Bu özellikle, eş zamanlı işlemenin verimliliği ve performansı büyük ölçüde artırabileceği birden fazla güvenlik kamerası gibi birden fazla video girişini işlerken kullanışlıdır.
Sağlanan Python betiğinde, Python'in threading
modülünü kullanarak izleyicinin birden fazla örneğini eşzamanlı olarak çalıştırabilirsiniz. Her iş parçacığı izleyiciyi bir video dosyası üzerinde çalıştırmaktan sorumludur ve tüm iş parçacıkları arka planda aynı anda çalışır.
Her iş parçacığının doğru parametreleri (video dosyası, kullanılacak model ve dosya indeksi) almasını sağlamak için bir fonksiyon tanımlıyoruz run_tracker_in_thread
bu parametreleri kabul eder ve ana izleme döngüsünü içerir. Bu işlev videoyu kare kare okur, izleyiciyi çalıştırır ve sonuçları görüntüler.
Bu örnekte iki farklı model kullanılmıştır: yolo11n.pt
ve yolo11n-seg.pt
her biri farklı bir video dosyasındaki nesneleri izler. Video dosyaları şurada belirtilir video_file1
ve video_file2
.
Bu daemon=True
içinde parametre threading.Thread
ana program biter bitmez bu iş parçacıklarının kapatılacağı anlamına gelir. Daha sonra iş parçacıklarını şu şekilde başlatırız start()
ve kullanın join()
ana iş parçacığının her iki izleyici iş parçacığının işi bitene kadar beklemesini sağlamak için.
Son olarak, tüm iş parçacıkları görevlerini tamamladıktan sonra, sonuçları görüntüleyen pencereler cv2.destroyAllWindows()
.
İzleme ile for döngüsü akışı
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()
Bu örnek, daha fazla iş parçacığı oluşturarak ve aynı metodolojiyi uygulayarak daha fazla video dosyası ve modeli işlemek için kolayca genişletilebilir.
Yeni İzleyicilere Katkıda Bulunun
Çoklu nesne izleme konusunda uzman mısınız ve Ultralytics YOLO ile bir izleme algoritmasını başarıyla uyguladınız veya uyarladınız mı? Sizi ultralytics/cfg/trackers adresindeki İzleyiciler bölümümüze katkıda bulunmaya davet ediyoruz! Gerçek dünyadaki uygulamalarınız ve çözümleriniz, izleme görevleri üzerinde çalışan kullanıcılar için çok değerli olabilir.
Bu bölüme katkıda bulunarak, Ultralytics YOLO çerçevesinde mevcut izleme çözümlerinin kapsamını genişletmeye yardımcı olur, topluluk için başka bir işlevsellik ve fayda katmanı eklersiniz.
Katkınızı başlatmak için lütfen 🛠️ adresinde bir Çekme İsteği (PR) göndermeye ilişkin kapsamlı talimatlar için Katkıda Bulunma Kılavuzumuza bakın. Masaya ne getireceğinizi görmek için heyecanlıyız!
Birlikte Ultralytics YOLO ekosisteminin izleme yeteneklerini geliştirelim 🙏!
SSS
Çoklu Nesne Takibi nedir ve Ultralytics YOLO bunu nasıl destekler?
Video analizinde çoklu nesne takibi, hem nesneleri tanımlamayı hem de video kareleri boyunca tespit edilen her nesne için benzersiz bir kimlik tutmayı içerir. Ultralytics YOLO , nesne kimlikleriyle birlikte gerçek zamanlı izleme sağlayarak bunu destekler ve güvenlik gözetimi ve spor analizi gibi görevleri kolaylaştırır. Sistem, YAML dosyaları aracılığıyla yapılandırılabilen BoT-SORT ve ByteTrack gibi izleyicileri kullanır.
Ultralytics YOLO için özel bir izleyiciyi nasıl yapılandırabilirim?
Mevcut bir izleyici yapılandırma dosyasını kopyalayarak özel bir izleyici yapılandırabilirsiniz (örn, custom_tracker.yaml
)'den Ultralytics tracker yapılandırma dizini ve parametreleri gerektiği gibi değiştirerek tracker_type
. Bu dosyayı izleme modelinizde şu şekilde kullanın:
Örnek
Nesne izlemeyi aynı anda birden fazla video akışında nasıl çalıştırabilirim?
Nesne izlemeyi aynı anda birden fazla video akışında çalıştırmak için Python'u kullanabilirsiniz. threading
modülü. Her iş parçacığı ayrı bir video akışını idare edecektir. İşte bunu nasıl kurabileceğinize dair bir örnek:
Çok İş Parçacıklı İzleme
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()
Ultralytics YOLO ile çoklu nesne takibinin gerçek dünyadaki uygulamaları nelerdir?
Ultralytics YOLO ile çoklu nesne takibi, aşağıdakiler de dahil olmak üzere çok sayıda uygulamaya sahiptir:
- Ulaşım: Trafik yönetimi ve otonom sürüş için araç takibi.
- Perakende: Mağaza içi analitik ve güvenlik için insan takibi.
- Akuakültür: Su ortamlarının izlenmesi için balık takibi.
Bu uygulamalar Ultralytics YOLO 'un yüksek kare hızlı videoları gerçek zamanlı olarak işleme yeteneğinden yararlanır.
Nesne izlerini Ultralytics YOLO ile birden fazla video karesi üzerinde nasıl görselleştirebilirim?
Birden fazla video karesi üzerindeki nesne izlerini görselleştirmek için YOLO modelinin izleme özelliklerini OpenCV ile birlikte kullanarak tespit edilen nesnelerin yollarını çizebilirsiniz. İşte bunu gösteren örnek bir komut dosyası:
Birden fazla video karesi üzerinde izleri çizme
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()
Bu kod, izlenen nesnelerin zaman içindeki hareket yollarını gösteren izleme çizgilerini çizecektir.