Sommario:

Bacchetta di Harry Potter funzionante con visione artificiale: 8 passaggi (con immagini)
Bacchetta di Harry Potter funzionante con visione artificiale: 8 passaggi (con immagini)

Video: Bacchetta di Harry Potter funzionante con visione artificiale: 8 passaggi (con immagini)

Video: Bacchetta di Harry Potter funzionante con visione artificiale: 8 passaggi (con immagini)
Video: RETROSPETTIVA - HARRY POTTER E IL PRIGIONIERO DI AZKABAN 2024, Novembre
Anonim
Image
Image
Bacchetta di Harry Potter funzionante con visione artificiale
Bacchetta di Harry Potter funzionante con visione artificiale
Bacchetta di Harry Potter funzionante con visione artificiale
Bacchetta di Harry Potter funzionante con visione artificiale
Bacchetta di Harry Potter funzionante con visione artificiale
Bacchetta di Harry Potter funzionante con visione artificiale

"Qualsiasi tecnologia sufficientemente avanzata è indistinguibile dalla magia" - Arthur C. Clarke

Alcuni mesi fa mio fratello ha visitato il Giappone e ha avuto una vera esperienza magica nel mondo magico di Harry Potter agli Universal Studios, resa possibile dalla tecnologia della Computer Vision.

Al Wizarding World of Harry Potter negli Universal Studios i turisti possono eseguire la "vera magia" in determinati luoghi (dove è installato il sistema di motion capture) utilizzando bacchette appositamente realizzate con perline retroriflettenti sulla punta. Le bacchette possono essere acquistate da un vero negozio di Olivander che sono esattamente come quelle mostrate nei film di Harry Potter ma ricorda: "È la bacchetta che sceglie il mago":P

In quei determinati luoghi se la persona esegue un particolare gesto con la bacchetta, il sistema di motion capture riconosce il gesto e tutti i gesti corrispondono a un certo incantesimo che provoca determinate attività nell'area circostante come accendere la fontana, ecc.

Quindi, in questo Instructable mostrerò come puoi creare un sistema di motion capture economico ed efficace a casa per eseguire la "vera magia" aprendo una scatola con il tocco della tua bacchetta:D usando solo una normale telecamera per la visione notturna, alcuni dispositivi elettronici, e un po' di codice Python utilizzando la libreria OpenCV Computer Vision e Machine Learning!!!

Passaggio 1: l'idea di base e le parti necessarie

L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie
L'idea di base e le parti necessarie

Le bacchette che vengono acquistate dal mondo magico di Harry Potter negli Universal Studios hanno una perlina retroriflettente sulla punta. Quelle sfere retroriflettenti riflettono una grande quantità di luce infrarossa che viene emessa dalla fotocamera nel sistema di cattura del movimento. Quindi, ciò che noi umani percepiamo come una punta non così caratteristica della bacchetta che si muove nell'aria, il sistema di cattura del movimento percepisce come un blob luminoso che può essere facilmente isolato nel flusso video e tracciato per riconoscere lo schema disegnato dalla persona ed eseguire l'azione richiesta. Tutta questa elaborazione avviene in tempo reale e si avvale di Computer Vision e Machine Learning.

Una semplice fotocamera per la visione notturna può essere utilizzata come fotocamera per l'acquisizione del movimento poiché emette anche luce a infrarossi che non è visibile agli umani ma può essere vista chiaramente con una fotocamera che non ha filtro a infrarossi. Quindi, il flusso video dalla telecamera viene immesso in un Raspberry Pi che ha un programma Python che esegue OpenCV che viene utilizzato per rilevare, isolare e tracciare la punta della bacchetta. Quindi utilizziamo l'algoritmo SVM (Simple Vector Machine) di Machine Learning per riconoscere il pattern disegnato e di conseguenza controllare i GPIO del raspberry pi per eseguire alcune attività.

I materiali richiesti:

1) Un Raspberry Pi 3 modello B e gli accessori necessari come tastiera e mouse

2) Modulo fotocamera Raspberry Pi NoIR (senza infrarossi)

3) Bacchetta di Harry Potter con catarifrangente sulla punta: non preoccuparti se non ne hai uno. Si può usare qualsiasi cosa con un catarifrangente. Quindi, puoi usare qualsiasi bastoncino simile a una bacchetta e applicare nastro catarifrangente, vernice o perline sulla punta e dovrebbe funzionare come mostrato nel video di William Osman: Guarda il video

4) 10 LED infrarossi

5) Una stampante 3D e un filamento PLA a tua scelta

6) Adattatore da muro 12V - 1A e jack CC

7) Un servomotore

8) Una vecchia scatola e un raggio della ruota di un ciclo

9) Una pistola per colla a caldo

10) Stampe di alcuni loghi e immagini relativi a Harry Potter su un foglio di carta lucido

11) Lenzuola di velluto verde e giallo.

