Prerequisiti :
Se non sai perchè utilizzeremo python, clicca qui
Se non hai ancora installato Python, clicca qui
Se non sai come scaricare e gestire le librerie, clicca qui
Se non sai cosa sia un Dataset, clicca qui
Se non sai quali sono le migliori librerie per l'I.A. , clicca qui
Introduzione
Il rilevamento di oggetti è una tecnologia che rientra nel dominio più ampio della visione artificiale . Si occupa di identificare e tracciare oggetti presenti in immagini e video. Il rilevamento di oggetti ha molteplici applicazioni come il rilevamento dei volti, il rilevamento dei veicoli, il conteggio dei pedoni, le auto a guida autonoma, i sistemi di sicurezza, ecc.
I due principali obiettivi del rilevamento di oggetti includono:
Per identificare tutti gli oggetti presenti in un'immagine
Filtra l'oggetto dell'attenzione
In questo articolo vedrai come eseguire il rilevamento di oggetti in Python con l'aiuto della libreria ImageAI .
Apprendimento approfondito per il rilevamento di oggetti
Le tecniche di deep learning si sono dimostrate all'avanguardia per vari problemi di rilevamento di oggetti. Di seguito sono riportati alcuni degli approcci di deep learning comunemente utilizzati per il rilevamento di oggetti:
ImageAI
Rilevatori a colpo singolo
YOLO (Guardi solo una volta)
Reti neurali convoluzionali
Nel resto di questo articolo, vedremo cos'è esattamente ImageAI e come usarlo per eseguire il rilevamento di oggetti.
La libreria ImageAI
ImageAI è una libreria Python creata per consentire agli sviluppatori di creare applicazioni e sistemi con capacità di apprendimento approfondito e di visione artificiale autonome utilizzando poche righe di codice diretto. ImageAI contiene un'implementazione Python di quasi tutti gli algoritmi di apprendimento profondo all'avanguardia come RetinaNet , YOLOv3 e TinyYOLOv3.
ImageAI utilizza diverse API che funzionano offline: ha API di rilevamento di oggetti, rilevamento di video e rilevamento di oggetti che possono essere chiamate senza accesso a Internet. ImageAI utilizza un modello pre-addestrato e può essere facilmente personalizzato.
La ObjectDetectionclasse della libreria ImageAI contiene funzioni per eseguire il rilevamento di oggetti su qualsiasi immagine o insieme di immagini, utilizzando modelli pre-addestrati. Con ImageAI, puoi rilevare e riconoscere 80 diversi tipi di oggetti comuni e quotidiani.
Configurazione dell'ambiente di sviluppo
In questa parte del tutorial, lavoreremo attraverso l'installazione di ImageAI.
Per utilizzare ImageAI è necessario installare alcune dipendenze. Il primo passo è avere Python installato sul tuo computer. Se non lo hai installato, o non sai come scaricare e gestire le librerie vai ai prerequisiti
Dopo aver installato Python sul tuo computer, installa le seguenti librerie usando pip:
TensorFlow
$ pip install tensorflow
$ pip3 install tensorflow # per Python3
OpenCV
$ pip install opencv-python
$ pip3 install opencv-python # per Python3
Keras
$ pip install keras
$ pip3 install keras # per Python3
ImageAI
$ pip install imageAI
$ pip3 install imageAI # per Python3
Ora scarica il file del modello TinyYOLOv3 che contiene il modello di classificazione che verrà utilizzato per il rilevamento degli oggetti.
Rilevamento di oggetti con ImageAI in 10 semplici step
Vediamo ora come utilizzare effettivamente la libreria ImageAI.
Spiegherò passo dopo passo come costruire il tuo primo modello di rilevamento di oggetti con ImageAI.
Step 1
Il nostro primo compito qui è creare le cartelle necessarie. Per questo tutorial abbiamo bisogno delle seguenti cartelle:
Rilevamento di oggetti : cartella principale
modelli : memorizza il modello pre-addestrato
input : memorizza il file immagine su cui si desidera eseguire il rilevamento degli oggetti
output : memorizza il file immagine con gli oggetti rilevati
Dopo aver creato le cartelle, la Directory principale dovrebbe contenere le seguenti sottocartelle:
CartellaPrincipale
├── input
├── models
└── output
3 directories, 0 files
Step 2
Apri il tuo editor di testo preferito per scrivere codice Python e crea un nuovo file detector.py .
Step 3
Importa la ObjectDetectionclasse dalla libreria ImageAI.
from imageai.Detection import ObjectDetection
Step 4
Ora che hai importato la libreria imageAI e la ObjectDetectionclasse, la prossima cosa è creare un'istanza della classe ObjectDetection, come mostrato qui:
detector = ObjectDetection()
Step 5
Specifichiamo il percorso dalla nostra immagine di input, immagine di output e modello.
model_path = "./models/yolo-tiny.h5"
input_path = "./input/test45.jpg"
output_path = "./output/newimage.jpg"
Step 6
Dopo aver istanziato la ObjectDetectionclasse, ora possiamo chiamare varie funzioni dalla classe. La classe contiene le seguenti funzioni di chiamare modelli pre-addestrati: setModelTypeAsRetinaNet(), setModelTypeAsYOLOv3(), e setModelTypeAsTinyYOLOv3().
Ai fini di questo tutorial, userò il TinyYOLOv3model pre-addestrato e quindi useremo la setModelTypeAsTinyYOLOv3() funzione per caricare il nostro modello.
detector.setModelTypeAsTinyYOLOv3()
Step 7
Successivamente, chiameremo la funzione setModelPath(). Questa funzione accetta una stringa che contiene il percorso del modello pre-addestrato:
detector.setModelPath(model_path)
Step 8
Questo passaggio chiama la funzione loadModel() . Carica il modello dal percorso specificato sopra utilizzando il setModelPath() metodo di classe.
detector.loadModel()
Step 9
Per rilevare gli oggetti nell'immagine, dobbiamo chiamare la detectObjectsFromImage funzione utilizzando il detector object che abbiamo creato nella sezione precedente.
Questa funzione richiede due argomenti: input_imagee output_image_path.
input_image è il percorso in cui si trova l'immagine che stiamo rilevando, mentre il output_image_path è il percorso per memorizzare l'immagine con gli oggetti rilevati. Questa funzione restituisce un dizionario che contiene i nomi e le probabilità percentuali di tutti gli oggetti rilevati nell'immagine.
detection = detector.detectObjectsFromImage(input_image=input_path, output_image_path=output_path)
Step 10
È possibile accedere agli elementi del dizionario attraversando ogni elemento nel dizionario.
for eachItem in detection:
print(eachItem["name"] , " : ", eachItem["percentage_probability"])
Codice completo per il rilevamento di oggetti
Per scaricare il codice gratuitamente, registrati nel portale con Facebook, Google o con la tua email e sblocca l'area dedicata ai download dei progetti.
Scorri in fondo alla pagina per Registrarti o Accedere se ancora non l'hai fatto.
Clicca qui per accedere a l'area download progetti A.I.
Nell'output è possibile vedere il nome di ogni oggetto rilevato insieme alla sua percentuale di probabilità come mostrato di seguito: Output
car : 53.66367697715759
person : 75.88377594947815
person : 51.0115921497345
person : 84.292072057724
Immagine originale:
L'immagine originale, ovvero "img.jpg", aveva questo aspetto:
Immagine con rilevamento di oggetti:
Dopo il rilevamento dell'oggetto, l'immagine risultante ha questo aspetto:
Puoi vedere che ImageAI ha identificato con successo auto e persone nell'immagine.
Conclusione
Il rilevamento di oggetti è una delle attività di computervision più comuni. Questo articolo spiega come eseguire il rilevamento di oggetti in Python utilizzando la libreria ImageAI con l'aiuto di un esempio pratico di DeepLearning.
Vuoi Scaricare il progetto Gratis ?
Accedi o registrati al portale
Clicca qui e scarica il progetto
Grazie mille per la lettura, spero che il piccolo esempio ti abbia fatto capire la potenza di questa libreria abbinata alla semplicità di python. Scrivi qui nei commenti possibili applicazioni o estensioni di questo frammento di codice.
Vuoi scaricare il codice completo Registrati e nel portale e clicca qui ! E' Gratis.
Per eventuali problemi nel codice scrivi sul nostro Forum.
Veramente, veramente interessante. Mi chiedo se è possibile inserire oltre alla % di corrispondenza anche la dimensione dell'output: ad esempio se in un insieme di immagini volessi individuare quelle che si ripetono desidererei sapere la dimensione del file
Devo dire che non immaginavo si potesse così velocemente mettere in piedi un progetto simile. Complimenti articolo veramente interessante.
... "in sole 13 righe di codice"... è un modo carino per descrivere la punta di un grande iceberg... la Computer Vision è sicuramente una branca della A.I. molto affascinante... e complessa. Complimenti per questa introduzione.