
Es ist kein Geheimnis, dass wir in der modernen Hightech-Welt ständig unsere Identität und Zugriffsrechte bestätigen müssen - mit Passwörtern, kontaktlosen Tags, Fingerabdrücken und so weiter. Sie können dies mit einem visuellen Abdruck tun - dem Gesicht des Benutzers. Schauen Sie sich einfach unser Gadget an, wie es versteht, dass es sich um einen autorisierten Benutzer handelt, und entsperren Sie den Bildschirm.
Wir haben beschlossen, ein ähnliches Schema unter Verwendung verfügbarer Materialien und Open Source-Lösungen zu implementieren. Als physisches Objekt, das die entsprechende "Selektivität für Entdeckungen" aufweist, wurde ein Safe ausgewählt.
Alle Details unter dem Schnitt.
Gehäuse

Abbildung 1. Montageprozess des Gehäuses
Das Gehäuse besteht aus Resten von laminierten MDF-Platten 40 x 40 cm, die durch Möbelschrauben verbunden sind. Anschließend wurden alle Fugen mit Acrylspachtel auf Holz dick beschichtet, nicht sehr gründlich geschliffen, wonach der gesamte Körper mehrmals mit einer dicken Schicht acrylweißer Farbe bedeckt wurde. Malen, warten, bis die aktuelle Schicht getrocknet, geschliffen, mit der nächsten Schicht bedecken. Nach drei Schichten erhielt ich ein einheitliches weißes mattes Finish, über das ich eine dünne Schicht aus weißem, glänzendem Email lief.

Abbildung 2. Endgehäuse während der elektrischen Installation
Von der Unterseite des Gehäuses aus befestigen wir die gedruckten Beine - die ersten Teile, die in einem 3D-Editor gezeichnet wurden.

Abbildung 3. Beine. Kunststoff PLA
Elektriker
Das Schloss für den Safe wurde aus einem Hybridantrieb des Zentralschlosses und der alten Zunge der Innentür hergestellt - von letzterer werfen wir die Drehhülse heraus und machen einen Haken unter der Traktion.
Mit Hilfe von gedruckten Teilen wird alles in einem Design zusammengebaut und an der Tür montiert. Die Hauptplatte selbst ist ziemlich dünn (3 mm) und lässt sich leicht biegen, aber alles ändert sich nach der Installation. Das endgültige Design war stark genug für weitere Experimente.

Abbildung 4. Verriegelungsmechanismus
Wenn es sich um ein vollwertiges Zugangskontrollsystem handelt, können Sie natürlich ein vorgefertigtes Ganzmetall-Elektroschloss kaufen, indem Sie es in einen normalen Metalltresor einbauen. Aber nein.
Zusätzlich zum Schloss benötigen wir einen Anhänger, um den Zustand der Tür zu steuern, einen Dreistellungsschalter zur Steuerung des Systems und eine zweifarbige LED, um den aktuellen Status des Programms anzuzeigen.

Abbildung 5. Schematische Darstellung des Bodykits
Vergessen Sie nicht, dass die Spannung an den Pins 1,8 V beträgt (mit einer Erweiterungskarte bereits 3,3 V), daher verbinden wir die LEDs über eine Transistorstufe - ab 1,8 V leuchten sie einfach nicht auf.
Elektronik
Die Hauptkomponenten des Systems - eine Kamera und ein Einplatinencomputer - wurden für einander erstellt (in unserem Fall handelt es sich nicht um eine Sprachrevolution, sondern um eine bekannte Tatsache):

Abbildung 6. Intel Joule 570x Development Kit - ein Einplatinen-Mikrocomputer mit einem 64-Bit-Intel Atom mit 4 Kernen an Bord, 4 GB Speicher und einem USB 3.0-Anschluss

Abbildung 7. Intel RealSense Camera SR300 - 3D-Kurzstreckenkamera als Sichtorgan . Der effektive Bereich der Tiefenerkennung beträgt 0,2 - 1,2 m.
Nur ein paar Tage nach dem Start des Projekts gelang es Intel Joule, den Status von EOL (End Of Life) zu erlangen, aber das hat uns nicht aufgehalten.
Als Computermodul können Sie mit USB3.0, das auf dem Intel-Prozessor basiert, fast jedes moderne Single-Board verwenden. Zum Beispiel Up Squared Grove IoT-Entwicklungskit oder MinnowBoard Turbot * . Intel NUC wird auch den Trick machen.
Montage
Wir installieren die Details des Schlosses so auf der Box, dass das Schloss normalerweise schließt. Damit die Tür beim Auslösen (wie bei den Sockeln) abprallt, drucken und installieren wir einen Federschieber. Seine Aufgabe ist es, die Tür nach dem Zurückziehen der Zunge einige Millimeter von der Verriegelung zurückzuziehen, damit sich die Box nach dem Entfernen der Spannung nicht wieder schließt.

