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

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

from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_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()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2

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 = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_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

Optionele argumenten set_args

Naam Type Standaard Beschrijving
view_img bool False Frames met tellingen weergeven
view_in_counts bool True In-tellingen alleen op videoframe weergeven
view_out_counts bool True Buitentellingen alleen op videoframe weergeven
line_thickness int 2 Vergroot bounding boxes en tel tekstdikte
reg_pts list [(20, 400), (1260, 400)] Punten die het gebied van de regio definiëren
classes_names dict model.model.names Woordenboek van klassenamen
count_reg_color RGB Color (255, 0, 255) Kleur van het Object dat Regio of Lijn telt
track_thickness int 2 Dikte van volglijnen
draw_tracks bool False Tekenen van spoorlijnen inschakelen
track_color RGB Color (0, 255, 0) Kleur voor elke spoorlijn
line_dist_thresh int 15 Euclidische afstandsdrempel voor lijnteller
count_txt_color RGB Color (255, 255, 255) Voorgrondkleur voor tekst Objecttelling
region_thickness int 5 Dikte voor object tegengebied of lijn
count_bg_color RGB Color (255, 255, 255) Kleur markeerstift tellen

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


Aangemaakt 2023-12-02, Bijgewerkt 2024-04-18
Auteurs: glenn-jocher (9), RizwanMunawar (1), AyushExel (1)

Reacties