NOTA: ho anche provato a utilizzare una vecchia webcam normale per la visione notturna rimuovendo il suo filtro a infrarossi, ma ho finito per danneggiare/spostare la sua lente che ha influito notevolmente sulla qualità del video e non ho potuto utilizzarla. Ma se vuoi provarlo, puoi passare attraverso questo fantastico tutorial Clicca qui

Passaggio 2: installa il modulo OpenCV

Ora è il momento per il primo e probabilmente il passo più lungo di questo intero progetto: l'installazione e la costruzione del modulo OpenCV nel tuo Raspberry Pi.

L'installazione delle dipendenze per il modulo OpenCV non richiede molto tempo ma il processo di compilazione può richiedere fino a 2 o 3 ore!! Quindi, Allacciatevi!!:P

Ci sono molti tutorial online che puoi seguire per installare il modulo OpenCV 4.1.0. Ecco il link di quello che ho seguito: Clicca qui

NOTA: Consiglio vivamente di installare il modulo OpenCV in ambiente virtuale come mostrato nel tutorial in quanto preverrà vari tipi di conflitti che possono verificarsi a causa dell'installazione di dipendenze di moduli diversi o mentre si lavora con diverse versioni di Python.

Passaggio 3: stampa del supporto della fotocamera

Stampa del supporto della fotocamera
Stampa del supporto della fotocamera
Stampa del supporto della fotocamera
Stampa del supporto della fotocamera
Stampa del supporto della fotocamera
Stampa del supporto della fotocamera

La picamera NoIR non ha filtro a infrarossi, quindi può essere utilizzata come telecamera per la visione notturna, ma non ha ancora una fonte di luce a infrarossi. Tutte le telecamere per la visione notturna hanno la propria sorgente di luce a infrarossi che emettono raggi IR al buio che sono invisibili ad occhio nudo ma i raggi possono essere visti dalla telecamera senza filtro a infrarossi dopo essere stati riflessi da qualsiasi oggetto.

Quindi, fondamentalmente abbiamo bisogno di una sorgente di luce a infrarossi e qualcosa su cui montare la telecamera. Per questo ho progettato un semplice modello 3D di un oggetto su cui potremmo montare la telecamera che verrà circondata da 10 led IR in un cerchio. Il modello è stato creato con SketchUp e stampato con Black PLA in circa 40 minuti.

Passaggio 4: finitura del supporto della fotocamera

Finitura del supporto della fotocamera
Finitura del supporto della fotocamera
Finitura del supporto della fotocamera
Finitura del supporto della fotocamera
Finitura del supporto della fotocamera
Finitura del supporto della fotocamera

Dopo aver stampato il modello, l'ho prima carteggiato con una carta vetrata a grana 80 e poi ho iniziato a posizionare i led IR nei loro fori secondo lo schema sopra riportato.

Ho fissato i led al loro posto con della colla a caldo e poi ho unito i cavi positivo e negativo di due led consecutivi e poi li ho saldati per creare un collegamento in serie dei led.

Il cavo positivo di un led e il cavo negativo del led accanto ad esso nella parte inferiore sono stati lasciati non saldati per collegare i terminali positivo e negativo dell'adattatore a muro da 12 volt.

Passaggio 5: il modello di apprendimento automatico addestrato

Allo scopo di riconoscere la lettera disegnata da una persona, ho addestrato un modello di apprendimento automatico basato sull'algoritmo Support Vector Machine (SVM) utilizzando un set di dati di alfabeti inglesi scritti a mano che ho trovato qui. Gli SVM sono algoritmi di apprendimento automatico molto efficienti che possono fornire un'elevata precisione, circa il 99,2% in questo caso!! Maggiori informazioni sulle SVM

Il set di dati è sotto forma di file.csv che contiene 785 colonne e più di 300.000 righe in cui ogni riga rappresenta un'immagine 28 x 28 e ogni colonna in quella riga contiene il valore di quel pixel per quell'immagine con una colonna aggiuntiva in l'inizio che contiene l'etichetta, un numero da 0 a 25, ciascuno corrispondente ad una lettera inglese. Attraverso un semplice codice Python, ho suddiviso i dati per ottenere tutte le immagini solo per le 2 lettere (A e C) che volevo e ho addestrato un modello per loro.

Ho allegato il modello addestrato (alphabet_classifier.pkl) e anche il codice di addestramento sentiti libero di esaminarlo o apportare modifiche per addestrare il modello con lettere diverse o provare algoritmi diversi. Dopo aver eseguito il programma, salva automaticamente il modello addestrato nella stessa directory in cui è salvato il codice.

Passaggio 6: il codice che fa sì che tutto accada

Il codice che fa accadere tutto!!
Il codice che fa accadere tutto!!

