Inhaltsverzeichnis:

Türklingel mit Gesichtserkennung - Gunook
Türklingel mit Gesichtserkennung - Gunook

Video: Türklingel mit Gesichtserkennung - Gunook

Video: Türklingel mit Gesichtserkennung - Gunook
Video: ABUS FaceXess - Video-Türstation mit Gesichtserkennung | Ein Lächeln öffnet Türen! 2024, Juli
Anonim
Türklingel mit Gesichtserkennung
Türklingel mit Gesichtserkennung

Motivation

In letzter Zeit hat es in meinem Land eine Welle von Raubüberfällen gegeben, die auf ältere Menschen in ihren eigenen vier Wänden abzielen. In der Regel wird der Zutritt von den Bewohnern selbst gewährt, da die Besucher sie davon überzeugen, dass sie Pflegekräfte sind. Es ist einfach unbeschreiblich, wie wütend und traurig mich diese Geschichten machen. Das Zuhause sollte Ihr erster sicherer Hafen sein und noch mehr, wenn Sie sich im Freien bereits in einer verwundbaren Position befinden. In diesem Sinne habe ich dieses Projekt gestartet.

Allgemeine Information

Das Türklingelsystem ist hauptsächlich für ältere oder sehbehinderte Personen konzipiert und in seiner Funktionsweise recht unkompliziert. Kurz gesagt, der Türklingelschalter löst die Kamera aus, um Filmmaterial zu erhalten. Als nächstes werden Gesichter im Filmmaterial erkannt und mit einer Whitelist und Blacklist abgeglichen. Durch eine übersichtliche Ampelanzeige erhält der Insasse eine klare optische Rückmeldung. Dabei zeigt das grüne, gelbe oder rote Licht an, dass die Person(en) auf der Whitelist, dem System unbekannt bzw. auf der Blacklist stehen. Wenn das gelbe oder rote Licht ausgelöst wird, wird das Foto von einem Telegram-Bot gesendet, um einen Angehörigen oder Hausmeister zu informieren / zu warnen.

Kompetenzniveau

Das Projekt richtete sich an Enthusiasten, die besonders neugierig auf den Einsatz von Computer Vision und künstlicher Intelligenz sind. Dieses instructable ist für ein Publikum von Anfängern geschrieben, also machen Sie sich keine Sorgen, wenn Sie keine Erfahrung haben! Darüber hinaus kann das Projekt auch für erfahrenere Hersteller interessant sein, da die Pipeline so organisiert ist, dass Sie sie ohne großen Aufwand mit Ihren eigenen Ideen für Computer Vision und Gesichtserkennung erweitern können.

Schritt 1: Materialien

Materialien
Materialien

Produktliste mit Mindestanforderungen:

Produkt Verknüpfung Kommentar
Raspberry Pi 3b RPi Link zeigt RPi 4, da es eine viel bessere Leistung und fast den gleichen Preis wie das RPi 3b hat.
Micro-SD Amazonas Eine Micro-SD-Karte von 16 GB oder größer wird die Arbeit erledigen. Aber die 16-GB-Karten bei Amazon sind jetzt fast genauso teuer wie die 32-GB-Karten.
Raspberry Pi-Kamera Amazonas Kamera v1 ist billiger, aber v2 ist besser und wird länger unterstützt.
15-poliges FPC-Flexkabel Amazonas Die Länge hängt tatsächlich von den Umständen der Durchführung dieses Projekts ab. Wenn Sie nur einen Prototyp bauen möchten, wird das Original-Flexkabel die Arbeit erledigen.
Netzteil 5V Micro-USB Adafrucht Dieser hat sich nie im Stich gelassen! Großartige Qualität. (Nicht auf dem Foto)
Arcade-Tasten mit integrierter LED Amazonas Wählen Sie die gewünschte Größe, aber das CAD-Design basiert auf 60-mm-Knöpfen
Widerstände Amazonas Sie benötigen nur ein paar 1k- und 100-Ohm-Widerstände. Normale 1/4W sind in Ordnung.
Kondensatoren 0,1 uF Amazonas Es werden drei Kondensatoren benötigt. (Nicht auf dem Foto)
Überbrückungsdrähte / Flachbandkabel AmazonAmazon Wenn Sie sich etwas Geld sparen möchten, können Sie auch ein altes Flachbandkabel für das Diskettenlaufwerk verwenden (siehe Foto).
Schrumpfschlauch / Isolierband AmazonAmazon

Benötigte Werkzeuge:

