Home
Su di me
Skills
Curriculum
Certificazioni
Progetti
Tutti i progetti
Progetti
Tutti i progetti
Contatti
Air Canva
Home
Progetti
Air Canva
Air Canva
La computer vision è un campo dell'intelligenza artificiale che consente ai computer e ai sistemi di ricavare informazioni significative da immagini digitali, video e altri input visivi e di intraprendere azioni o formulare raccomandazioni sulla base di tali informazioni. Se l'intelligenza artificiale consente ai computer di pensare, la computer vision permette loro di vedere, osservare e capire.
La computer vision addestra le macchine a svolgere queste funzioni, ma deve farlo in tempi molto più brevi con telecamere, dati e algoritmi piuttosto che con retine, nervi ottici e corteccia visiva. Poiché un sistema addestrato a ispezionare prodotti o a sorvegliare un impianto di produzione può analizzare migliaia di prodotti o processi al minuto, notando difetti o problemi impercettibili, può superare rapidamente le capacità umane.
Esegue analisi dei dati più e più volte fino a discernere le distinzioni e, infine, a riconoscere le immagini. Ad esempio, per addestrare un computer a riconoscere i pneumatici di un'automobile, è necessario alimentarlo con una grande quantità di immagini di pneumatici e di elementi ad essi correlati per imparare le differenze e riconoscere un pneumatico, soprattutto se privo di difetti.
A questo scopo si utilizzano due tecnologie essenziali: un tipo di apprendimento automatico chiamato deep learning e una rete neurale convoluzionale (CNN).
Una Convolutional Neural Network, nota anche come CNN o ConvNet, è una classe delle neural networks specializzata nell'elaborazione di dati con una topologia a griglia, come le immagini. Un'immagine digitale è una rappresentazione binaria di dati visivi. Contiene una serie di pixel disposti in modo reticolare, con valori di pixel che indicano la luminosità e il colore di ciascun pixel.
Questo script fornisce un'air canva, in modo che si possa disegnare usando le dita su una lavagna virtuale.
A questo scopo, vengono definiti due moduli:
'main.py'
che è responsabile del 'disegno' sulla lavagna virtuale
'hand_tracking.py'
che è responsabile della rilevazione e del tracciamento delle dita della mano.
Nel modulo
hand_tracking
, il codice implementa le librerie
'OpenCV'
e
'Mediapipe'
per riconoscere le immagini. Viene definita la classe
'HandDetector'
per trovare le mani in un'immagine e calcolare la posizione delle landmarks delle mani. La classe
HandDetector
contiene i seguenti metodi:
'__init__'
: inizializza le variabili
mode=False
che identifica il modo di riconoscimento delle immagini se sono statiche oppure uno streaming,
maxHands=2
che identifica il massimo numero di mani da rilevare,
detectionCon=0.5
che identifica il minore score per dichiarare con successo che è stata conosciuta una mano,
trackCon=0.5
che identifica il minimo score per il quale un landmark viene riconosciuto cono successo,
complexity=1
che identifica la complessità del modello di riferimento della mano.
'findHands'
: prende un'immagine come input e la converte da BGR a RGB. Successivamente, elabora l'immagine per trovare le mani e disegna le landmarks sulle mani rilevate.
'findPosition'
: prende un'immagine, il numero della mano e un valore booleano come input e restituisce una lista di posizioni landmarks. La funzione trova la posizione delle mani e disegna le landmarks sull'immagine.
'fingersUp'
: controlla se l'estremità delle dita è più alta del landmark precedente e restituisce una lista di $1$ o $0$ a seconda della posizione delle dita.
main
il codice acquisisce il video dalla webcam, trova le landmarks sulle mani, calcola la posizione delle mani, ridimensiona l'immagine alle dimensioni dello schermo, capovolge l'immagine orizzontalmente, calcola i fotogrammi al secondo, disegna i fotogrammi al secondo sull'immagine, mostra l'immagine e controlla se l'utente ha premuto il tasto "q". Se l'utente ha premuto il tasto "q", il programma si ferma.
Nel modulo
main
troviamo il modulo
'cv2
(OpenCV) per acquisire video dalla webcam, il modulo
'numpy'
per lavorare con gli array di immagini e il modulo
'os'
per ottenere la lista di immagini dalla cartella
'header'
usate per creare la testata dell'air canva. Inoltre, importa anche due moduli personalizzati
'utils'
e
'hand_tracking'
. Lo script cattura il video dalla webcam, quindi rileva le mani nel frame utilizzando l'oggetto
HandDetector
definito nel modulo
hand_tracking
. Successivamente, utilizzando le coordinate delle dita della mano rilevate, il codice rileva il numero di dita alzate e compie diverse azioni in base al numero di dita alzate.
Se l'utente solleva solo il dito indice, allora può disegnare e scrivere sull'air canva. Il colore predefinito è il blu.
Se l'utente solleva il dito indice e medio (mantenendo giù il pollice), il programma va in modalità 'selezione'. In questo caso l'utente smetterà di scrivere e potrà andare nella parte alta della finestra. Si aprirà il menù a tendina nel quale l'utente potrà cambiare colore, cancellare, salvare l'immagine oppure pulire la lavagna.
Se vengono rilevati solo il pollice e l'indice, si può andare a modificare la dimensione del 'pennello': se si aumenta la distanza tra pollice e indice, aumenterà la dimensione del pennello, mentre se si avvicinano, diminuirà la dimensione del pennello.
Se si sollevano il pollice, l'indice e il medio contemporaneamente, il programma riconoscerà il comando del salvare senza dover andare a selezionare dal menù. In questo caso verrà attivato un timer di 3 secondi, in modo che l'utente possa stabilizzarsi. Verranno salvate due immagini: una così come vede l'immagine l'utente, ovvero con lo sfondo; una con il disengo e lo sfondo bianco. L'immagine salvata sarà in formato
'.jpg'
.
Se si sollevano tutti e cinque le dita, Il programma capisce che deve arrestarsi e si chiude.
Il modulo
numpy
serve per creare le immagini: a seconda dei valori assegnati agli array, una immagine viene inizializzata vuota sulla quale si andrà a diesgnare, il tracciato e una immagine bianca utilizzata per salvare l'immagine finale. Il programma utilizza anche il modulo
'time'
per gestire il timer e il modulo
'math'
per calcolare la distanza tra il pollice e l'indice. Le immagini vengono gestite in questo modo:
Vengono inizializzate due immagini una bianca
np.ones((720, 1280,3),np.uint8)*255
che non subirà variazioni nel processo e una nera
np.zeros((720, 1280, 3), np.uint8)
che servirà per rendere il background trasparente e visualizzare l'utente mentre scrive.
Successivamente tramite il modulo
cv2
viene letta l'immagine in tempo reale dalla telecamera
Si va a disegnare sull'immagine in tempo reale, su quella con sfondo bianco e quella su sfondo nero.
Si converte l'immagine con sfondo nero in scala di grigi
Viene fatta una trasformazione tramite la funzione
'threshold'
di cv2 in modo che i valori dell'array che sono sotto la soglia vengono impostati automaticamente a nero, mentre quelli che sono sopra al bianco.
Viene convertita l'immagine al BRG.
Infine viene sottratta questa immagine a quella di partenza della videocamera, rendendo così lo sfondo trasparente.
Informazioni
Categoria
: ML
Url progetto
:
About
: Creato una Air Canva in modo da poter disegnare usando le dita.
La computer vision è un campo dell'intelligenza artificiale che consente ai computer e ai sistemi di ricavare informazioni significative da immagini digitali, video e altri input visivi e di intraprendere azioni o formulare raccomandazioni sulla base di tali informazioni. Se l'intelligenza artificiale consente ai computer di pensare, la computer vision permette loro di vedere, osservare e capire.
La computer vision addestra le macchine a svolgere queste funzioni, ma deve farlo in tempi molto più brevi con telecamere, dati e algoritmi piuttosto che con retine, nervi ottici e corteccia visiva. Poiché un sistema addestrato a ispezionare prodotti o a sorvegliare un impianto di produzione può analizzare migliaia di prodotti o processi al minuto, notando difetti o problemi impercettibili, può superare rapidamente le capacità umane.
Esegue analisi dei dati più e più volte fino a discernere le distinzioni e, infine, a riconoscere le immagini. Ad esempio, per addestrare un computer a riconoscere i pneumatici di un'automobile, è necessario alimentarlo con una grande quantità di immagini di pneumatici e di elementi ad essi correlati per imparare le differenze e riconoscere un pneumatico, soprattutto se privo di difetti.
A questo scopo si utilizzano due tecnologie essenziali: un tipo di apprendimento automatico chiamato deep learning e una rete neurale convoluzionale (CNN).
Una Convolutional Neural Network, nota anche come CNN o ConvNet, è una classe delle neural networks specializzata nell'elaborazione di dati con una topologia a griglia, come le immagini. Un'immagine digitale è una rappresentazione binaria di dati visivi. Contiene una serie di pixel disposti in modo reticolare, con valori di pixel che indicano la luminosità e il colore di ciascun pixel.
Questo script fornisce un'air canva, in modo che si possa disegnare usando le dita su una lavagna virtuale.
A questo scopo, vengono definiti due moduli:
'main.py'
che è responsabile del 'disegno' sulla lavagna virtuale
'hand_tracking.py'
che è responsabile della rilevazione e del tracciamento delle dita della mano.
Nel modulo
hand_tracking
, il codice implementa le librerie
'OpenCV'
e
'Mediapipe'
per riconoscere le immagini. Viene definita la classe
'HandDetector'
per trovare le mani in un'immagine e calcolare la posizione delle landmarks delle mani. La classe
HandDetector
contiene i seguenti metodi:
'__init__'
: inizializza le variabili
mode=False
che identifica il modo di riconoscimento delle immagini se sono statiche oppure uno streaming,
maxHands=2
che identifica il massimo numero di mani da rilevare,
detectionCon=0.5
che identifica il minore score per dichiarare con successo che è stata conosciuta una mano,
trackCon=0.5
che identifica il minimo score per il quale un landmark viene riconosciuto cono successo,
complexity=1
che identifica la complessità del modello di riferimento della mano.
'findHands'
: prende un'immagine come input e la converte da BGR a RGB. Successivamente, elabora l'immagine per trovare le mani e disegna le landmarks sulle mani rilevate.
'findPosition'
: prende un'immagine, il numero della mano e un valore booleano come input e restituisce una lista di posizioni landmarks. La funzione trova la posizione delle mani e disegna le landmarks sull'immagine.
'fingersUp'
: controlla se l'estremità delle dita è più alta del landmark precedente e restituisce una lista di $1$ o $0$ a seconda della posizione delle dita.
main
il codice acquisisce il video dalla webcam, trova le landmarks sulle mani, calcola la posizione delle mani, ridimensiona l'immagine alle dimensioni dello schermo, capovolge l'immagine orizzontalmente, calcola i fotogrammi al secondo, disegna i fotogrammi al secondo sull'immagine, mostra l'immagine e controlla se l'utente ha premuto il tasto "q". Se l'utente ha premuto il tasto "q", il programma si ferma.
Nel modulo
main
troviamo il modulo
'cv2
(OpenCV) per acquisire video dalla webcam, il modulo
'numpy'
per lavorare con gli array di immagini e il modulo
'os'
per ottenere la lista di immagini dalla cartella
'header'
usate per creare la testata dell'air canva. Inoltre, importa anche due moduli personalizzati
'utils'
e
'hand_tracking'
. Lo script cattura il video dalla webcam, quindi rileva le mani nel frame utilizzando l'oggetto
HandDetector
definito nel modulo
hand_tracking
. Successivamente, utilizzando le coordinate delle dita della mano rilevate, il codice rileva il numero di dita alzate e compie diverse azioni in base al numero di dita alzate.
Se l'utente solleva solo il dito indice, allora può disegnare e scrivere sull'air canva. Il colore predefinito è il blu.
Se l'utente solleva il dito indice e medio (mantenendo giù il pollice), il programma va in modalità 'selezione'. In questo caso l'utente smetterà di scrivere e potrà andare nella parte alta della finestra. Si aprirà il menù a tendina nel quale l'utente potrà cambiare colore, cancellare, salvare l'immagine oppure pulire la lavagna.
Se vengono rilevati solo il pollice e l'indice, si può andare a modificare la dimensione del 'pennello': se si aumenta la distanza tra pollice e indice, aumenterà la dimensione del pennello, mentre se si avvicinano, diminuirà la dimensione del pennello.
Se si sollevano il pollice, l'indice e il medio contemporaneamente, il programma riconoscerà il comando del salvare senza dover andare a selezionare dal menù. In questo caso verrà attivato un timer di 3 secondi, in modo che l'utente possa stabilizzarsi. Verranno salvate due immagini: una così come vede l'immagine l'utente, ovvero con lo sfondo; una con il disengo e lo sfondo bianco. L'immagine salvata sarà in formato
'.jpg'
.
Se si sollevano tutti e cinque le dita, Il programma capisce che deve arrestarsi e si chiude.
Il modulo
numpy
serve per creare le immagini: a seconda dei valori assegnati agli array, una immagine viene inizializzata vuota sulla quale si andrà a diesgnare, il tracciato e una immagine bianca utilizzata per salvare l'immagine finale. Il programma utilizza anche il modulo
'time'
per gestire il timer e il modulo
'math'
per calcolare la distanza tra il pollice e l'indice. Le immagini vengono gestite in questo modo:
Vengono inizializzate due immagini una bianca
np.ones((720, 1280,3),np.uint8)*255
che non subirà variazioni nel processo e una nera
np.zeros((720, 1280, 3), np.uint8)
che servirà per rendere il background trasparente e visualizzare l'utente mentre scrive.
Successivamente tramite il modulo
cv2
viene letta l'immagine in tempo reale dalla telecamera
Si va a disegnare sull'immagine in tempo reale, su quella con sfondo bianco e quella su sfondo nero.
Si converte l'immagine con sfondo nero in scala di grigi
Viene fatta una trasformazione tramite la funzione
'threshold'
di cv2 in modo che i valori dell'array che sono sotto la soglia vengono impostati automaticamente a nero, mentre quelli che sono sopra al bianco.
Viene convertita l'immagine al BRG.
Infine viene sottratta questa immagine a quella di partenza della videocamera, rendendo così lo sfondo trasparente.