top of page

Esempio pratico Rilevamento Di Veicoli In Tempo Reale con il Deep Learning , Python e OpenCV


Esempio pratico Rilevamento Di Veicoli In Tempo Reale con il Deep Learning ( DL ) , Python e OpenCV
Esempio pratico Rilevamento Di Veicoli In Tempo Reale con il Deep Learning ( DL ) , Python e OpenCV

In questo articolo, ti mostreremo come esguire il rilevamento dei veicoli in tempo reale con Python utilizzando la libreria OpenCV , il classificatore preaddestrato e in poche righe di codice.


Perchè rilevare Veicoli con Python ?

Il rilevamento dei veicoli in tempo reale è una delle tante applicazioni del rilevamento degli oggetti , per cui si concentra sul rilevamento delle auto all'interno di un'immagine insieme alle coordinate della posizione.


In che progetti di deep learning è utilizzato?

  • il rilevamento dei veicoli insieme al rilevamento della strada è molto applicato sulle auto a guida autonoma, affinché un'auto possa navigare in sicurezza lungo la strada, deve sapere dove sono posizionate le altre auto in modo da evitare una collisione.

  • Anche il rilevamento dei veicoli viene utilizzato nei sistemi di sorveglianza del traffico in modo tale da poter rilevare il traffico in base al numero di veicoli e utilizzare tali dati per gestirlo e controllarlo.


Sei pronto al tutorial sul rilevamento di autoveicoli con Python?

In questo tutorial, impareremo come eseguire il rilevamento dei veicoli in tempo reale in un video o dai flussi di telecamere utilizzando OpenCV e un modello pre-addestrato.


Requisiti

Per poter seguire questo tutorial senza problemi ti lasciamo gli stessi file da noi utilizzati

  • OpenCV ( vedremo nel passaggio dopo come istallarlo )

  • Modello preaddestrato

  • Video dimostrativo


Alla fine dell'articolo potrai scaricare l'intero progetto python per il Rilevamento Di Veicoli In Tempo Reale


installazione Libreria


Se già conosci questi concetti usa questo comando per istallare la libreria

$ pip install opencv-python 
$ pip3 install opencv-python # per python >=3

Classificatore pre-addestrato per il rilevamento di veicoli

Come ho spiegato in precedenza, non addestreremo il nostro modello per individuare da zero le auto nei fotogrammi video, ma ne useremo uno pre-addestrato.


Questi classificatori a cascata addestrati vengono solitamente archiviati nel formato XML, quindi dovresti scaricare il sistema a cascata che è stato addestrato per rilevare le auto e averlo nella directory del progetto.



Video dimostrativo con le auto

Puoi effettivamente utilizzare qualsiasi video che desideri purché contenga auto, il modello sarà in grado di rilevarle. Se già sei esperto in questo campo potresti divertirti a farlo in streaming da remoto. Installando un app sul telefonino che funga da IP-CAMERA e collegandoti tramite opencv, ti basterebbe poggiare il telefono in modo che riprenda la strada mentre guidi e tornato a case esaminare o creare un progetto ad hoc al tuo caso.


Directory del progetto Rilevamento Di Veicoli In Tempo Reale

La directory del tuo progetto dopo aver scaricato gratuitamente dovrebbe essere simile a questa

├── app.py

├── cars.mp4

└── haarcascade_car.xml

Diamoci da fare

Ora iniziamo a costruire ciò di cui abbiamo appena parlato, utilizzando il modello XML e il video dimostrativo nella directory del progetto.


Carichiamo il nostro modello

utilizzare cv2.CascadeClassifier() per caricare il modello haarcascade addestrato come mostrato nel codice sottostante.

import cv2
cars_cascade = cv2.CascadeClassifier('haarcascade_car.xml')

Rilevare le auto in un video con Python

utilizzeremo il metodo detectMultiScale() per rilevare e ottenere le coordinate dei veicoli nei frame video.

Il metodo detectMultiScale () riceve 3 parametri per fornire effettivamente le tue coordinate come mostrato di seguito

  • Immagine in scala di grigi

  • fattore di scala

  • minVicini

Immagine in scala di grigi specifica l'immagine da elaborare, nel nostro caso un'immagine in scala di grigi sarà un'immagine recuperata dai flussi video.


ScaleFactor specifica di quanto viene ridotta la dimensione dell'immagine ad ogni scala dell'immagine, puoi saperne di più qui, un buon valore è per lo più scelto come 1.05