Werkzeug Notwendig? Kommentar
Lötkolben Jawohl
Multimeter Jawohl
Abisolierzange Jawohl Oder Sie verwenden ein Messer/eine Schere.
Laserschneider Nein
3D Drucker Nein
Klemmen Nein Nützlich, um die Box in der Testphase zusammenzuhalten.

Bemerkungen:

Um die Zugänglichkeit des Projekts zu erhöhen, habe ich mich entschieden, es mit einem Raspberry Pi 3b zu entwickeln. Während es die Zugänglichkeit erhöht, verringert es die Fähigkeiten der Anwendung, da RPis nicht so schnell sind. Wenn Sie auf der Suche nach einem schnelleren Einplatinencomputer sind, sollten Sie sich den NVIDIA Jetson Nano ansehen

Schritt 2: Verkabelung

Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung

Das schematische Diagramm ist für diesen Schritt am informativsten und ziemlich selbsterklärend. Falls Sie neu in der Elektronik sind, können Sie das Legendenbild verwenden. Der Wert des Bauteils (sofern zutreffend) ist im Schaltplan angegeben. Die Fotos können helfen, zu sehen, wie ich die Schaltung baue. Grundsätzlich habe ich alle Komponenten so nah wie möglich am Arcade-Button angeschlossen, was zu einem klaren Überblick über das Geschehen führt.

Bemerkungen:

  • Ich verwende sehr gerne Flachbandkabelstecker, da sie viel stabiler sind als einzelne Überbrückungsdrähte.
  • Wie vorgeschlagen, habe ich ein gereinigtes Flachbandkabel von einem alten Computer verwendet. Dies ist jedoch etwas schwierig, da Sie die Konfiguration des Kabels manuell bestätigen müssen. In diesem Projekt habe ich zum Beispiel herausgefunden, dass einige Löcher miteinander verbunden waren (wahrscheinlich als Boden für die ursprüngliche Anwendung verwendet). Daher musste ich mir später ein anderes Kabel besorgen, wie auf den Bildern zu sehen ist.

Schritt 3: Aufbau des Gehäuses

Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses
Aufbau des Gehäuses

Kameragehäuse

Viele Hüllen für die Picamera können kostenlos aus dem Internet heruntergeladen werden. Also erfinde ich das Rad nicht neu und wähle ein einfaches, aber schönes Gehäuse aus dem Internet: thingiverse.com - Raspberry Pi Kameragehäuse / Gehäuse. (Shout-out an den Designer VGer.)

Ampelgehäuse

Für das Ampelgehäuse habe ich in Autodesk Fusion 360 eine kleine Box entworfen (die kostenlos heruntergeladen werden kann, siehe Anmerkungen), die auf die gesamte Hardware passt. Im Anhang finden Sie die Datei, die ich an meine lokale Laserschneidfirma gesendet habe. Dabei basiert das Design auf einer Plattenstärke von 6mm. Wenn Sie jedoch etwas anpassen möchten, können Sie über diesen Link auf alle Arten von Dateiformaten zugreifen. Wie auf den Bildern gezeigt, können Sie auch einen Karton verwenden, wenn Sie keinen Zugang zu einem Laserschneider haben. Ich habe den Karton auf dem Bild für das Prototyping verwendet und es funktioniert wie ein Zauber.

Die Montage ist ziemlich einfach:

  1. Montieren Sie die Arcade-Schalter.
  2. Achten Sie darauf, dass die Drähte für die Türklingel frei bleiben.
  3. Verbinden Sie das Flachbandkabel mit dem RPi.
  4. Schrauben Sie das RPi auf die Bodenplatte.
  5. Schließen Sie die Türklingelkabel an einen Kabelstecker an und montieren Sie ihn auch an der Unterseite.
  6. Verbinden Sie die Picamera mit dem RPi.
  7. Bohren Sie ein Loch in eine der Seitenwände für das Schaltkabel der Türklingel und das RPi-Stromkabel.

Der Kabelverbinder dient als Befestigungspunkt für die Kabel des Türklingelschalters, um ihn später an einer bestehenden Türklingel befestigen zu können. Jetzt ist alles an seinem Platz und kann zusammengeklebt werden. Möglicherweise möchten Sie jedoch zuerst die nächsten Schritte abschließen, um sicherzustellen, dass alles so funktioniert, wie es sein soll.

Bemerkungen:

Autodesk Fusion 360 ist für Bastler kostenlos verfügbar! Wenn Sie Ihre Kopie erhalten möchten, besuchen Sie diesen Link: autodesk.com - Fusion 360 für Hobbyisten. Es gibt einige Begriffe, also stellen Sie sicher, dass Sie sie lesen und anwenden. Es war mein erstes Projekt mit Fusion 360 und ich habe nicht viel Erfahrung mit der Verwendung von CAD-Software, aber ich muss sagen, dass ich die Software und all die zusätzlichen Tools, die mit Fusion 360 kommen, wirklich mag

