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