minNeighbors specifica quanti vicini dovrebbe avere ogni rettangolo candidato per mantenerlo, questo parametro influenzerà la qualità delle facce rilevate.

Un valore più alto si traduce in un minor numero di rilevamenti, ma con una qualità più elevata di solito, 3-6 è un buon valore per questo


Codice Python per rilevare le auto + le loro coordinate di posizione

Quando esegui la riga di codice qui sotto, eseguirà il rilevamento delle auto nell'immagine del frame e quindi ci restituirà tutte le coordinate delle auto trovate (punto coordinate diagonali).



cars = cars_cascade.detectMultiScale(frame, scaleFactor, minNeighbors)


Disegnare un rettangolo attorno alle auto rilevate

Dopo aver rilevato tutte le coordinate di tutte le auto in un frame, disegnamo un rettangolo attorno ad esso per consentirci di vedere visivamente il processo di rilevamento.


Useremo il metodo cv2.rectangle() per disegnare un rettangolo attorno a ogni auto rilevata usando i punti di coordinate diagonali restituiti dal nostro classificatore a cascata.


Codice per utilizzare il metodo cv2.rectangle()

cv2.rectangle(frame , point1, point2, color = (), thickness=value)

Scriviamo una funzione per eseguire tutto il processo di rilevamento

Dobbiamo condensare ciò che abbiamo appena appreso e metterlo in un'unica funzione che riceve i frame dell'immagine e quindi disegna rettangoli attorno ad essa utilizzando le coordinate rilevate proprio come mostrato di seguito.

def detect_cars(frame):
  cars = cars_cascade.detectMultiScale(frame, 1.15, 4)
  for (x, y, w, h) in cars: 
    cv2.rectangle(frame, (x, y), (x+w,y+h), color=(0, 255, 0), thickness=2)
  return frame

Scriviamo una funzione per effettuare il processo di rilevamento su un video

infine aggiungiamo una singola funzione per simulare l'intero processo dal caricamento del video, per eseguire il rilevamento del veicolo chiamando la funzione detect_cars e quindi eseguire il rendering di un frame con i veicoli rilevati sullo schermo.

def Simulator():
  CarVideo = cv2.VideoCapture('cars.mp4')
  while CarVideo.isOpened():
    ret, frame = CarVideo.read()
    controlkey = cv2.waitKey(1)
    if ret:
        cars_frame = detect_cars(frame)
        #se stai programmando in locale 
        #cv2.imshow('frame', cars_frame)
        #se usi colab
        cv2_imshow(cars_frame)
    else: 
        break
    if controlkey == ord('q'):
        break

Aggiungi queste due righe in modo da assicurarci di eseguire il nostro codice Python come script.

Simulator()

Esempio pratico Rilevamento Di Veicoli In Tempo Reale con il Deep Learning ( DL ) , Python e OpenCV
Esempio pratico Rilevamento Di Veicoli In Tempo Reale con il Deep Learning ( DL ) , Python e OpenCV


Mettiamo tutto insieme

Ora sappiamo come eseguire ogni parte indipendente del nostro script di rilevamento, è ora di metterli insieme in modo da poterlo eseguire.

Una volta che hai messo tutto il concetto che abbiamo imparato sopra in un app.py , il tuo codice apparirà come mostrato di seguito


from google.colab.patches import cv2_imshow #Se usi Google Colab

import cv2
cars_cascade = cv2.CascadeClassifier('haarcascade_car.xml')

def detect_cars(frame):
  cars = cars_cascade.detectMultiScale(frame, 1.15, 4)
  for (x, y, w, h) in cars: 
    cv2.rectangle(frame, (x, y), (x+w,y+h), color=(0, 255, 0), thickness=2)
  return frame

def Simulator():
  CarVideo = cv2.VideoCapture('cars.mp4')
  while CarVideo.isOpened():
    ret, frame = CarVideo.read()
    controlkey = cv2.waitKey(1)
    if ret:
        cars_frame = detect_cars(frame)
        #se stai programmando in locale 
        #cv2.imshow('frame', cars_frame)
        #se usi colab
        cv2_imshow(cars_frame)
    else: 
        break
    if controlkey == ord('q'):
        break
      
  CarVideo.release()
  cv2.destroyAllWindows()


Simulator()

Siamo arrivati ​​alla fine del nostro articolo, spero che tu abbia imparato qualcosa, ora condividilo con i tuoi amici o colleghi.




Grazie mille per la lettura :)

PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page