Schritt 4: Konfigurieren der Kamera

Konfigurieren der Kamera
Konfigurieren der Kamera
Konfigurieren der Kamera
Konfigurieren der Kamera
Konfigurieren der Kamera
Konfigurieren der Kamera

Es wird vorausgesetzt, dass Sie Raspbian installiert haben und es im GUI-Modus läuft. Wenn Sie Raspbian noch nicht installiert haben, können Sie diesem Artikel folgen: raspberrypi.org - Betriebssystem-Images installieren. Wenn Sie Raspbian booten, sollten Sie einen Desktop sehen, wie in den Bildern gezeigt.

Lassen Sie uns die Kamera auf dem RPi konfigurieren und sehen, ob es funktioniert! Die hier beschriebene Methode stammt direkt aus der raspberrypi.org - Dokumentation. Lassen Sie uns zunächst auf die neuesten Pakete (einschließlich Kamera-Firmware) aktualisieren, indem wir die folgenden Befehle in einem Terminalfenster ausführen (siehe Bilder):

sudo apt-Update

sudo apt Voll-Upgrade

Als nächstes muss die Kamera mit dem folgenden Befehl aktiviert werden:

sudo raspi-config

Gehen Sie im Menü zu 5. Schnittstellenoptionen -> P1-Kamera. Aktivieren Sie die Kamera und starten Sie das RPi neu, indem Sie Folgendes ausführen:

neustarten

Die Kamera sollte nun richtig konfiguriert sein. Es kann getestet werden, indem ein Terminalfenster geöffnet und ausgeführt wird:

raspistill -v -o /home/pi/test.jpg

Das Bild wird gespeichert unter: /home/pi.

Schritt 5: Docker einrichten

Docker einrichten
Docker einrichten
Docker einrichten
Docker einrichten
Docker einrichten
Docker einrichten
Docker einrichten
Docker einrichten

Um die Abhängigkeits- und Installationsfehler zu vermeiden, habe ich beschlossen, ein benutzerdefiniertes Docker-Image für dieses Projekt zu erstellen (siehe wikipedia.org - Docker). Wenn Sie Docker noch nie verwendet oder davon gehört haben, keine Sorge, ich werde Ihnen Schritt für Schritt erklären, wie Sie es in diesem Projekt verwenden. Tatsächlich ist es super einfach! Falls Sie dieses Projekt auf einer lokalen Installation (statt in einem Docker-Container) ausführen möchten, gebe ich Ihnen einige Tipps. Es wird jedoch dringend empfohlen, das Docker-Image zu verwenden. Schließlich baue ich es, um Ihnen die Durchführung dieses Projekts zu erleichtern!

Was ist Docker?

Hinweis: Dieser Teil enthält einige Hintergrundinformationen zu Docker, die übersprungen werden können, wenn Sie nur den Code ausführen möchten.

Dieses Projekt ist das erste Mal, dass ich Docker verwendet habe und es ist einfach großartig! Vielleicht haben Sie schon von virtualenv oder Anaconda für Python gehört? Docker ist insofern ziemlich ähnlich, als Sie Paketversionen einfach verwalten und verschiedene Python-Versionen auf einem Hostsystem ausführen können, indem Sie eine andere Umgebung (oder einen Container, wie er in Docker genannt wird) verwenden. Aber im Vergleich zu virtualenv und Anaconda ist Docker viel leistungsfähiger, da es nicht nur auf Python-Pakete beschränkt ist. Tatsächlich können Sie in einem Docker-Container auch die Pakete eines gewünschten Betriebssystems installieren und verwalten. Betrachten Sie beispielsweise eine Website, die Sie migrieren möchten, auf der ein Python-Web-Framework (z. B. Django) mit einer Datenbank (z. B. MySQL) ausgeführt wird. Ohne Docker-Container müsste man alle Pakete auf dem neuen Server installieren, was sehr anfällig für Fehler und Bugs ist. Auf der anderen Seite, wenn Ihre Website in Docker erstellt wurde, ist die Migration im Grunde so einfach wie das Verschieben der Image-Datei/Dateien auf den neuen Server und deren Ausführung. Wie Sie sich vorstellen können, ist Docker auch für Projekte auf Instructables sehr nützlich;)! Wenn Sie mehr über Docker erfahren möchten, besuchen Sie deren Website: docker.org - Docker: Enterprise Container Platform. Lassen Sie uns jetzt mit Docker loslegen!

