Sommario:

Campanello con riconoscimento facciale: 7 passaggi (con immagini)
Campanello con riconoscimento facciale: 7 passaggi (con immagini)

Video: Campanello con riconoscimento facciale: 7 passaggi (con immagini)

Video: Campanello con riconoscimento facciale: 7 passaggi (con immagini)
Video: Aqara Video Campanello G4 con riconoscimento facciale 2024, Dicembre
Anonim
Campanello con riconoscimento facciale
Campanello con riconoscimento facciale

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

Materiali
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
Multimetro
Spelafili 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

Cablaggio
Cablaggio
Cablaggio
Cablaggio
Cablaggio
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

Costruire l'involucro
Costruire l'involucro
Costruire l'involucro
Costruire l'involucro
Costruire l'involucro
Costruire l'involucro
Costruire l'involucro
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:

  1. Monta gli interruttori Arcade.
  2. Assicurati di tenere liberi i cavi del campanello.
  3. Collegare il cavo a nastro all'RPi.
  4. Avvitare l'RPi sul pannello inferiore.
  5. Collega i cavi del campanello a un connettore del cavo e montalo anche sul pannello inferiore.
  6. Collega la Picamera all'RPi.
  7. 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

Configurazione della fotocamera
Configurazione della fotocamera
Configurazione della fotocamera
Configurazione della fotocamera
Configurazione della fotocamera
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

Configurazione di Docker
Configurazione di Docker
Configurazione di Docker
Configurazione di Docker
Configurazione di Docker
Configurazione di Docker
Configurazione di Docker
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

Esecuzione degli script del campanello
Esecuzione degli script del campanello
Esecuzione degli script del campanello
Esecuzione degli script del campanello
Esecuzione degli script del campanello
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

Image
Image
Utilizzo del campanello
Utilizzo del campanello
Utilizzo del campanello
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:

  1. Qualcuno suona il campanello.
  2. 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
No La luce verde si accende.
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 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).
Concorso di tecnologia assistiva
Concorso di tecnologia assistiva
Concorso di tecnologia assistiva
Concorso di tecnologia assistiva

Primo premio al concorso di tecnologia assistiva

Consigliato: