Analitik kullanarak Ultralytics YOLOv8
Giriş
Bu kılavuz, üç temel veri görselleştirme türüne kapsamlı bir genel bakış sunmaktadır: çizgi grafikler, çubuk grafikler ve pasta grafikler. Her bölüm, Python adresini kullanarak bu görselleştirmelerin nasıl oluşturulacağına dair adım adım talimatlar ve kod parçacıkları içermektedir.
Görsel Örnekler
Çizgi Grafiği | Çubuk Arsa | Pasta Grafiği |
---|---|---|
Grafikler Neden Önemlidir?
- Çizgi grafikler, kısa ve uzun dönemlerdeki değişiklikleri izlemek ve aynı dönemde birden fazla grup için değişiklikleri karşılaştırmak için idealdir.
- Öte yandan çubuk grafikler, farklı kategorilerdeki miktarları karşılaştırmak ve bir kategori ile sayısal değeri arasındaki ilişkileri göstermek için uygundur.
- Son olarak, pasta grafikler kategoriler arasındaki oranları göstermek ve bir bütünün parçalarını göstermek için etkilidir.
Analitik Örnekler
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="line",
writer=out,
im0_shape=(w, h),
view_img=True,
)
total_counts = 0
frame_count = 0
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
for box in boxes:
total_counts += 1
analytics.update_line(frame_count, total_counts)
total_counts = 0
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("multiple_line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="line",
writer=out,
im0_shape=(w, h),
view_img=True,
max_points=200,
)
frame_count = 0
data = {}
labels = []
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
track_ids = results[0].boxes.id.int().cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
for box, track_id, cls in zip(boxes, track_ids, clss):
# Store each class label
if model.names[int(cls)] not in labels:
labels.append(model.names[int(cls)])
# Store each class count
if model.names[int(cls)] in data:
data[model.names[int(cls)]] += 1
else:
data[model.names[int(cls)]] = 0
# update lines every frame
analytics.update_multiple_lines(data, labels, frame_count)
data = {} # clear the data list for next frame
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("pie_chart.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="pie",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_pie(clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("bar_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="bar",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_bar(clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("area_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="area",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
frame_count = 0
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_area(frame_count, clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
Tartışma Analytics
İşte bir tablo Analytics
Argümanlar:
İsim | Tip | Varsayılan | Açıklama |
---|---|---|---|
type |
str |
None |
Veri veya nesne türü. |
im0_shape |
tuple |
None |
İlk görüntünün şekli. |
writer |
cv2.VideoWriter |
None |
Video dosyalarını yazmak için nesne. |
title |
str |
ultralytics |
Görselleştirme için başlık. |
x_label |
str |
x |
X ekseni için etiket. |
y_label |
str |
y |
Y ekseni için etiket. |
bg_color |
str |
white |
Arka plan rengi. |
fg_color |
str |
black |
Ön plan rengi. |
line_color |
str |
yellow |
Çizgilerin rengi. |
line_width |
int |
2 |
Çizgilerin genişliği. |
fontsize |
int |
13 |
Metin için yazı tipi boyutu. |
view_img |
bool |
False |
Görüntüyü veya videoyu görüntülemek için bayrak. |
save_img |
bool |
True |
Görüntüyü veya videoyu kaydetmek için işaretleyin. |
max_points |
int |
50 |
Birden fazla çizgi için, başlangıç noktalarını silmeden önce çerçeveye çizilen toplam puanlar. |
points_width |
int |
15 |
Çizgi noktalarının genişliği vurgulayıcı. |
Argümanlar model.track
Tartışma | Tip | Varsayılan | Açıklama |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml veya botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
Sonuç
Farklı görselleştirme türlerinin ne zaman ve nasıl kullanılacağını anlamak, etkili veri analizi için çok önemlidir. Çizgi grafikler, çubuk grafikler ve pasta grafikler, verilerinizin hikayesini daha net ve etkili bir şekilde aktarmanıza yardımcı olabilecek temel araçlardır.
SSS
Ultralytics YOLOv8 Analytics kullanarak nasıl çizgi grafiği oluşturabilirim?
Ultralytics YOLOv8 Analytics kullanarak bir çizgi grafiği oluşturmak için aşağıdaki adımları izleyin:
- Bir YOLOv8 modeli yükleyin ve video dosyanızı açın.
- Başlatmak
Analytics
sınıfının türü "satır" olarak ayarlanmıştır. - Video kareleri arasında yineleme yaparak çizgi grafiğini kare başına nesne sayısı gibi ilgili verilerle güncelleyin.
- Çizgi grafiğini görüntüleyen çıktı videosunu kaydedin.
Örnek:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(type="line", writer=out, im0_shape=(w, h), view_img=True)
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
total_counts = sum([1 for box in results[0].boxes.xyxy])
analytics.update_line(frame_count, total_counts)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
Yapılandırma hakkında daha fazla ayrıntı için Analytics
sınıfını ziyaret etmek için Analytics kullanarak Ultralytics YOLOv8 📊 Bölüm.
Çubuk grafikler oluşturmak için Ultralytics YOLOv8 adresini kullanmanın faydaları nelerdir?
Çubuk grafikler oluşturmak için Ultralytics YOLOv8 adresini kullanmak çeşitli avantajlar sunar:
- Gerçek Zamanlı Veri Görselleştirme: Dinamik güncellemeler için nesne algılama sonuçlarını çubuk grafiklere sorunsuz bir şekilde entegre edin.
- Kullanım Kolaylığı: Basit API ve fonksiyonlar, verilerin uygulanmasını ve görselleştirilmesini kolaylaştırır.
- Özelleştirme: Başlıkları, etiketleri, renkleri ve daha fazlasını özel gereksinimlerinize uyacak şekilde özelleştirin.
- Verimlilik: Büyük miktarda veriyi verimli bir şekilde işleyin ve video işleme sırasında grafikleri gerçek zamanlı olarak güncelleyin.
Bir çubuk grafiği oluşturmak için aşağıdaki örneği kullanın:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("bar_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(type="bar", writer=out, im0_shape=(w, h), view_img=True)
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
clswise_count = {
model.names[int(cls)]: boxes.size(0)
for cls, boxes in zip(results[0].boxes.cls.tolist(), results[0].boxes.xyxy)
}
analytics.update_bar(clswise_count)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
Daha fazla bilgi edinmek için kılavuzdaki Bar Plot bölümünü ziyaret edin.
Veri görselleştirme projelerimde pasta grafikler oluşturmak için neden Ultralytics YOLOv8 adresini kullanmalıyım?
Ultralytics YOLOv8 pasta grafikler oluşturmak için mükemmel bir seçimdir çünkü:
- Nesne Algılama ile Entegrasyon: Anında içgörüler için nesne algılama sonuçlarını doğrudan pasta grafiklere entegre edin.
- Kullanıcı Dostu API: Minimum kod ile kurulumu ve kullanımı basit.
- Özelleştirilebilir: Renkler, etiketler ve daha fazlası için çeşitli özelleştirme seçenekleri.
- Gerçek Zamanlı Güncellemeler: Video analiz projeleri için ideal olan verileri gerçek zamanlı olarak işleyin ve görselleştirin.
İşte hızlı bir örnek:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("pie_chart.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(type="pie", writer=out, im0_shape=(w, h), view_img=True)
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
clswise_count = {
model.names[int(cls)]: boxes.size(0)
for cls, boxes in zip(results[0].boxes.cls.tolist(), results[0].boxes.xyxy)
}
analytics.update_pie(clswise_count)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
Daha fazla bilgi için kılavuzdaki Pasta Grafik bölümüne bakın.
Nesneleri izlemek ve görselleştirmeleri dinamik olarak güncellemek için Ultralytics YOLOv8 kullanılabilir mi?
Evet, Ultralytics YOLOv8 nesneleri izlemek ve görselleştirmeleri dinamik olarak güncellemek için kullanılabilir. Birden fazla nesneyi gerçek zamanlı olarak izlemeyi destekler ve izlenen nesnelerin verilerine dayalı olarak çizgi grafikler, çubuk grafikler ve pasta grafikler gibi çeşitli görselleştirmeleri güncelleyebilir.
Bir çizgi grafiğinin izlenmesi ve güncellenmesi için örnek:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
cap = cv2.VideoCapture("Path/to/video/file.mp4")
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(type="line", writer=out, im0_shape=(w, h), view_img=True)
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
total_counts = sum([1 for box in results[0].boxes.xyxy])
analytics.update_line(frame_count, total_counts)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
Tüm işlevsellik hakkında bilgi edinmek için İzleme bölümüne bakın.
Ultralytics YOLOv8 adresini OpenCV ve TensorFlow gibi diğer nesne algılama çözümlerinden farklı kılan nedir?
Ultralytics YOLOv8 OpenCV ve TensorFlow gibi diğer nesne algılama çözümlerinden birçok nedenden dolayı ayrılır:
- Son Teknoloji Doğruluk: YOLOv8 nesne algılama, segmentasyon ve sınıflandırma görevlerinde üstün doğruluk sağlar.
- Kullanım Kolaylığı: Kullanıcı dostu API, kapsamlı kodlama olmadan hızlı uygulama ve entegrasyon sağlar.
- Gerçek Zamanlı Performans: Gerçek zamanlı uygulamalar için uygun, yüksek hızlı çıkarım için optimize edilmiştir.
- Çeşitli Uygulamalar: Çoklu nesne takibi, özel model eğitimi ve ONNX, TensorRT ve CoreML gibi farklı formatlara aktarma gibi çeşitli görevleri destekler.
- Kapsamlı Dokümantasyon: Kullanıcılara her adımda rehberlik edecek kapsamlı dokümantasyon ve blog kaynakları.
Daha ayrıntılı karşılaştırmalar ve kullanım örnekleri için Ultralytics Blogumuzu inceleyin.