Docker installieren

Installieren Sie Docker, indem Sie Folgendes ausführen:

curl -sSL https://get.docker.com | NS

Als nächstes wird der Benutzer der Benutzergruppe 'docker' hinzugefügt, die die Rechte zum Ausführen von Docker bereitstellt. Dies geschieht durch:

sudo usermod -aG docker $USER

Jetzt sollten Sie Docker ausführen können. Dies kann durch Ausführen des hello-world-Image überprüft werden:

docker run hallo-world

Schließlich ziehen wir das Docker-Image, das alle Abhängigkeiten enthält, die zum Ausführen der Python-Skripte für die Türklingel erforderlich sind. Dieser Vorgang kann eine Weile dauern, da das Image ziemlich groß ist (~1,5 GB). Ausführen:

docker pull erientes/türklingel

Hinweis: Das Dockerfile finden Sie im Türklingel-Repository auf Github. Jetzt ist alles bereit, um die Türklingel-Skripte auszuführen, die im nächsten Schritt besprochen werden.

Lokale Installation

Auch hier würde ich dringend empfehlen, das Docker-Image anstelle einer lokalen Installation zu verwenden. Aber um dieses Tutorial zu vervollständigen, werde ich jetzt einige der Schritte beschreiben, die ich für die lokale Installation unternommen habe.

Um den Code ausführen zu können, sollte die Python-Version >= 3.5 sein (ich habe Python 3.5.3) und die folgenden Pakete müssen installiert sein:

  • Gesichtserkennung
  • Pikamera
  • numpy
  • Kopfkissen
  • Python-Telegramm-Bot
  • RPi. GPIO

Dieser Link ist sehr hilfreich: Github - Installiere dlib und face_recognition auf einem Raspberry Pi. Allerdings gibt es hier einige Vorbehalte: 1) Pillow benötigt mindestens Python 3.5, das nach dieser Methode nicht installiert wird. 2) Außerdem werden nicht alle Pakete, die im Türklingelprojekt benötigt werden, mit dieser Methode installiert. Sie sollten es jedoch einfach mit pip3 installieren können.

Schritt 6: Ausführen der Türklingel-Skripte

Ausführen der Türklingel-Skripte
Ausführen der Türklingel-Skripte
Ausführen der Türklingel-Skripte
Ausführen der Türklingel-Skripte
Ausführen der Türklingel-Skripte
Ausführen der Türklingel-Skripte

Holen Sie sich die Skripte

Die Skripte können manuell heruntergeladen werden von: github.com - Erientes/doorbell. Oder wenn Sie Git installiert haben, führen Sie Folgendes aus:

git-Klon

Aliasse erstellen

Um unser Leben etwas einfacher zu machen, erstellen wir nun einige Aliase zum Ausführen der Skripte. Ausführen:

Blattunterlage ~/.bashrc

Fügen Sie die folgenden Zeilen hinzu und speichern Sie die Datei:

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'

Testskripte

Um zu testen, ob alles richtig installiert ist, öffnen Sie ein neues Terminal und führen Sie Folgendes aus:

Türklingel_Run Beispiele/0_test_installation.py

Das Ergebnis sollte einfach eine Meldung im Terminalfenster sein, die sagt 'Türklingelinstallation erfolgreich beendet!'. Um zu testen, ob der Docker-Container auf die Kamera zugreifen kann, führen Sie Folgendes aus:

Türklingel_Run Beispiele/1_test_camera.py

Durch Ausführen von 1_test_camera.py wird ein Foto aufgenommen und als 'test.jpg' gespeichert, das in /home/pi/doorbell zu finden ist. Schließlich können die LED-Treiber getestet werden, indem Folgendes ausgeführt wird:

Beispiele für Doorbell_Run/2_test_voicehat_drivers.py

Wenn dieses Skript ausgeführt wird, sollte die LED im Arcade-Schalter reagieren, wenn die Taste gedrückt wird.

Ausführen von Türklingel-Skripten

Um die Doorbell-Skripte auszuführen, müssen zunächst die Anmeldeinformationen des Telegram-Bots abgerufen werden. Installiere Telegram auf deinem Handy und gehe zu telegram.me - Botfather. Starten Sie ein Gespräch und geben Sie ein:

/neubot

Geben Sie einen Namen und einen Benutzernamen für den Bot ein. Danach erhalten Sie das Zugriffstoken. Kopieren Sie diesen Wert in die Datei „credentials_telegram_template.py“in /home/pi/doorbell und speichern Sie ihn in einer neuen Datei namens „credentials_telegram.py“. Starten Sie schließlich eine Konversation mit dem Bot, den Sie gerade erstellt haben, indem Sie auf den Link klicken, den Botfather Ihnen zur Verfügung stellt.

