Conteggio degli oggetti con Ultralytics YOLOv8
Che cos'è il conteggio degli oggetti?
Il conteggio degli oggetti con Ultralytics YOLOv8YOLOv8 eccelle nelle applicazioni in tempo reale, fornendo un conteggio efficiente e preciso degli oggetti in vari scenari come l'analisi della folla e la sorveglianza, grazie ai suoi algoritmi all'avanguardia e alle capacità di deep learning.
Guarda: Conteggio degli oggetti con Ultralytics YOLOv8 |
Guarda: Conteggio degli oggetti in base alla classe utilizzando Ultralytics YOLOv8 |
Vantaggi del conteggio degli oggetti?
- Ottimizzazione delle risorse: Il conteggio degli oggetti facilita una gestione efficiente delle risorse, fornendo conteggi accurati e ottimizzando l'allocazione delle risorse in applicazioni come la gestione dell'inventario.
- Maggiore sicurezza: Il conteggio degli oggetti migliora la sicurezza e la sorveglianza grazie al tracciamento e al conteggio accurato delle entità , favorendo il rilevamento proattivo delle minacce.
- Decisioni informate: Il conteggio degli oggetti offre spunti preziosi per il processo decisionale, ottimizzando i processi nella vendita al dettaglio, nella gestione del traffico e in vari altri settori.
Applicazioni nel mondo reale
Logistica | Acquacoltura |
---|---|
Nastro trasportatore conta pacchetti utilizzando Ultralytics YOLOv8 | Conteggio dei pesci in mare utilizzando Ultralytics YOLOv8 |
Esempio di conteggio degli oggetti con YOLOv8
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()
La regione è mobile
Puoi spostare la regione in qualsiasi punto della cornice cliccando sui suoi bordi.
Argomento ObjectCounter
Ecco una tabella con i dati ObjectCounter
argomenti:
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
names |
dict |
None |
Dizionario dei nomi delle classi. |
reg_pts |
list |
[(20, 400), (1260, 400)] |
Elenco dei punti che definiscono la regione di conteggio. |
count_reg_color |
tuple |
(255, 0, 255) |
Colore RGB della regione di conteggio. |
count_txt_color |
tuple |
(0, 0, 0) |
Colore RGB del testo del conteggio. |
count_bg_color |
tuple |
(255, 255, 255) |
Colore RGB dello sfondo del testo del conteggio. |
line_thickness |
int |
2 |
Spessore delle linee per i riquadri di delimitazione. |
track_thickness |
int |
2 |
Spessore delle linee dei binari. |
view_img |
bool |
False |
Flag per controllare se visualizzare il flusso video. |
view_in_counts |
bool |
True |
Flag per controllare se visualizzare o meno i conteggi nel flusso video. |
view_out_counts |
bool |
True |
Flag per controllare se visualizzare i conteggi di uscita nel flusso video. |
draw_tracks |
bool |
False |
Flag per controllare se disegnare o meno le tracce dell'oggetto. |
track_color |
tuple |
None |
Colore RGB delle tracce. |
region_thickness |
int |
5 |
Spessore della regione di conteggio dell'oggetto. |
line_dist_thresh |
int |
15 |
Soglia della distanza euclidea per il contatore di linee. |
cls_txtdisplay_gap |
int |
50 |
Visualizza l'intervallo tra il conteggio di ogni classe. |
Argomenti model.track
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
im0 |
None |
directory di origine per le immagini o i video |
persist |
bool |
False |
persistenza dei brani tra i fotogrammi |
tracker |
str |
botsort.yaml |
Metodo di tracciamento 'bytetrack' o 'botsort' |
conf |
float |
0.3 |
Soglia di fiducia |
iou |
float |
0.5 |
Soglia IOU |
classes |
list |
None |
filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3]. |
verbose |
bool |
True |
Visualizza i risultati del tracciamento dell'oggetto |
DOMANDE FREQUENTI
Come faccio a contare gli oggetti in un video utilizzando Ultralytics YOLOv8 ?
Per contare gli oggetti in un video utilizzando Ultralytics YOLOv8 , puoi seguire i seguenti passaggi:
- Importa le librerie necessarie (
cv2
,ultralytics
). - Carica un modello preaddestrato di YOLOv8 .
- Definisci la regione di conteggio (ad esempio, un poligono, una linea, ecc.).
- Imposta l'acquisizione video e inizializza il contatore degli oggetti.
- Elabora ogni fotogramma per tracciare gli oggetti e contarli all'interno della regione definita.
Ecco un semplice esempio di conteggio in una regione:
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")
Esplora altre configurazioni e opzioni nella sezione Conteggio oggetti.
Quali sono i vantaggi dell'utilizzo di Ultralytics YOLOv8 per il conteggio degli oggetti?
L'utilizzo di Ultralytics YOLOv8 per il conteggio degli oggetti offre diversi vantaggi:
- Ottimizzazione delle risorse: Facilita una gestione efficiente delle risorse fornendo conteggi accurati, aiutando a ottimizzare l'allocazione delle risorse in settori come la gestione dell'inventario.
- Maggiore sicurezza: Migliora la sicurezza e la sorveglianza grazie al tracciamento e al conteggio accurato delle entità , favorendo il rilevamento proattivo delle minacce.
- Processo decisionale informato: Offre preziosi spunti per il processo decisionale, ottimizzando i processi in settori come la vendita al dettaglio, la gestione del traffico e altri ancora.
Per applicazioni reali ed esempi di codice, visita la sezione Vantaggi del conteggio degli oggetti.
Come posso contare classi specifiche di oggetti utilizzando Ultralytics YOLOv8 ?
Per contare classi specifiche di oggetti utilizzando Ultralytics YOLOv8 , devi specificare le classi a cui sei interessato durante la fase di tracciamento. Di seguito è riportato un esempio 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 questo esempio, classes_to_count=[0, 2]
, il che significa che conta gli oggetti della classe 0
e 2
(ad esempio, persona e auto).
Perché dovrei usare YOLOv8 rispetto ad altri modelli di rilevamento degli oggetti per le applicazioni in tempo reale?
Ultralytics YOLOv8 offre diversi vantaggi rispetto ad altri modelli di rilevamento degli oggetti come Faster R-CNN, SSD e le precedenti versioni di YOLO :
- Velocità ed efficienza: YOLOv8 offre capacità di elaborazione in tempo reale, rendendolo ideale per le applicazioni che richiedono un'inferenza ad alta velocità , come la sorveglianza e la guida autonoma.
- Precisione: offre un'accuratezza all'avanguardia per le attività di rilevamento e tracciamento degli oggetti, riducendo il numero di falsi positivi e migliorando l'affidabilità complessiva del sistema.
- Facilità di integrazione: YOLOv8 offre un'integrazione perfetta con diverse piattaforme e dispositivi, compresi i dispositivi mobili ed edge, che sono fondamentali per le moderne applicazioni di intelligenza artificiale.
- Flessibilità : Supporta diverse attività come il rilevamento, la segmentazione e il tracciamento degli oggetti con modelli configurabili per soddisfare i requisiti di casi d'uso specifici.
Dai un'occhiata alladocumentazione di Ultralytics YOLOv8 per approfondire le sue caratteristiche e confrontare le prestazioni.
Posso utilizzare YOLOv8 per applicazioni avanzate come l'analisi della folla e la gestione del traffico?
Sì, Ultralytics YOLOv8 è perfettamente adatto ad applicazioni avanzate come l'analisi della folla e la gestione del traffico grazie alle sue capacità di rilevamento in tempo reale, alla scalabilità e alla flessibilità di integrazione. Le sue caratteristiche avanzate consentono di tracciare, contare e classificare gli oggetti con grande precisione in ambienti dinamici. Alcuni esempi di utilizzo sono:
- Analisi delle folle: Controlla e gestisce i grandi raduni, garantendo la sicurezza e ottimizzando il flusso della folla.
- Gestione del traffico: Traccia e conta i veicoli, analizza i modelli di traffico e gestisce la congestione in tempo reale.
Per maggiori informazioni e dettagli sull'implementazione, consulta la guida sulle applicazioni reali del conteggio degli oggetti con YOLOv8.
Creato 2023-12-02, Aggiornato 2024-07-14
Autori: RizwanMunawar (6), glenn-jocher (15), IvorZhu331 (1), AyushExel (1)