İçeriğe geç

Nesne Sayma kullanarak Ultralytics YOLOv8

Nesne Sayma Nedir?

Nesne sayma ile Ultralytics YOLOv8 videolarda ve kamera akışlarında belirli nesnelerin doğru bir şekilde tanımlanmasını ve sayılmasını içerir. YOLOv8 , son teknoloji algoritmaları ve derin öğrenme yetenekleri sayesinde kalabalık analizi ve gözetim gibi çeşitli senaryolar için verimli ve hassas nesne sayımı sağlayarak gerçek zamanlı uygulamalarda öne çıkar.


İzle: Nesne Sayma kullanarak Ultralytics YOLOv8

İzle: Sınıf Bazında Nesne Sayma Ultralytics YOLOv8

Nesne Saymanın Avantajları?

  • Kaynak Optimizasyonu: Nesne sayımı, doğru sayımlar sağlayarak ve envanter yönetimi gibi uygulamalarda kaynak tahsisini optimize ederek verimli kaynak yönetimini kolaylaştırır.
  • Gelişmiş Güvenlik: Nesne sayma, varlıkları doğru bir şekilde izleyip sayarak güvenliği ve gözetimi artırır ve proaktif tehdit tespitine yardımcı olur.
  • Bilgilendirilmiş Karar Alma: Nesne sayımı, perakende, trafik yönetimi ve diğer çeşitli alanlarda karar verme, süreçleri optimize etme için değerli bilgiler sunar.

Gerçek Dünya Uygulamaları

Lojistik Akuakültür
Konveyör Bant Paketleri Kullanarak Sayma Ultralytics YOLOv8 Denizde Balık Sayımı Ultralytics YOLOv8
Konveyör Bant Paketleri Kullanarak Sayma Ultralytics YOLOv8 Denizde Balık Sayımı Ultralytics YOLOv8

YOLOv8 kullanarak Nesne Sayma Örnek

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Bölge Hareketli

Kenarlarına tıklayarak bölgeyi çerçeve içinde herhangi bir yere taşıyabilirsiniz

Tartışma ObjectCounter

İşte bir tablo ObjectCounter Argümanlar:

İsim Tip Varsayılan Açıklama
names dict None Sınıf adları sözlüğü.
reg_pts list [(20, 400), (1260, 400)] Sayım bölgesini tanımlayan noktaların listesi.
count_reg_color tuple (255, 0, 255) Sayma bölgesinin RGB rengi.
count_txt_color tuple (0, 0, 0) Sayım metninin RGB rengi.
count_bg_color tuple (255, 255, 255) Sayım metni arka planının RGB rengi.
line_thickness int 2 Sınırlayıcı kutular için çizgi kalınlığı.
track_thickness int 2 Ray çizgilerinin kalınlığı.
view_img bool False Video akışının görüntülenip görüntülenmeyeceğini kontrol etmek için bayrak.
view_in_counts bool True Video akışında giriş sayılarının görüntülenip görüntülenmeyeceğini kontrol etmek için bayrak.
view_out_counts bool True Video akışında çıkış sayılarının görüntülenip görüntülenmeyeceğini kontrol etmek için bayrak.
draw_tracks bool False Nesne izlerinin çizilip çizilmeyeceğini kontrol etmek için bayrak.
track_color tuple None İzlerin RGB rengi.
region_thickness int 5 Nesne sayma bölgesinin kalınlığı.
line_dist_thresh int 15 Çizgi sayacı için Öklid mesafesi eşiği.
cls_txtdisplay_gap int 50 Her sınıf sayısı arasındaki boşluğu görüntüleyin.

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

SSS

Ultralytics YOLOv8 adresini kullanarak bir videodaki nesneleri nasıl sayabilirim?

Ultralytics YOLOv8 adresini kullanarak bir videodaki nesneleri saymak için aşağıdaki adımları takip edebilirsiniz:

  1. Gerekli kütüphaneleri içe aktarın (cv2, ultralytics).
  2. Önceden eğitilmiş bir YOLOv8 modeli yükleyin.
  3. Sayım bölgesini tanımlayın (örn. bir çokgen, çizgi, vb.).
  4. Video yakalamayı ayarlayın ve nesne sayacını başlatın.
  5. Nesneleri izlemek ve tanımlanan bölge içinde saymak için her kareyi işleyin.

İşte bir bölgede sayım yapmak için basit bir örnek:

import cv2

from ultralytics import YOLO, solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=region_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")

