Sommario:
- Passaggio 1: materiali
- Passaggio 2: cablaggio
- Passaggio 3: costruire l'involucro
- Passaggio 4: configurazione della fotocamera
- Passaggio 5: configurazione di Docker
- Passaggio 6: esecuzione degli script del campanello
- Passaggio 7: utilizzo del campanello
Video: Campanello con riconoscimento facciale: 7 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Motivazione
Di recente, nel mio paese si è verificata un'ondata di rapine che hanno come bersaglio gli anziani nelle loro stesse case. Di solito, l'accesso è concesso dagli stessi occupanti poiché i visitatori li convincono di essere caregiver/infermieri. È appena oltre le parole, quanto mi facciano sentire arrabbiato e triste queste storie. La casa dovrebbe essere il tuo primo rifugio sicuro e ancora di più se sei già in una posizione vulnerabile quando sei fuori. Con questo in mente, ho iniziato questo progetto.
Informazione Generale
Il sistema del campanello è progettato principalmente per persone anziane o ipovedenti ed è piuttosto semplice nel suo funzionamento. In breve, l'interruttore del campanello fa scattare la telecamera per ottenere filmati. Successivamente, i volti nel filmato vengono rilevati e abbinati a una whitelist e una blacklist. L'occupante ottiene un chiaro feedback visivo da un chiaro display a semaforo. In questo modo, la luce verde, gialla o rossa indica che la persona o le persone sono nella whitelist, sconosciute al sistema o nella blacklist rispettivamente. Se scatta la luce gialla o rossa, la foto viene inviata da un bot di Telegram per informare/avvertire un parente o un custode.
Livello di competenza
Il progetto è stato pensato per gli appassionati particolarmente curiosi di utilizzare la visione artificiale e l'intelligenza artificiale. Questo tutorial è scritto per un pubblico di principianti, quindi non preoccuparti se non hai esperienza! Inoltre, il progetto può essere interessante anche per i produttori più esperti poiché la pipeline è organizzata in modo tale da poterla espandere con la propria visione artificiale e le idee di riconoscimento facciale senza troppi problemi.
Passaggio 1: materiali
Elenco prodotti con requisiti minimi:
Prodotto | Collegamento | Commento |
---|---|---|
Raspberry Pi 3b | RPi | Il collegamento mostra RPi 4 poiché ha prestazioni molto migliori e un prezzo quasi uguale a RPi 3b. |
MicroSD | Amazon | Una scheda micro SD da 16 GB o superiore farà il lavoro. Ma le carte da 16 GB su Amazon ora hanno praticamente lo stesso prezzo delle carte da 32 GB. |
Fotocamera Raspberry Pi | Amazon | La fotocamera v1 è più economica, ma la v2 è migliore e sarà supportata più a lungo. |
Cavo flessibile FPC a 15 pin | Amazon | La lunghezza in realtà dipende dalle circostanze in cui si realizza questo progetto. Se vuoi solo costruire un prototipo, il cavo flessibile originale farà il lavoro. |
Alimentazione 5v micro usb | Adafruit | Questo non si è mai deluso! Ottima qualità. (Non sulla foto) |
Pulsanti Arcade con LED integrato | Amazon | Scegli la dimensione che desideri, ma il design CAD si basa su pulsanti da 60 mm |
resistori | Amazon | Hai solo bisogno di un paio di resistori da 1k e 100 ohm. I normali 1/4W vanno bene. |
Condensatori 0.1 uF | Amazon | Sono necessari tre condensatori. (Non sulla foto) |
Ponticelli/Cavo a nastro | AmazonAmazon | Se vuoi risparmiare qualche soldo, puoi anche usare un vecchio cavo a nastro per unità floppy (vedi foto). |
Tubo termoretraibile / Nastro isolante | AmazonAmazon |
Strumenti necessari:
Attrezzo | Essenziale? | Commento |
---|---|---|
Saldatore | sì | |
Multimetro | sì | |
Spelafili | sì | Oppure puoi usare un coltello/forbici. |
Taglierina laser | No | |
stampante 3d | No | |
Morsetti | No | Utile per tenere unita la scatola in fase di test. |
Osservazioni:
Per aumentare l'accessibilità del progetto, ho deciso di svilupparlo utilizzando un Raspberry Pi 3b. Mentre aumenta l'accessibilità, diminuisce le capacità dell'applicazione poiché gli RPi non sono così veloci. Se stai cercando un computer a scheda singola più veloce, potresti dare un'occhiata a NVIDIA Jetson Nano
Passaggio 2: cablaggio
Il diagramma schematico è più informativo per questo passaggio ed è abbastanza autoesplicativo. Nel caso in cui non conosci l'elettronica, puoi utilizzare l'immagine della legenda. Il valore del componente (se applicabile) è indicato nel diagramma schematico. Le foto possono aiutare a vedere come costruisco il circuito. Fondamentalmente, ho collegato tutti i componenti il più vicino possibile al pulsante arcade, il che si traduce in una chiara panoramica di ciò che sta accadendo.
Osservazioni:
- Mi piace molto usare connettori con cavo a nastro, dal momento che sono molto più robusti rispetto all'utilizzo di cavi a ponticello singolo.
- Come suggerito, ho usato un cavo a nastro recuperato da un vecchio computer. Questo è un po 'complicato poiché dovrai affermare manualmente la configurazione del cavo. In questo progetto, ad esempio, ho scoperto che alcuni fori erano collegati tra loro (probabilmente usati come massa per l'applicazione originale). Pertanto, ho dovuto acquistare un cavo diverso in seguito, come puoi vedere nelle immagini.
Passaggio 3: costruire l'involucro
Custodia per fotocamera
Molte custodie per la picamera possono essere scaricate gratuitamente da internet. Quindi, ho scelto di non reinventare la ruota e scegliere un involucro semplice ma carino da Internet: thingiverse.com - Custodia/custodia per fotocamera Raspberry pi. (Un saluto al designer VGer.)
Involucro semaforo
Per l'involucro del semaforo, ho progettato una piccola scatola in Autodesk Fusion 360 (che è scaricabile gratuitamente, vedi Note) che si adatta a tutto l'hardware. In allegato, puoi trovare il file che ho inviato alla mia azienda di taglio laser locale. Con la presente, il design si basa su uno spessore della piastra di 6 mm. Tuttavia, se desideri modificare le cose, puoi accedere a tutti i tipi di formati di file utilizzando questo collegamento. Come mostrato nelle immagini, puoi anche usare una scatola di cartone se non hai accesso a un laser cutter. Ho usato la scatola di cartone sull'immagine per la prototipazione e funziona a meraviglia.
L'assemblaggio è piuttosto semplice:
- Monta gli interruttori Arcade.
- Assicurati di tenere liberi i cavi del campanello.
- Collegare il cavo a nastro all'RPi.
- Avvitare l'RPi sul pannello inferiore.
- Collega i cavi del campanello a un connettore del cavo e montalo anche sul pannello inferiore.
- Collega la Picamera all'RPi.
- Praticare un foro in uno dei pannelli laterali per il cavo di commutazione del campanello e il cavo di alimentazione RPi.
Il connettore del cavo viene utilizzato come punto di montaggio per i cavi dell'interruttore del campanello, in modo che possa essere fissato in seguito a un campanello esistente. Ora tutto è a posto e può essere incollato insieme. Tuttavia, potresti prima voler completare i passaggi successivi, per assicurarti che tutto funzioni come dovrebbe essere.
Osservazioni:
Autodesk Fusion 360 è disponibile gratuitamente per gli hobbisti! Se vuoi ottenere la tua copia, visita questo link: autodesk.com - Fusion 360 per hobbisti. Ci sono alcuni termini, quindi assicurati di leggerli e applicarli. È stato il mio primo progetto con Fusion 360 e non ho molta esperienza nell'uso del software CAD, ma devo dire che mi piace molto il software e tutti gli strumenti aggiuntivi forniti con Fusion 360
Passaggio 4: configurazione della fotocamera
Si presume che Raspbian sia installato e che funzioni in modalità GUI. Se non hai ancora installato Raspbian, puoi seguire questo articolo: raspberrypi.org - Installazione delle immagini del sistema operativo. Se avvii Raspbian, dovresti vedere un desktop come mostrato nelle immagini.
Configuriamo la telecamera sull'RPi e vediamo se funziona! Il metodo qui descritto è direttamente da raspberrypi.org - Documentation. Innanzitutto, aggiorniamo agli ultimi pacchetti (compreso il firmware della fotocamera) eseguendo i seguenti comandi in una finestra di terminale (vedi immagini):
sudo apt update
sudo apt aggiornamento completo
Successivamente, la telecamera deve essere abilitata utilizzando il seguente comando:
sudo raspi-config
Nel menu, vai a 5. Opzioni di interfaccia -> Fotocamera P1. Scegliere di abilitare la telecamera e riavviare l'RPi eseguendo:
riavviare
La fotocamera dovrebbe ora essere configurata correttamente. Può essere testato aprendo una finestra di terminale ed eseguendo:
raspistill -v -o /home/pi/test.jpg
L'immagine viene salvata in: /home/pi.
Passaggio 5: configurazione di Docker
Per evitare la dipendenza e gli errori di installazione, ho deciso di creare un'immagine Docker personalizzata per questo progetto (vedi wikipedia.org - Docker). Se non hai mai usato o sentito parlare di Docker, non preoccuparti, ti spiegherò passo passo come usarlo in questo progetto. In effetti, è semplicissimo! Nel caso in cui desideri eseguire questo progetto su un'installazione locale (invece che in un contenitore Docker), ti darò alcuni suggerimenti. Ma si consiglia vivamente di utilizzare l'immagine Docker. Dopotutto, l'ho costruito per renderti facile l'esecuzione di questo progetto!
Cos'è Docker?
Nota: questa parte fornisce alcune informazioni di base su Docker, che possono essere ignorate se si desidera solo eseguire il codice.
Questo progetto è la prima volta che utilizzo Docker ed è semplicemente fantastico! Forse hai sentito parlare di virtualenv o Anaconda per Python? Bene, Docker è abbastanza simile nel senso che puoi facilmente gestire le versioni dei pacchetti ed eseguire diverse versioni di Python su un sistema host utilizzando un ambiente diverso (o contenitore come viene chiamato in Docker). Ma, rispetto a virtualenv e Anaconda, Docker è molto più potente poiché non si limita a contenere solo pacchetti Python. In un container Docker, infatti, è possibile installare e gestire anche i pacchetti di un sistema operativo desiderato. Ad esempio, considera un sito Web che desideri migrare che esegue un framework Web Python (ad es. Django) con un database (ad es. MySQL). Senza un contenitore Docker, dovresti installare tutti i pacchetti sul nuovo server, un processo molto soggetto a errori e bug. D'altra parte, quando il tuo sito Web è stato creato in Docker, la migrazione è fondamentalmente facile come spostare il file/i file immagine sul nuovo server ed eseguirli. Come puoi immaginare, Docker è molto utile anche per progetti su Instructables;)! Se vuoi saperne di più su Docker, dai un'occhiata al loro sito Web: docker.org - Docker: Enterprise Container Platform. Ora iniziamo a lavorare con Docker!
Installazione di Docker
Installa Docker eseguendo:
curl -sSL https://get.docker.com | SH
Successivamente, l'utente viene aggiunto al gruppo utenti 'docker', che fornisce i diritti per eseguire Docker. Questo è fatto da:
sudo usermod -aG docker $USER
Ora dovresti essere in grado di eseguire Docker. Questo può essere convalidato eseguendo l'immagine hello-world:
docker esegui ciao-mondo
Infine, estraiamo l'immagine Docker che contiene tutte le dipendenze necessarie per eseguire gli script Python del campanello. Questo processo potrebbe richiedere del tempo poiché l'immagine è abbastanza grande (~1,5 GB). Eseguire:
docker pull erientes/campanello
Nota: il Dockerfile può essere trovato nel repository del campanello su Github. Ora, tutto è pronto per eseguire gli script del campanello, che verranno discussi nel passaggio successivo.
Installazione locale
Ancora una volta, consiglio vivamente di utilizzare l'immagine Docker invece di un'installazione locale. Ma per completare questo tutorial, descriverò ora alcuni dei passaggi che ho eseguito per l'installazione locale.
Per poter eseguire il codice, la versione di python dovrebbe essere >= 3.5 (ho usato python 3.5.3) e i seguenti pacchetti devono essere installati:
- riconoscimento facciale
- picamera
- insensibile
- Cuscino
- python-telegram-bot
- RPi. GPIO
Questo collegamento è molto utile: Github - Installa dlib e face_recognition su un Raspberry Pi. Tuttavia, ci sono alcuni avvertimenti qui: 1) Pillow richiede almeno Python 3.5, che non verrà installato seguendo questo metodo. 2) Inoltre, non tutti i pacchetti necessari nel progetto del campanello verranno installati seguendo questo metodo. Tuttavia, dovresti essere in grado di installarlo semplicemente usando pip3.
Passaggio 6: esecuzione degli script del campanello
Ottieni gli script
Gli script possono essere scaricati manualmente da: github.com - Erientes/doorbell. Oppure se hai installato Git, esegui:
git clone
Crea alias
Ora, per semplificarci un po' la vita, creiamo degli alias per eseguire gli script. Eseguire:
leafpad ~/.bashrc
Aggiungi le seguenti righe e salva il file:
alias doorbell_run='docker run --privileged -v /home/pi/doorbell:/doorbell -w /doorbell -it erientes/doorbell python $1'
alias doorbell_login='docker run --privileged -v /home/pi/doorbell:/doorbell -w /doorbell -it erientes/doorbell bash'
Script di prova
Per verificare se tutto è installato correttamente, apri un nuovo terminale ed esegui:
esempi di campanello_run/0_test_installation.py
Il risultato dovrebbe essere semplicemente un messaggio nella finestra del terminale che dice "L'installazione del campanello è terminata con successo!". Per verificare se è possibile accedere alla telecamera dal contenitore Docker, eseguire:
esempi di campanello_run/1_test_camera.py
Eseguendo 1_test_camera.py verrà scattata una foto e salvata come 'test.jpg', che può essere trovata in /home/pi/doorbell. Infine, i driver LED possono essere testati eseguendo:
esempi di doorbell_run/2_test_voicehat_drivers.py
Quando questo script è in esecuzione, il LED nell'interruttore arcade dovrebbe rispondere quando viene premuto il pulsante.
Esecuzione degli script del campanello
Per eseguire gli script del campanello, è necessario prima ottenere le credenziali del bot di Telegram. Installa Telegram sul tuo telefono e vai su telegram.me - Botfather. Avvia una conversazione e inserisci:
/newbot
Inserisci un nome e un nome utente per il bot. Successivamente, ti verrà fornito il token di accesso. Copia quel valore nel file "credentials_telegram_template.py" in /home/pi/doorbell e salvalo in un nuovo file denominato "credentials_telegram.py". Infine, avvia una conversazione con il bot che hai appena creato facendo clic sul collegamento che Botfather ti fornisce.
Infine, eseguiamo il campanello con riconoscimento facciale:
campanello_run main.py
Osservazioni:
Se vuoi saperne di più su come funziona il codice, controlla i commenti negli script stessi. Se hai una domanda sul codice, contattami tramite Github
Passaggio 7: utilizzo del campanello
Eseguiamo lo script del campanello eseguendo:
campanello_run main.py Dopo aver caricato i pacchetti, gli script diventano inattivi. Ci sono fondamentalmente 2 cose che possono succedere:
- Qualcuno suona il campanello.
- Qualcuno viene aggiunto alla whitelist.
Qualcuno suona il campanello
In questo caso, lo script inizierà a scattare foto fino a quando non scatterà una foto in cui viene rilevato un volto. Dopo il rilevamento, vengono chiamati alcuni metodi dal pacchetto python 'face_recognition' per calcolare una codifica 128 del viso. Successivamente, la codifica ottenuta viene confrontata con le codifiche in whitelist.csv e blacklist.csv. I possibili esiti si traducono nella seguente risposta:
Nella lista bianca? | Nella lista nera? | Risposta |
---|---|---|
sì | No | La luce verde si accende. |
sì | sì | La spia gialla si accende. La telecamera del campanello invia foto al bot di Telegram con l'icona arancione. Questo stato può verificarsi se qualcuno è stato aggiunto a entrambi gli elenchi. Ad esempio, quando qualcuno all'inizio era il benvenuto, ma in seguito è stato inserito nella lista nera. |
No | No | La spia gialla si accende. La telecamera del campanello invia foto al bot di Telegram con l'icona arancione. |
No | sì | La luce rossa si accende. La telecamera del campanello invia foto al bot di Telegram con l'icona rossa. |
Qualcuno viene aggiunto alla whitelist
Per aggiungere qualcuno alla whitelist, premi il pulsante giallo del semaforo quando il campanello è inattivo. Per prima cosa si accenderà la spia gialla. Se la luce verde lampeggia 3 volte, il viso della persona è stato aggiunto con successo alla whitelist. Se la luce verde non lampeggia 3 volte, il tentativo non è andato a buon fine. In tal caso, premere nuovamente il pulsante giallo. Puoi facilmente verificare se ha avuto successo suonando il campanello e controllando se la luce verde è passata.
Come aggiungere qualcuno alla lista nera?
Ovviamente, le persone con cattive intenzioni non passeranno per darci una foto del loro viso. Quindi, invece, puoi aggiungere immagini di persone famose che (ad esempio) la polizia ha pubblicato nella cartella img/blacklist. Ogni ora, questa cartella viene controllata per nuove immagini. Se è presente una nuova immagine, la codifica del volto viene calcolata e aggiunta a blacklist.csv. L'immagine viene quindi rinominata e spostata nella cartella /img/blacklist/encoded.
Osservazioni:
- L'utilizzo degli script tramite l'accesso all'RPi fornisce molto più controllo e informazioni, ma il controllo e le informazioni di base possono essere ottenuti utilizzando esclusivamente il display del semaforo.
- Il riconoscimento facciale viene implementato utilizzando il pacchetto Python 'face_recognition'. Questo pacchetto è basato su Dlib che contiene un algoritmo di riconoscimento facciale all'avanguardia, che esegue una precisione del 99,38% sul benchmark Labeled Faces in the Wild (fonte: dlib.net - Riconoscimento facciale di alta qualità con Deep Metric Learning).
Primo premio al concorso di tecnologia assistiva
Consigliato:
Specchio per riconoscimento facciale con scomparto segreto: 15 passaggi (con immagini)
Specchio per il riconoscimento facciale con scomparto segreto: sono sempre stato incuriosito dagli scomparti segreti sempre creativi utilizzati in storie, film e simili. Così, quando ho visto il Secret Compartment Contest, ho deciso di sperimentare io stesso l'idea e creare uno specchio dall'aspetto ordinario che apra una s
Smart Lock con riconoscimento facciale con LTE Pi HAT: 4 passaggi
Riconoscimento facciale Smart Lock con LTE Pi HAT: il riconoscimento facciale sta diventando sempre più diffuso, possiamo usarlo per creare un lucchetto intelligente
Sistema di sicurezza con riconoscimento facciale per un frigorifero con Raspberry Pi: 7 passaggi (con immagini)
Sistema di sicurezza a riconoscimento facciale per frigorifero con Raspberry Pi: Navigando in internet ho scoperto che i prezzi dei sistemi di sicurezza variano da 150$ a 600$ e oltre, ma non tutte le soluzioni (anche quelle molto costose) sono integrabili con altre strumenti intelligenti a casa tua! Ad esempio, non è possibile impostare
Riconoscimento facciale in tempo reale: un progetto end-to-end: 8 passaggi (con immagini)
Riconoscimento facciale in tempo reale: un progetto end-to-end: nel mio ultimo tutorial esplorando OpenCV, abbiamo imparato il TRACCIAMENTO AUTOMATICO DI OGGETTI DI VISIONE. Ora utilizzeremo la nostra PiCam per riconoscere i volti in tempo reale, come puoi vedere di seguito: Questo progetto è stato realizzato con questa fantastica "Libreria di visione artificiale open source&qu
Rilevamento facciale+riconoscimento: 8 passaggi (con immagini)
Rilevamento facciale + riconoscimento: questo è un semplice esempio di esecuzione del rilevamento e riconoscimento del volto con OpenCV da una fotocamera. NOTA: HO REALIZZATO QUESTO PROGETTO PER IL CONCORSO DI SENSORI E HO UTILIZZATO LA FOTOCAMERA COME SENSORE PER TRACCIARE E RICONOSCERE I VOLTI. Quindi, il nostro obiettivo In questa sessione, 1. Installa Anaconda