Dopo aver creato il modello addestrato, il passaggio finale è scrivere un programma Python per il nostro Raspberry Pi che ci permetta di fare quanto segue:

  • Accedi al video dalla picamera in tempo reale
  • Rileva e traccia le macchie bianche (in questo caso la punta della bacchetta che si illumina durante la visione notturna) nel video
  • Inizia a tracciare il percorso del blob in movimento nel video dopo un evento di attivazione (spiegato di seguito)
  • Interrompi la traccia dopo un altro evento trigger (spiegato di seguito)
  • Restituisce l'ultimo fotogramma con il motivo disegnato dall'utente
  • Esegui la pre-elaborazione sul frame come la sogliatura, la rimozione del rumore, il ridimensionamento, ecc.
  • Utilizzare l'ultimo fotogramma elaborato per la previsione.
  • Esegui una sorta di magia controllando i GPIO del Raspberry Pi secondo la previsione

Per questo progetto ho creato una scatola a tema Harry Potter che posso aprire e chiudere utilizzando un servomotore controllato dal GPIO del Raspberry Pi. Poiché la lettera 'A' sta per 'Alohamora' (uno degli incantesimi più famosi dei film di Harry Potter che permette a un mago di aprire qualsiasi serratura!!), se una persona disegna la lettera A con la bacchetta, il pi greco comanda al servo di apri la scatola. Se la persona disegna la lettera "C" che sta per close (poiché non riuscivo a pensare a nessun incantesimo appropriato usato per chiudere o bloccare:P), il pi greco comanda al servo di chiudere la scatola.

Tutto il lavoro relativo all'elaborazione di immagini/video, come il rilevamento dei blob, il tracciamento del percorso del blob, la pre-elaborazione dell'ultimo fotogramma, ecc., viene svolto tramite il modulo OpenCV.

Per gli eventi trigger di cui sopra, vengono creati due cerchi sul video in tempo reale, un cerchio verde e uno rosso. Quando il blob entra nella regione all'interno del cerchio verde, il programma inizia a tracciare il percorso seguito dal blob dopo quel momento permettendo alla persona di iniziare a creare la lettera. Quando il blob raggiunge il cerchio rosso, il video si interrompe e l'ultimo fotogramma viene passato a una funzione che esegue la pre-elaborazione sul fotogramma per renderlo pronto per la previsione.

Ho allegato i file di codice in questo passaggio. Sentiti libero di esaminarlo e apportare le modifiche che desideri.

NOTA: ho dovuto creare due file Python separati che funzionano con diverse versioni di Python, uno che importa il modulo OpenCV (Python 2.7) e l'altro che importa il modulo sklearn (Python 3.5) per la previsione dopo aver caricato il modello addestrato, poiché il mio OpenCV è stato installato per la versione Python 2.7 mentre lo sklearn è stato installato per python 3.5. Quindi, ho usato il modulo subprocess per eseguire il file HarryPotterWandsklearn.py (per la previsione) da HarryPotterWandcv.py (per tutto il lavoro opencv e la registrazione video in tempo reale) e ottenere il suo output. In questo modo devo solo eseguire il file HarryPotterWandcv.py.

Passaggio 7: il meccanismo di apertura della scatola

Il meccanismo di apertura della scatola
Il meccanismo di apertura della scatola
Il meccanismo di apertura della scatola
Il meccanismo di apertura della scatola
Il meccanismo di apertura della scatola
Il meccanismo di apertura della scatola

Avevo una vecchia scatola di colore rosso intorno alla quale ho usato per questo progetto.

Per il meccanismo di apertura della scatola:

  1. Ho incollato a caldo un servo vicino all'estremità posteriore della scatola su un pezzo di cartone vicino al bordo della scatola.
  2. Poi ho preso un raggio dalla ruota di una bicicletta e l'ho incollato a caldo al braccio del servo.
  3. L'altra estremità del raggio era attaccata al coperchio della scatola usando un pezzo di filo.
  4. Il positivo del servo è stato collegato a +5V Pin 2 su Raspberry Pi.
  5. Il negativo del servo è stato collegato al pin 39 GND.
  6. Il segnale del servo era collegato al pin 12

Passaggio 8: creare la scatola a tema Harry Potter

Realizzare la scatola a tema Harry Potter
Realizzare la scatola a tema Harry Potter
Realizzare la scatola a tema Harry Potter
Realizzare la scatola a tema Harry Potter
Realizzare la scatola a tema Harry Potter
Realizzare la scatola a tema Harry Potter

Per realizzare la scatola a tema Harry Potter, ho stampato alcune immagini colorate di varie cose come il logo di Harry Potter, lo stemma di Hogwarts, lo stemma di ciascuna delle quattro case ecc. su un foglio di formato A4 lucido e le ho incollate sulla scatola in vari posti.

Ho anche usato un foglio di velluto di colore Giallo per tagliare delle strisce e le ho incollate sul coperchio per dare alla scatola lo stesso colore di quella della Casa di Grifondoro. Ho ricoperto l'interno del coperchio e il cartone per servo con un foglio di velluto verde. All'interno del coperchio ho incollato più simboli e un emblema che mostra gli animali che rappresentano ogni casa della scuola di Hogwarts.

Poi finalmente ho infilato tutte le mie cose relative a Harry Potter nella scatola che includeva una marmitta di Grifondoro, un diario con l'uniforme di Hogwarts e la Bacchetta di Sambuco usata in questo progetto:D

Consigliato: