İçeriğe geç

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
Ç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

İsim Tip Varsayılan Açıklama
source im0 None resimler veya videolar için kaynak dizin
persist bool False kareler arasında kalıcı izler
tracker str botsort.yaml İzleme yöntemi 'bytetrack' veya 'botsort'
conf float 0.3 Güven Eşiği
iou float 0.5 IOU Eşiği
classes list None sonuçları sınıfa göre filtreleyin, yani classes=0 veya classes=[0,2,3]
verbose bool True Nesne izleme sonuçlarını görüntüleme

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:

  1. Bir YOLOv8 modeli yükleyin ve video dosyanızı açın.
  2. Başlatmak Analytics sınıfının türü "satır" olarak ayarlanmıştır.
  3. Video kareleri arasında yineleme yaparak çizgi grafiğini kare başına nesne sayısı gibi ilgili verilerle güncelleyin.
  4. Ç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:

  1. 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.
  2. Kullanım Kolaylığı: Basit API ve fonksiyonlar, verilerin uygulanmasını ve görselleştirilmesini kolaylaştırır.
  3. Özelleştirme: Başlıkları, etiketleri, renkleri ve daha fazlasını özel gereksinimlerinize uyacak şekilde özelleştirin.
  4. 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ü:

  1. 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.
  2. Kullanıcı Dostu API: Minimum kod ile kurulumu ve kullanımı basit.
  3. Özelleştirilebilir: Renkler, etiketler ve daha fazlası için çeşitli özelleştirme seçenekleri.
  4. 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:

  1. Son Teknoloji Doğruluk: YOLOv8 nesne algılama, segmentasyon ve sınıflandırma görevlerinde üstün doğruluk sağlar.
  2. Kullanım Kolaylığı: Kullanıcı dostu API, kapsamlı kodlama olmadan hızlı uygulama ve entegrasyon sağlar.
  3. Gerçek Zamanlı Performans: Gerçek zamanlı uygulamalar için uygun, yüksek hızlı çıkarım için optimize edilmiştir.
  4. Ç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.
  5. 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.



Oluşturma 2024-05-23, Güncelleme 2024-07-05
Yazarlar: glenn-jocher (4), IvorZhu331 (1), RizwanMunawar (3)

Yorumlar