Sommario:
- Passaggio 1: video
- Passaggio 2: hardware
- Passaggio 3: pezzo di codice
- Passaggio 4: ottenere immagini
- Passaggio 5: strumenti e lingua utilizzati
- Passaggio 6: preparazione del set di dati per la formazione
- Passaggio 7: rete neurale
- Passaggio 8: formazione della rete neurale
- Passaggio 9: test della rete neurale
- Passaggio 10: risultato e parte successiva…
- Passaggio 11: rilevamento di oggetti
- Passaggio 12: video
- Passaggio 13: etichettatura
- Passaggio 14: GUI di etichettatura
- Passaggio 15: Biblioteche necessarie
- Passaggio 16: celle rimanenti
Video: È una mano? (Fotocamera Raspberry Pi + Rete Neurale) Parte 1/2: 16 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Qualche giorno fa mi sono infortunato al polso destro in palestra. In seguito, ogni volta che ho usato il mouse del mio computer, ha causato molto dolore a causa dell'angolo ripido del polso.
È stato allora che mi è venuto in mente "non sarebbe bello se potessimo convertire qualsiasi superficie in un trackpad" e non so perché ma per qualche motivo ho pensato a lei, al film HER, ve lo farò capire ragazzi fuori. È stato un pensiero eccitante ma non sapevo se potevo farlo, ho deciso di provarlo.
Questo articolo cattura ciò che ne è uscito.
Prima di iniziare ho un disclaimer-
' Alla fine di questo articolo, non sono riuscito a convertire alcuna superficie in un trackpad, ma non ho imparato molto e ho aggiunto grandi strumenti al mio arsenale. Spero che succeda anche a te'
Iniziamo.
Passaggio 1: video
Ecco un piccolo video di 5 minuti che copre tutti i passaggi. Guarda.
Passaggio 2: hardware
Ho installato un Raspberry Pi insieme a una fotocamera Raspberry Pi ad un'altezza di circa 45 cm. Questo ci dà un'area di monitoraggio di circa 25x25 cm sotto la telecamera.
La fotocamera Raspberry Pi e Raspberry Pi sono facilmente disponibili, basta cercarla su Google e dovresti essere in grado di trovare un negozio locale.
Dai un'occhiata a questo link o a una delle mie playlist Raspberry pi per far funzionare il tuo pi senza testa.
Seguendo questa configurazione, abbiamo bisogno di un pezzo di codice che decida se c'è una mano nell'area che la telecamera sta monitorando e, in caso affermativo, dove si trova.
Passaggio 3: pezzo di codice
Il pezzo di codice che ci consente di decidere se c'è una mano nell'area di interesse utilizza qualcosa chiamato Rete neurale. Rientrano nella categoria della programmazione in cui non definiamo regole per prendere decisioni, ma mostriamo alla rete neurale dati sufficienti per determinare le regole da sola.
Nel nostro caso, invece di codificare l'aspetto della mano, mostriamo le immagini della rete neurale catturate da raspberry pi che contiene la mano e che non contiene la mano. Questa fase è chiamata training della rete neurale e le immagini utilizzate sono chiamate training dataset.
Passaggio 4: ottenere immagini
Ho effettuato l'accesso remoto al mio Raspberry Pi e ho catturato un sacco di immagini usando il seguente comando.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
Ho catturato 80 immagini con la mano e 80 immagini che non contengono la mano. 160 immagini non sono sufficienti per addestrare adeguatamente una rete neurale, ma dovrebbero essere sufficienti per la verifica del concetto.
Oltre a 160 immagini, ne ho catturate altre 20 per testare la nostra rete una volta addestrata.
Una volta che il set di dati era pronto, ho iniziato a scrivere il codice per la rete neurale.
Passaggio 5: strumenti e lingua utilizzati
Ho scritto la mia rete neurale nella libreria di deep learning Python chiamata Keras e il codice è scritto sul notebook jupyter da anaconda navigator.
Passaggio 6: preparazione del set di dati per la formazione
Innanzitutto (Immagine #1) ho incluso tutte le librerie necessarie per questo progetto, che include PIL, matplotlib, numpy, os e Keras. Nella seconda cella del notebook Python (Immagine n. 2) definisco i percorsi per il set di dati e stampo il conteggio dei campioni. Ora dobbiamo caricare tutte le immagini in un array numpy, quindi nella terza cella (Immagine #2) ho creato un array numpy di 82 (numero di campioni manuali) + 75 (numero di campioni non manuali) cioè 157x100x100x3. 157 è il numero totale di immagini che ho, 100x100 è la nostra dimensione dell'immagine ridimensionata e 3 è per i livelli di colore rosso, verde e blu nell'immagine.
Nella quarta e quinta cella, carichiamo immagini che contengono mano seguite da immagini che non contengono mano nell'array numpy. Nella sesta cella, dividiamo ogni valore per 255, limitando così l'intervallo di valori da 0 a 1. (Immagine n. 3)
Mi scuso se le immagini allegate non sono abbastanza buone. Ecco il link al repository GITHUB per guardare il codice. Non dimenticare di sostituire i nomi dei percorsi delle directory con il tuo percorso:).
Andando avanti.
Quindi dobbiamo etichettare ogni immagine, quindi creiamo un array numpy unidimensionale di 157 di lunghezza. Le prime 82 voci sono impostate su 1 e le restanti 75 voci sono impostate su 0 trasmettendo la rete neurale che le prime 82 immagini provengono da una classe e le rimanenti da un'altra. (Immagine #4)
Ora creiamo una rete neurale.
Passaggio 7: rete neurale
Nella nona cella, definiamo la nostra rete neurale. Contiene tre ripetizioni di layer di convoluzione seguite da layer maxpool con rispettivamente 8, 12 e 16 filtri di convoluzione. In seguito abbiamo due reti neurali dense. Allego due immagini per questo passaggio. Il primo è lo snap del codice che crea la rete neurale e il secondo è la rappresentazione pittorica della rete neurale con la dimensione dell'output e le operazioni annotate.
Passaggio 8: formazione della rete neurale
Nella decima cella, configuriamo l'ottimizzatore di rete neurale su "adam" e la funzione di perdita su "binary_crossentropy". Svolgono un ruolo importante nel modo in cui vengono aggiornati i pesi di rete. Alla fine, quando eseguiamo l'undicesima cella, la rete neurale inizia ad allenarsi. Mentre la rete si sta allenando, osserva la funzione di perdita e assicurati che stia diminuendo.
Passaggio 9: test della rete neurale
Una volta che la rete neurale è stata addestrata, dobbiamo preparare il set di dati di test. Ripetiamo la procedura eseguita per preparare il set di allenamento nella 3a, 4a, 5a e 6a cella sui dati di test per creare il set di test. Prepariamo anche l'etichetta per il set di test, ma questa volta eseguiamo il modello su questi set di dati per ottenere previsioni e non per eseguire l'addestramento.
Passaggio 10: risultato e parte successiva…
Ho ottenuto una precisione del test dell'88%, ma prendilo con un pizzico di sale poiché il set di dati utilizzato per addestrare e testare questo modello è molto, molto, molto piccolo e inadeguato per addestrare correttamente questo modello.
Comunque spero che questo articolo ti sia piaciuto. Il mio intento dietro questo esercizio non è ancora completo e fai attenzione alla seconda parte. Lo caricherò appena possibile.
Nella parte successiva, addestreremo un'altra rete neurale che ci dirà la posizione della mano in un'immagine rilevata dalla mano.
Tutte le domande sono benvenute.
Se qualcuno è interessato a utilizzare il mio piccolo set di dati, me lo faccia sapere nei commenti. lo metterò a disposizione.
Grazie per aver letto. Ci vediamo presto con la seconda parte fino ad allora perché non crei e addestri una rete neurale.
Modifica: - I passaggi successivi sono per la seconda parte.
Passaggio 11: rilevamento di oggetti
Nei passaggi precedenti abbiamo creato un NN che ci dice se l'immagine di prova contiene la mano o meno. Bene e poi? Se NN classifica l'immagine come mano contenente, vorremmo conoscere la posizione della mano. Questo è chiamato rilevamento di oggetti nella letteratura sulla visione artificiale. Quindi addestriamo NN che fa esattamente lo stesso.
Passaggio 12: video
Un video di 3 minuti che spiega tutti i passaggi rimanenti. Guarda.
Passaggio 13: etichettatura
Se vuoi che una rete neurale emetta la posizione della mano, dobbiamo addestrarla in questo modo, cioè a differenza della rete neurale precedente in cui ogni immagine era etichettata come con la mano e senza mano. Questa volta tutte le immagini con la mano avranno quattro etichette corrispondenti alle coordinate diagonali del riquadro di delimitazione intorno alla mano in quell'immagine.
L'immagine allegata del file CSV contiene un'etichetta per ogni immagine. Si prega di notare che le coordinate sono normalizzate con la dimensione dell'immagine, ovvero se la coordinata X superiore è al 320° pixel nell'immagine con una larghezza di 640 pixel, la etichetteremo come 0,5.
Passaggio 14: GUI di etichettatura
Ti starai chiedendo come sono riuscito a etichettare tutte le 82 immagini, beh, ho scritto una GUI in Python che mi ha aiutato in questo compito. Una volta caricata l'immagine nella GUI. Ho fatto clic con il tasto sinistro sulla coordinata superiore e clic con il tasto destro sulla coordinata inferiore del probabile riquadro di delimitazione attorno alla mano. Queste coordinate vengono quindi scritte in un file dopo che faccio clic sul pulsante Avanti per caricare l'immagine successiva. Ho ripetuto questa procedura per tutti gli 82 treni e le 4 immagini di prova. Una volta che le etichette erano pronte, era tempo di allenamento.
Passaggio 15: Biblioteche necessarie
Per prima cosa dobbiamo caricare tutte le librerie necessarie. Che include
- PIL per la manipolazione delle immagini,
- matplotlib per la stampa,
- numpy per il funzionamento della matrice,
- os per funzionalità dipendenti dal sistema operativo e
- keras per la rete neurale.
Passaggio 16: celle rimanenti
Nella 2a, 3a, 4a e 5a cella carichiamo le immagini nell'array numpy e creiamo un array quadridimensionale dal file csv per fungere da etichette. Nella cella numero 6 creiamo la nostra rete neurale. La sua architettura è identica alla rete neurale utilizzata per la classificazione, tranne la dimensione del livello di output che è 4 e non 1. Un'altra differenza deriva dalla funzione di perdita utilizzata che è l'errore quadratico medio. Nella cella numero 8 iniziamo l'addestramento della nostra rete neurale una volta addestrato, ho eseguito questo modello sul set di test per ottenere previsioni per il riquadro di delimitazione sulle coordinate sovrapposte del riquadro di delimitazione che sembravano abbastanza accurate.
Grazie per aver letto.
Consigliato:
Planetario alimentato da rete neurale che utilizza Python, Electron e Keras: 8 passaggi
Planetario alimentato da rete neurale utilizzando Python, Electron e Keras: in questo tutorial, ti mostrerò come ho scritto un generatore di planetari 3D automatico, usando Python ed Electron. Il video sopra mostra uno dei planetari casuali generati dal programma. ** Nota: questo programma non è in alcun modo perfetto e in qualche punto
Inverter collegato alla rete fai-da-te (non alimenta la rete) Alternativa UPS: 7 passaggi (con immagini)
Alternativa UPS con inverter collegato alla rete fai-da-te (non alimenta la rete): questo è un post di follow-up dal mio altro Instructable sulla creazione di un inverter collegato alla rete che non alimenta la rete, poiché ora è sempre possibile farlo in alcune aree come un progetto fai-da-te e alcuni luoghi non consentono di alimentare lì g
Controller di rete IoT. Parte 9: IoT, automazione domestica: 10 passaggi (con immagini)
Controller di rete IoT. Parte 9: IoT, automazione domestica: Dichiarazione di non responsabilitàLEGGERE PRIMA QUESTO Questo Instructable descrive in dettaglio un progetto che utilizza l'alimentazione di rete (in questo caso UK 240VAC RMS), mentre è stata prestata ogni attenzione per utilizzare pratiche sicure e buoni principi di progettazione, c'è sempre il rischio di potenzialmente letale eleggere
Robot di rete neurale Arduino: 21 passaggi (con immagini)
Robot di rete neurale Arduino: questa istruzione si basa su una serie di 3 parti che ho realizzato per il canale YouTube Make che mostra esattamente come prototipare, progettare, assemblare e programmare il tuo robot di rete neurale Arduino. Dopo aver visto la serie completa, dovresti avere una migliore
Adattatore di rete wireless resistente alle intemperie utilizzando una bottiglia d'acqua: 4 passaggi (con immagini)
Adattatore di rete wireless esposto alle intemperie utilizzando una bottiglia d'acqua: mentre ero in Iraq, ho usato una bottiglia d'acqua per rendere il mio adattatore di rete wireless esposto alle intemperie. È una procedura semplice, ma molto efficace. Ovviamente, questo istruttore sarà molto utile per i servizi di uomini e donne in Medio Oriente, ma potrebbe anche essere utile