Lassen Sie uns zum Schluss die Türklingel mit Gesichtserkennung ausführen:

doorbell_run main.py

Bemerkungen:

Wenn Sie mehr über die Funktionsweise des Codes erfahren möchten, lesen Sie die Kommentare in den Skripten selbst. Bei Fragen zum Code kontaktieren Sie mich bitte über Github

Schritt 7: Verwenden der Türklingel

Image
Image
Verwenden der Türklingel
Verwenden der Türklingel
Verwenden der Türklingel
Verwenden der Türklingel

Lassen Sie uns das Türklingel-Skript ausführen, indem Sie Folgendes ausführen:

doorbell_run main.py Nach dem Laden der Pakete gehen die Skripte in den Leerlauf. Grundsätzlich können 2 Dinge passieren:

  1. Jemand klingelt an der Tür.
  2. Jemand wird der Whitelist hinzugefügt.

Jemand klingelt an der Tür

In diesem Fall beginnt das Skript mit der Aufnahme von Fotos, bis es ein Foto aufnimmt, auf dem ein Gesicht erkannt wird. Nach der Erkennung werden einige Methoden aus dem Python-Paket 'face_recognition' aufgerufen, um eine 128-Kodierung des Gesichts zu berechnen. Als nächstes wird die erhaltene Codierung mit den Codierungen in whitelist.csv und blacklist.csv verglichen. Die möglichen Ergebnisse führen zu folgender Reaktion:

Auf Whitelist? Auf der schwarzen Liste? Antwort
Jawohl Nein Grünes Licht geht an.
Jawohl Jawohl Gelbes Licht geht an. Die Türklingelkamera sendet Fotos mit dem orangefarbenen Symbol an den Telegram-Bot. Dieser Zustand kann auftreten, wenn jemand zu beiden Listen hinzugefügt wurde. Zum Beispiel, wenn jemand zuerst willkommen war, aber später auf die schwarze Liste gesetzt wurde.
Nein Nein Gelbes Licht geht an. Die Türklingelkamera sendet Fotos mit dem orangefarbenen Symbol an den Telegram-Bot.
Nein Jawohl Rotes Licht geht an. Die Türklingelkamera sendet Fotos mit rotem Symbol an den Telegram-Bot.

Jemand wurde zur Whitelist hinzugefügt

Um jemanden zur Whitelist hinzuzufügen, drücken Sie im Ruhezustand der Türklingel die gelbe Taste der Ampel. Zuerst leuchtet das gelbe Licht. Wenn das grüne Licht dreimal blinkt, wurde das Gesicht der Person erfolgreich zur Whitelist hinzugefügt. Wenn das grüne Licht nicht dreimal blinkt, war der Versuch nicht erfolgreich. Drücken Sie in diesem Fall erneut die gelbe Taste. Sie können leicht überprüfen, ob es erfolgreich war, indem Sie an der Tür klingeln und prüfen, ob das grüne Licht bestanden wurde.

Wie füge ich jemanden zur Blacklist hinzu?

Natürlich kommen Leute mit schlechten Absichten nicht vorbei, um uns ein Foto von ihrem Gesicht zu geben. Stattdessen können Sie Bilder von berüchtigten Personen, die (zum Beispiel) die Polizei veröffentlicht hat, in den Ordner img/blacklist hinzufügen. Stündlich wird dieser Ordner auf neue Bilder überprüft. Wenn ein neues Bild vorhanden ist, wird die Gesichtskodierung berechnet und zur blacklist.csv hinzugefügt. Das Bild wird dann umbenannt und in den Ordner /img/blacklist/encoded verschoben.

Bemerkungen:

  • Die Bedienung der Skripte durch Einloggen in das RPi bietet viel mehr Kontrolle und Informationen, aber die grundlegende Kontrolle und Informationen können nur über die Ampelanzeige erhalten werden.
  • Die Gesichtserkennung wird mithilfe des Python-Pakets 'face_recognition' implementiert. Dieses Paket basiert auf Dlib, das einen hochmodernen Gesichtserkennungsalgorithmus enthält, der beim Labeled Faces in the Wild-Benchmark eine Genauigkeit von 99,38 % erreicht (Quelle: dlib.net - High Quality Face Recognition with Deep Metric Learning).
Assistive Tech-Wettbewerb
Assistive Tech-Wettbewerb
Assistive Tech-Wettbewerb
Assistive Tech-Wettbewerb

Erster Preis beim Assistive Tech Contest

Empfohlen: