Overslaan naar inhoud

Objecten tellen met Ultralytics YOLOv8

Wat is objecttelling?

Objecten tellen met Ultralytics YOLOv8 Het gaat hierbij om het nauwkeurig identificeren en tellen van specifieke objecten in video's en camerastromen. YOLOv8 blinkt uit in realtime toepassingen en biedt efficiƫnte en nauwkeurige objecttelling voor verschillende scenario's zoals crowd analysis en surveillance, dankzij de geavanceerde algoritmen en deep learning mogelijkheden.


Kijken: Objecten tellen met Ultralytics YOLOv8

Kijken: Objecttelling per klasse met Ultralytics YOLOv8

Voordelen van voorwerpen tellen?

  • Optimalisatie van middelen: Objecttelling vergemakkelijkt efficiĆ«nt middelenbeheer door nauwkeurige tellingen en optimalisatie van de toewijzing van middelen in toepassingen zoals voorraadbeheer.
  • Verbeterde beveiliging: Het tellen van objecten verbetert de beveiliging en bewaking door entiteiten nauwkeurig te volgen en te tellen, wat helpt bij het proactief opsporen van bedreigingen.
  • GeĆÆnformeerde besluitvorming: Objecttelling biedt waardevolle inzichten voor het nemen van beslissingen, het optimaliseren van processen in de detailhandel, verkeersmanagement en diverse andere domeinen.

Toepassingen in de echte wereld

Logistiek Aquacultuur
Transportband Pakketten Tellen Met Ultralytics YOLOv8 Vissen tellen in zee met behulp van Ultralytics YOLOv8
Transportband Pakketten Tellen Met Ultralytics YOLOv8 Vissen tellen in zee met behulp van Ultralytics YOLOv8

Objecten tellen met YOLOv8 Voorbeeld

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()
Regio is verplaatsbaar

Je kunt het gebied overal in het frame verplaatsen door op de randen te klikken

Argument ObjectCounter

Hier is een tabel met de ObjectCounter argumenten:

Naam Type Standaard Beschrijving
names dict None Woordenboek met namen van klassen.
reg_pts list [(20, 400), (1260, 400)] Lijst met punten die het telgebied definiƫren.
count_reg_color tuple (255, 0, 255) RGB-kleur van het telgebied.
count_txt_color tuple (0, 0, 0) RGB-kleur van de teltekst.
count_bg_color tuple (255, 255, 255) RGB-kleur van de achtergrond van de teltekst.
line_thickness int 2 Lijndikte voor begrenzende vakken.
track_thickness int 2 Dikte van de spoorlijnen.
view_img bool False Vlag om te bepalen of de videostream moet worden weergegeven.
view_in_counts bool True Vlag om aan te geven of de in-tellingen op de videostream moeten worden weergegeven.
view_out_counts bool True Vlag om aan te geven of de uit-tellingen op de videostream moeten worden weergegeven.
draw_tracks bool False Vlag om te bepalen of de objectsporen moeten worden getekend.
track_color tuple None RGB-kleur van de sporen.
region_thickness int 5 Dikte van het object telgebied.
line_dist_thresh int 15 Euclidische afstandsdrempel voor lijnteller.
cls_txtdisplay_gap int 50 De ruimte tussen elke klassentelling weergeven.

Argumenten model.track

Naam Type Standaard Beschrijving
source im0 None bronmap voor afbeeldingen of video's
persist bool False Blijvende sporen tussen frames
tracker str botsort.yaml Volgmethode 'bytetrack' of 'botsort'
conf float 0.3 Vertrouwensdrempel
iou float 0.5 Drempel IOU
classes list None filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3]
verbose bool True De resultaten van het volgen van objecten weergeven

FAQ

Hoe tel ik objecten in een video met Ultralytics YOLOv8 ?

Om objecten in een video te tellen met Ultralytics YOLOv8 kun je de volgende stappen volgen:

  1. Importeer de benodigde bibliotheken (cv2, ultralytics).
  2. Een voorgetraind YOLOv8 model laden.
  3. Definieer het telgebied (bijvoorbeeld een veelhoek, lijn, etc.).
  4. Stel de video-opname in en initialiseer de objectteller.
  5. Verwerk elk frame om objecten op te sporen en te tellen binnen het gedefinieerde gebied.

Hier is een eenvoudig voorbeeld voor het tellen in een regio:

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")

Ontdek meer configuraties en opties in het gedeelte Objecttelling.

Wat zijn de voordelen van het gebruik van Ultralytics YOLOv8 voor het tellen van objecten?

Het gebruik van Ultralytics YOLOv8 voor het tellen van objecten biedt verschillende voordelen:

  1. Optimalisatie van middelen: Het maakt efficiƫnt beheer van middelen mogelijk door nauwkeurige tellingen, waardoor de toewijzing van middelen kan worden geoptimaliseerd in sectoren zoals voorraadbeheer.
  2. Verbeterde beveiliging: Het verbetert de beveiliging en bewaking door entiteiten nauwkeurig te volgen en te tellen, wat helpt bij het proactief opsporen van bedreigingen.
  3. GeĆÆnformeerde besluitvorming: Het biedt waardevolle inzichten voor het nemen van beslissingen, het optimaliseren van processen in domeinen zoals detailhandel, verkeersmanagement en nog veel meer.

Ga voor echte toepassingen en codevoorbeelden naar de sectie Voordelen van Objecttelling.

Hoe kan ik specifieke klassen van objecten tellen met Ultralytics YOLOv8 ?

Om specifieke klassen van objecten te tellen met Ultralytics YOLOv8 , moet je de klassen waarin je geĆÆnteresseerd bent specificeren tijdens de volgfase. Hieronder staat een voorbeeld van Python :

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])

In dit voorbeeld, classes_to_count=[0, 2], wat betekent dat het objecten telt van de klasse 0 en 2 (bijv. persoon en auto).

Waarom zou ik YOLOv8 gebruiken in plaats van andere objectdetectiemodellen voor realtime toepassingen?

Ultralytics YOLOv8 biedt verschillende voordelen ten opzichte van andere objectdetectiemodellen zoals Faster R-CNN, SSD en eerdere YOLO versies:

  1. Snelheid en efficiƫntie: YOLOv8 biedt realtime verwerkingsmogelijkheden, waardoor het ideaal is voor toepassingen die snelle inferentie vereisen, zoals bewaking en autonoom rijden.
  2. Nauwkeurigheid: Het biedt ultramoderne nauwkeurigheid voor objectdetectie en -traceringstaken, waardoor het aantal fout-positieven wordt verminderd en de algehele betrouwbaarheid van het systeem wordt verbeterd.
  3. Integratiegemak: YOLOv8 biedt naadloze integratie met verschillende platforms en apparaten, waaronder mobiele en edge apparaten, wat cruciaal is voor moderne AI-toepassingen.
  4. Flexibiliteit: Ondersteunt verschillende taken zoals objectdetectie, segmentatie en tracking met configureerbare modellen om te voldoen aan specifieke gebruikseisen.

Kijk op Ultralytics YOLOv8 Documentatie voor een diepere duik in de functies en prestatievergelijkingen.

Kan ik YOLOv8 gebruiken voor geavanceerde toepassingen zoals crowd analysis en verkeersmanagement?

Ja, Ultralytics YOLOv8 is perfect geschikt voor geavanceerde toepassingen zoals crowd analyse en verkeersmanagement vanwege de realtime detectiemogelijkheden, schaalbaarheid en flexibiliteit in integratie. De geavanceerde functies maken het mogelijk om objecten zeer nauwkeurig te volgen, te tellen en te classificeren in dynamische omgevingen. Voorbeelden van toepassingen zijn:

  • Analyse van mensenmassa's: Bewaak en beheer grote bijeenkomsten, zorg voor veiligheid en optimaliseer de mensenmassa.
  • Verkeersmanagement: Volg en tel voertuigen, analyseer verkeerspatronen en beheer files in real-time.

Raadpleeg voor meer informatie en implementatiedetails de gids over Echte toepassingen van objecttelling met YOLOv8.



Gemaakt op 2023-12-02, Bijgewerkt op 2024-07-14
Auteurs: RizwanMunawar (6), glenn-jocher (15), IvorZhu331 (1), AyushExel (1)

Reacties