Nesne Sayma bölümünde daha fazla yapılandırma ve seçenek keşfedin.

Nesne sayımı için Ultralytics YOLOv8 adresini kullanmanın avantajları nelerdir?

Nesne sayımı için Ultralytics YOLOv8 adresini kullanmak çeşitli avantajlar sunar:

  1. Kaynak Optimizasyonu: Doğru sayımlar sağlayarak verimli kaynak yönetimini kolaylaştırır, envanter yönetimi gibi sektörlerde kaynak tahsisini optimize etmeye yardımcı olur.
  2. Geliştirilmiş Güvenlik: Varlıkları doğru bir şekilde izleyip sayarak güvenliği ve gözetimi artırır, proaktif tehdit tespitine yardımcı olur.
  3. Bilgilendirilmiş Karar Alma: Perakende, trafik yönetimi ve daha fazlası gibi alanlarda karar verme, süreçleri optimize etme için değerli içgörüler sunar.

Gerçek dünya uygulamaları ve kod örnekleri için Nesne Saymanın Avantajları bölümünü ziyaret edin.

Ultralytics YOLOv8 adresini kullanarak belirli nesne sınıflarını nasıl sayabilirim?

Ultralytics YOLOv8 adresini kullanarak belirli nesne sınıflarını saymak için, izleme aşamasında ilgilendiğiniz sınıfları belirtmeniz gerekir. Aşağıda bir Python örneği verilmiştir:

import cv2

from ultralytics import YOLO, solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    line_points = [(20, 400), (1080, 400)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=line_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])

Bu örnekte, classes_to_count=[0, 2]sınıfının nesnelerini saydığı anlamına gelir 0 ve 2 (örneğin, kişi ve araba).

Gerçek zamanlı uygulamalar için neden diğer nesne algılama modelleri yerine YOLOv8 kullanmalıyım?

Ultralytics YOLOv8 Faster R-CNN, SSD ve önceki YOLO sürümleri gibi diğer nesne algılama modellerine göre çeşitli avantajlar sağlar:

  1. Hız ve Verimlilik: YOLOv8 gerçek zamanlı işleme yetenekleri sunarak gözetim ve otonom sürüş gibi yüksek hızlı çıkarım gerektiren uygulamalar için idealdir.
  2. Doğruluk: Nesne algılama ve izleme görevleri için son teknoloji doğruluk sağlar, yanlış pozitiflerin sayısını azaltır ve genel sistem güvenilirliğini artırır.
  3. Entegrasyon Kolaylığı: YOLOv8 , modern yapay zeka uygulamaları için çok önemli olan mobil ve uç cihazlar da dahil olmak üzere çeşitli platformlar ve cihazlarla sorunsuz entegrasyon sunar.
  4. Esneklik: Belirli kullanım durumu gereksinimlerini karşılamak için yapılandırılabilir modellerle nesne algılama, segmentasyon ve izleme gibi çeşitli görevleri destekler.

Özellikleri ve performans karşılaştırmaları hakkında daha derinlemesine bilgi için Ultralytics YOLOv8 Dokümantasyonuna göz atın.

YOLOv8 adresini kalabalık analizi ve trafik yönetimi gibi gelişmiş uygulamalar için kullanabilir miyim?

Evet, Ultralytics YOLOv8 gerçek zamanlı algılama yetenekleri, ölçeklenebilirliği ve entegrasyon esnekliği sayesinde kalabalık analizi ve trafik yönetimi gibi gelişmiş uygulamalar için mükemmel şekilde uygundur. Gelişmiş özellikleri, dinamik ortamlarda yüksek doğrulukta nesne izleme, sayma ve sınıflandırma sağlar. Örnek kullanım durumları şunları içerir:

  • Kalabalık Analizi: Güvenliği sağlamak ve kalabalık akışını optimize etmek için büyük toplantıları izleyin ve yönetin.
  • Trafik Yönetimi: Araçları takip edin ve sayın, trafik düzenlerini analiz edin ve trafik sıkışıklığını gerçek zamanlı olarak yönetin.

Daha fazla bilgi ve uygulama ayrıntıları için YOLOv8 ile nesne saymanın Gerçek Dünya Uygulamaları kılavuzuna bakın.



Oluşturuldu 2023-12-02, Güncellendi 2024-07-14
Yazarlar: RizwanMunawar (6), glenn-jocher (15), IvorZhu331 (1), AyushExel (1)

Yorumlar