Abbildung 8. Verriegelung für Zungen- und Federschieber
Montieren Sie die Kamera an der Vorderseite. Wir kleben die LED in die Abdeckung für die Kamera, an der Stelle über i - aus irgendeinem Grund gelang es ihm, sich in eine grüne LED zu verwandeln. Wir befestigen es mit einem Paar Schrauben.

Abbildung 9. Installierte Kamera
Für Intel Joule benötigen Sie einen Fall, sodass Sie im 3D-Editor einen Fall der erforderlichen Größe mit Fenstern für die Anschlüsse zeichnen.

Abbildung 10. Fallzeichnung für Intel Joule
Für 40-polige GPIO-Anschlüsse sind keine Fenster vorgesehen, da beschlossen wurde, die gesamte Elektrik im Gehäuse zu platzieren. Dazu wird eine dicke Abdeckung mit Nuten für das Relais und 4 Kontakten sowie Fenstern für die Schalter gezeichnet. Vergessen Sie nicht, dass der Prozessor auf der Platine nicht der schwächste ist, daher bohren wir mehrere Belüftungslöcher in den Deckel.

Abbildung 11. Deckzeichnung
Es gibt zwei Schulen. Erstens wurde bei der Entwicklung des Bodykits der LED-Anschluss nicht berücksichtigt, was dazu führte, dass:
- Es gibt kein Loch für das Kabel / den Stecker im Gehäuse und ich musste das Loch mit einem Lötkolben verbrennen.
- Das zusammengebaute Gehäuse hat einen langen Schwanz mit LEDs am Ende.
Zweitens muss der Fall irgendwie verbunden sein und nichts Besseres als dies unter Verwendung von Drahtstücken zu tun, wurde nicht erfunden ¯_ (ツ) _ / ¯. Über geräuscharme Montage im Allgemeinen geräuschlos. Sie können nicht sehen, aber irgendwo dort, unter den Thermodüsen, sind 3 Transistoren und Absätze von Rezuki versteckt.
Raucher PrototypHier erinnere ich mich an ein Bild meiner eigenen Urheberschaft:

Und die Worte der Person, die mir das richtige Gerät gebracht hat: "Sie haben bereits einen Prototyp für mich erstellt, ich muss nur die Firmware ein wenig reparieren - etwas ist instabil und der Akku ist schnell leer."

Abbildung 12. Zusammengebaute Elektronikbox
Die Innenseiten der Box sind vier Klemmen - zwei für die Stromversorgung und zwei für den Motor, ein Endschalter für die Tür, ein Hin- und Her zur Steuerung des Programms und ein Relais, das das Schloss mit Spannung versorgt. Während des Druckens riss der Winkel in der Nähe des Hohlraums für das Relais vom Tisch und das Relais entschied, nicht hinein zu passen. Ich musste den Schalter an die Thermoskanne kleben. Sowie Einzahler.
Das grüne Klebeband wird auf die WLAN-Antennenplatine geklebt. Im Allgemeinen sind sie selbstklebend, aber wir haben sie so oft geklebt, dass sie während der Experimente nicht mehr an der Oberfläche haften können.

Abbildung 13. Zusammengebaute Elektronikbox in geschlossener Form
Wir platzieren den Darm im Körper, schließen ihn und fahren mit der Entwicklung des Softwareteils fort.
Lyrischer 3D-Druck.
Details des Schlosses - von vielen geliebt und von mir gehasst PLA. Das Material eignet sich sehr gut zum Drucken hochpräziser Modelle, ist jedoch nicht vollständig zu verarbeiten. Und auch diese Infektion schwimmt beim Erhitzen, was für Strukturelemente eine sehr schlechte Eigenschaft ist.
Alle anderen Details von HIPS - IMHO ist es weniger launisch als ABS und riecht beim Drucken praktisch nicht. Die einzige Einschränkung - bis er die Temperatur des Tisches auf 95 Grad erhöhte, verzog sich das Detail auf dem Tisch. Laut Anleitung sollte die Temperatur der Tabelle etwa 100 Grad betragen, aber wer liest sie bisher so gut?
Software-Teil
Systemvorbereitung
Zunächst müssen Sie das BIOS auf der Karte aktualisieren, um das Image des benötigten Betriebssystems zu installieren. Wir haben diese und diese Anweisungen aus der offiziellen Dokumentation auf der Intel-Website verwendet.
Als nächstes installieren wir den speziellen Monitor und die Tastatur mit der Karte und installieren die spezielle Ubuntu * Desktop 16.04 LTS- Distribution für Intel Joule im üblichen Grafik- oder Textmodus. Wenn der Computer Intel NUC oder einen anderen Computer verwendet, wird auch das Standardimage des Systems gelöscht.
Nach der normalen Installation des Betriebssystems stellen wir über das integrierte WLAN eine Verbindung zum Internet her. Da es nur einen USB-Anschluss auf der Karte gibt und wir ihn zum Anschließen der Kamera benötigen, verbinden wir ihn über ssh mit der Karte. Jetzt können wir den Port von der Tastatur befreien und Intel RealSense verbinden.
Installieren Sie Pakete und Abhängigkeiten.
Installieren Sie zunächst Python 3.5.4, auf dem unser Projekt geschrieben ist. Laden Sie das OpenCV-Python-Modul aus dem Quellcode herunter und erstellen Sie es, da das inoffizielle Python-OpenCV-Modul unter Intel Joule nicht ordnungsgemäß funktioniert.
Installieren oder aktualisieren Sie zusätzliche Abhängigkeiten:
apt install -y --fix-missing build-essential cmake gfortran git wget curl graphicsmagick libgraphicsmagick1-dev libatlas-dev libavcodec-dev libavformat-dev libboost-all-dev libgtk2.0-dev libjpeg-dev liblapack-dev libswscale-dev pkg-config python3-dev python3-numpy software-properties-common zip git clone https://github.com/davisking/dlib.git /root/dlib; cd /root/dlib; mkdir build; cd build; cmake .. -DUSE_AVX_INSTRUCTIONS=1; cmake --build . ; cd .. ; python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA pip3 install face_recognition
Wir setzen libmraa - diese Bibliothek ist nützlich für uns, um mit der Box zu kommunizieren. Detaillierte Montageanleitungen finden Sie hier .
Oder Sie können vorgefertigte Binärdateien von PPA installieren:
sudo add-apt-repository ppa:mraa/mraa sudo apt-get update sudo apt-get install libmraa1 libmraa-dev libmraa-java python-mraa python3-mraa node-mraa mraa-tools
Nach der Installation aller Abhängigkeiten können wir überprüfen, ob alles ordnungsgemäß funktioniert. Erhöhen Sie dazu VNC - vnc4server ist alles, führen Sie ein Beispiel aus , um mit der Kamera zu arbeiten, und stellen Sie sicher, dass die Kamera funktioniert.
Der letzte Prüfpunkt ist der korrekte Import des Moduls face_recognition . Tatsächlich ist dies unser neuronales ResNet-Netzwerk, das darauf ausgerichtet ist, Personen auf dem Foto zu identifizieren. So sieht es in der Demo des Autors aus:

import face_recognition
Sobald alles fertig ist, entladen wir den Quellcode unserer Anwendung aus dem Repository und machen uns an die Arbeit.
Der Einfachheit halber haben wir alle Bibliotheken als Submodule zu unserem Projekt hinzugefügt. Um sie herunterzuladen, führen Sie das Git-Submodul-Update --init --recursive aus dem Projektverzeichnis aus.
Arbeit
./launcher.py
Wenn Sie die Datenbank zum ersten Mal einschalten, gibt es keine Personen, daher wird das Feld geschlossen. Wir öffnen es manuell (wir haben dafür eine eingebaute Hintertür - ein kleines Loch deutlich gegenüber der Zunge) und führen das Training durch.
Stellen Sie sich dazu vor die Box - die LED an der Vorderseite leuchtet auf und zeigt an, dass sich eine bestimmte Person im Sichtfeld der Kamera befindet.
Wir klicken auf den Schalter, um uns an das Gesicht zu erinnern, und der entsprechende Eintrag wird in der Konsole angezeigt.

Wenn Sie nun die Schublade schließen und davor stehen, erkennt das System das Gesicht und öffnet freudig die Tür.

Zugriffskonsoleneinträge werden in der Konsole angezeigt.

Wenn ein Fremder aufsteht, kann das System ihn nicht erkennen, wodurch die Tür geschlossen bleibt. Es ist eine andere Sache, dass das System ausgehungert werden kann - der Prozentsatz an Fehlalarmen war in unserem Fall ziemlich hoch, und wenn Sie lange Zeit mit einer Reihe verschiedener Objekte in Ihren Händen gehen, öffnet sich das System immer noch.
Dies kann mithilfe des Tiefenkanals behoben werden - er wird in der aktuellen Version nicht verwendet, da es nicht möglich war, ihn stabil zum Laufen zu bringen, und das Intel Joule-Kompatibilitätsproblem zu spät zum Senden war. Der Autor von face_recognition hat eine Genauigkeit von 99,38% für den Benchmark Labeled Faces in the Wild Home gemessen
Fazit
Natürlich kann dieser Proof-Of-Concept erheblich verbessert und seine Funktionalität um ein Vielfaches erweitert werden. Sie können beispielsweise die Protokollierung eines erfolgreichen und nicht erfolgreichen Zugriffs sowie die bequeme Verwaltung über die Weboberfläche hinzufügen.
Das Grundprinzip beim Bau dieses Geräts war: „Ich habe es von dem, was es war, geblendet.“ Wir wollten nur zeigen, dass aus improvisierten Materialien etwas Interessantes gemacht werden kann.
Vielen Dank an Dmitry ( dmitryvodop ) und Sergey für die Arbeit am Software-Teil des Projekts.
Alle Modelle im * .stl-Format und der Quellcode des Programms werden unter der MIT-Lizenz auf GitHub hochgeladen.