… wer ist die Schöne vor dieser Wand?
In dieser Ausgabe lernt der Zauberspiegel Sie kennen, denn wir trainieren die Gesichtserkennung. Außerdem lernt der Antlitzreflektor, was er für Sie persönlich tun soll. Hegen Sie aber keine zu große Hoffnung: Er wird weder für Sie wie einst der Jäger auf die Pirsch nach der noch schöneren Königstochter gehen noch Ihre Wohnung putzen.
von Heinz Behling
Kurzinfo
Darum geht’s
» Gesichtserkennung trainieren
» Software-Module benutzerabhängig starten
» Monitor nur bei Bedarf einschalten
Checkliste
Zeitaufwand:
1 bis 2 Stunden
Kosten:
keine
Werkzeug:
PC mit Netzwerkanschluss im gleichen Netz wie der Spiegel
Verwandte Artikel
Den ersten Teil des Magicmir ror-Artikels „Spieglein, Spieglein an der Wand …“ aus Make 4/2017 ab Seite 26 zum kostenlosen Download über den Link.
Eine Anleitung zum Behebe n von Schärfeproblemen der Raspberry-Kamera finden Sie im Online-Artikel „ Raspberry-Kamera nachschärfen “ zum kostenlosen Download über den Link.
make-magazin.de/xjd2
In der Grundeinstellung der Spiegel-Software, so wie Sie sie im ersten Teil (siehe Make 4/17, ab Seite 26 ) überspielt haben, erkennt er Sie nur als „Fremder“. Das wird sich nun ändern. Die Gesichtserkennung wird mit Probefotos auf alle seine Benutzer trainiert. Das dauert nicht lange, denn pro Spiegelkunde sind nur etwa 20 Schnappschüsse nötig, damit hinterher alles sicher funktioniert. Wichtig dabei: Der Spiegel sollte an seinem endgültigen Bestimmungsort sein und vor allem sollten die Beleuchtungsverhältnisse auch in etwa der späteren Situation entsprechen. Ist der Spiegel also beispielsweise fürs Badezimmer vorgesehen, hängen Sie ihn dort auf und schalten Sie die Lampen ein, die sie dort normalerweise auch benutzen, selbst wenn das Zimmer vom Tageslicht hinreichend beleuchtet sein sollte. Sie können den Spiegel zwar auch an anderer Stelle trainieren, müssen dann aber mit einer eventuell schlechteren Erkennungsrate rechnen.
Ach, und noch etwas: Keine Angst, dass Sie einen Computer im Badezimmer aufhängen, der stets mit eingeschalteter Kamera Bilder macht und zu einem der großen Datensammler wie Google und Co. schickt. Die Gesichtserkennung wird vom Raspberry erledigt, Ihre Probefotos landen nur auf seiner Speicherkarte und nicht im Internet. Eine Netzwerkverbindung braucht der Spiegel allerdings trotzdem, um seine Aufgaben erledigen zu können, also beispielsweise Fußballergebnisse oder Nachrichten zu holen. Damit das möglichst sicher ist, sollten Sie die Firewall-Funktion in Ihrem Router so einstellen, dass der Spiegel zwar einen Internetzugang bekommt, aber von außen niemand auf ihn zugreifen kann. Dabei hilft Ihnen die Betriebsanleitung Ihres Routers weiter.
Brille und Frisur – ein Problem?
Brillen mit klaren Gläsern beeinträchtigen die Gesichtserkennung kaum, solange die Augen vollständig sichtbar sind. Schmale Lesebrillen, die nur einen Teil des Sichtfelds abdecken, können Probleme bereiten. Dann kann die Gesichtserkennung den Pupillenabstand eventuell nicht sicher bestimmen. Sonnenbrillen oder verspiegelte Gläser mag die Gesichtserkennung überhaupt nicht.
Falls Sie die Gesichtserkennung in eigenen Programmen verwenden möchten, schauen Sie sich das Programm „facerecognition.py“ im Verzeichnis des Trainingsprogramms an.
Falls Sie einmal die Frisur oder die Haarfarbe wechseln, spielt das keine Rolle. Die Software schneidet aus den Kamerabildern ohnehin nur das Gesicht heraus. Lediglich ein bis unter die Augenbrauen reichender Pony irritiert die Erkennung etwas.
Männliche Gesichtsfrisuren (auch als Bärte bekannt) haben nur geringen Einfluss auf die Trefferrate, solange beide Mundwinkel erkennbar sind. (Selbst mein nicht alltäglicher Haarwuchs beeinflusst die Trefferrate nicht.)
Die Kontaktaufnahme
Sie müssen den Spiegel dazu nicht aufschrauben, denn alle Konfigurationsarbeiten erledigen Sie von einem PC aus über die Netzwerkverbindung, der zum Trainieren der Gesichtserkennung allerdings in Griffnähe zum Magicmirror stehen sollte. Zusätzlich brauchen Sie die IP-Adresse des Spiegels, die Sie sich notiert haben, wie im ersten Teil des Artikels zum Magicmirror beschrieben. Falls nicht, kann Ihnen der Router Ihres Netzwerks weiterhelfen. Wie Sie die IP-Adresse eines an ihm angeschlossenen Geräts herausfinden, sagt Ihnen die Bedienungsanleitung des Routers.
Falls Sie mit einem Windows-PC arbeiten, beginnen Sie mit Schritt 1. Linux-Benutzer starten erst bei Schritt 3.
1 Terminal-Programm installieren
Damit ein Windows-PC mit Ihrem Spiegel in Kontakt treten kann, braucht er ein Programm wie zum Beispiel „Putty“. Sie können es über den Link in der Kurzinfo downloaden. Speichern Sie die zu Ihrem Computer passende Version auf der Festplatte und installieren Sie das Programm anschließend.
2 Terminal starten
Dann starten Sie das Programm wie üblich über den Windows-Button und die Programmliste. Tragen Sie die IP-Adresse des Spiegels ein und geben Sie der Session einen passenden Namen (zum Beispie l „Magicmirror“). Achten Sie darauf, dass als Connection Type „SSH“ angewählt ist. Ein Klick auf Save speichert die Einstellungen. Ein Doppelklick auf „Magicmirror“ in der Liste öffnet schließlich ein Terminal-Fenster und stellt die Verbindung zum Spiegel her. Als Benutzernamen geben Sie „pi“ ein, tippen auf die Eingabetaste und geben danach das Passwort „magicmirror“ ein, wieder gefolgt von der Eingabetaste. Von hier an ist die Vorgehensweise genau wie unter Linux. Sie können daher mit dem übernächsten weitermachen.
3 Linux-Terminal starten
Tippen Sie bei gedrückter STRG- und ALT-Taste auf T. Daraufhin erscheint das Terminal-Fenster. Geben Sie den Befehl ein:
ssh pi@aaa.bbb.ccc.ddd
Für aaa.bbb.ccc.ddd setzen Sie die IP-Adresse des Magicmirrors ein. Nach dem Drücken der Eingabetaste folgt die Passwort-Abfrage. Es lautet „magicmirror“.
4 Erste Anmeldung und Passwort ändern
Wichtig: Damit de r Spiegel möglichst sicher ist vor Angriffen übers Netz, sollten Sie als Nächstes das Passwort ändern. Geben Sie dazu den Befehl
passwd
ein. Danach werden Sie nach dem bisherigen Passwort und zweimal nach dem gewünschten neuen Passwort gefragt. Tippen Sie das entsprechend ein. Von nun an müssen Sie bei der Anmeldung das neue Passwort verwenden!
5 Vorhandene Benutzerdaten löschen
Da die Magicmirror-Software ja gleich nach dem Booten des Spiegels automatisch startet, müssen Sie sie erst beenden. Dies geschieht mit dem martialischen Befehl:
killall electron
Danach wechseln Sie mit
cd MMM-Facial-Recognition-Tools-master/
ins Verzeichnis des Trainingsprogramms. Der Spiegel ist übrigens bereits trainiert, allerdings nicht auf Sie, sondern auf mein Gesicht. Da nicht damit zu rechnen ist, dass ich Sie besuchen werde, sollten die vorhandenen Trainingsdaten gelöscht werden. Das geschieht mit dem Befehl:
rm training.xml
Da es auch unwahrscheinlich ist, dass jemand von Ihnen Wert auf mein Antlitz legt, löschen Sie auch meine Probefotos mit
rm -rf ./training_data/Heinz
Achten Sie auf den Punkt vor dem ersten Schrägstrich!
6 Training starten
Nun wird es er nst: Starten Sie das Aufnahmeprogramm für die Probebilder mit
python capture.py
Danach geben Sie zur Auswahl des Gesichtserkennungs-Algorithmus eine 1 und anschließend den Namen ein, mit dem der Spiegel sie später begrüßen soll.
7 Probebilder aufnehmen
Stellen Sie sich nun so vor den Spiegel, wie sie es später auch tun werden. Die Tastatur des PC sollte in Reichweite sein. Falls das nicht möglich ist, muss Ihnen jemand helfen. Denn zur Aufnahme eines Probebildes müssen Sie jeweils die Eingabetaste drücken. Schauen Sie dabei zunächst mittig auf den Spiegel. Beim nächsten Bild blicken Sie in eine obere Ecke des Spiegelrahmens, dann in die gegenüberliegende Ecke und so weiter. Machen Sie auch Bilder mit offenem und geschlossenem Mund, Ihrem schönsten Lächeln und leicht schräg gestelltem Kopf. Je mehr Fotos Sie aufnehmen, um so treffsicherer wird die Gesichtserkennung. Achtung: Es darf nur jeweils ein Gesicht für die Spiegelkamera sichtbar sein!
Wenn Sie genügend Fotos aufgenommen haben (circa 20 Stück reichen), tippen Sie bei gedrückter CTRL-Taste auf C. Das beendet die Fotoaufnahme.
8 Bild-Analyse starten
Geben Sie nun den Befehl
python train.py
ein. Auf die erste Frage des Programms antworten Sie mit 1. Dann braucht das Programm etwas Zeit (bis zu einigen Minuten), um die wichtigsten Merkmale des Gesichts zu bestimmen und zu speichern. Wenn es damit fertig ist, gibt es die Namen aller bislang trainierten Benutzer aus. (Falls dies der erste Trainingsdurchgang ist, erscheint natürlich nur ein Name.) Notieren Sie sich die Namen in der vom Programm angegebenen Reihenfolge.
9 Gesichtserkennung testen
Die Benutzernamen tr agen Sie nun in die Konfigurationsdatei des Trainingsprogramms ein. Geben Sie dazu den Befehl
nano /home/pi/MMM-Facial-Recognition-Tools-master/lib/config.py
ein. In die Zeile, die mit „users =“ beginnt, setzen Sie Namen aus dem vorigen Schritt (siehe Bild) und speichern per Druck auf F2, J und die Eingabetaste. Testen Sie die Gesichtserkennung mit
DISPLAY=:0 python facerecognition.py
Auf dem Spiegel erscheint wieder das Kamerabild. Schauen Sie in den Spiegel. Nach einigen Sekunden sollte ein zweites Bild erscheinen, auf dem nur Ihr Gesicht und Ihr Name zu sehen ist. In diesem Fall hat der Spiegel ein Gesicht erkannt. Im Terminalfenster auf dem PC sollte Ihr Name angezeigt werden. Falls die Erkennung zu lange braucht oder gar nicht funktioniert, sollten Sie mehr Bilder aufnehmen. Wiederholen Sie dann das Verfahren ab Schritt 4.
Werden Sie sicher erkannt, wiederholen Sie das Training ab Schritt 4 für alle weiteren Benutzer.
10 Benutzernamen eintragen
Ist der Spiegel auf alle Benutzer trainiert, müssen Sie deren Namen noch der Magicmirror-Software mitteilen. Das geschieht in der Datei „config.js“. Um sie zu bearbeiten, geben Sie den Befehl
nano /home/pi/Magicmirror/config/config.js
ein. Anschließend scrollen Sie nach unten bis zur Zeile
users: ['Heinz'],
Ersetzen Sie nun meinen Namen durch vom Trainingsprogramm genannte. Verwenden Sie unbedingt die gleiche Reihenfolge:
users: ['Daniel', 'Helga', 'Florian', 'Alexander'],
Danach speichern Sie die Datei, indem Sie die Tasten F2, J und die Eingabetaste drücken. Dann starten Sie den Raspberry mit
sudo shutdown -r now
ein. Testen Sie, ob der Spiegel Sie erkennt: Schauen Sie einfach ein paar Sekunden hinein. Er sollte Sie dann mit Ihrem Namen begrüßen. Falls nicht: Das Training können Sie jederzeit wiederholen und dadurch mehr Bilder anlegen.
Feintuning bei der Gesichtserkennung
Wenn der Spiegel ein Gesicht nicht sicher erkennt, gibt es ein paar Methoden, die Trefferrate zu erhöhen.
1 Training erweitern
Am wichtigsten sind die Trainingsbilder. Daher sollten Sie bei mangelnder Erkennung das Training erneut starten und weitere Bilder aufnehmen. Die zuvor gespeicherten Fotos bleiben dabei erhalten. Achten Sie darauf, dass Sie den richtigen Benutzernamen verwenden in genau derselben Schreibweise wie im früheren Training.
Dabei kommt es mitunter zu kuriosen Effekten: Falls etwa während des Trainings ein Bild mit einem Gesicht hinter Ihnen hängen sollte, kann die Gesichtserkennung fälschlicherweise dieses Bild als Benutzergesicht betrachten. Das geht dann natürlich später schief. Achten Sie auch darauf, dass niemand sonst im Blickfeld der Kamera steht.
2 Trainingsbilder kontrollieren
Führt auch das noch nicht zum gewünschten Erfolg, kontrollieren Sie die Trainingsfotos. Unter ungünstigen Bedingungen speichert die Software nämlich gar nicht das Gesicht, sondern irgendetwas anderes, was es für ein Gesicht hält. (Erwarten Sie keine Intelligenz von einem Computer!) Die Fotos kontrollieren Sie via SSH-Netzwerkverbindung (also mit Putty beziehungsweise dem Linux-Terminalfenster). Geben Sie dann am PC diese beiden Befehle ein:
cd /home/pi/MMM-Facial-Recognition-Tools-master/training_data/Benutzername/
DISPLAY=:0 pcmanfm
Für Benutzername müssen Sie natürlich den entsprechenden Namen einsetzen. Auf dem Spiegel-Bildschirm erscheint nun ein Fenster, das alle Trainingsbilder anzeigt. Kontrollieren Sie, ob auf allen das komplette Gesicht zu sehen ist. Komplett heißt in diesem Zusammenhang: Augen, Nase und Mund müssen mindestens sichtbar sein! Ist das bei einem oder mehreren Bildern nicht der Fall, notieren Sie sich deren Namen (er steht jeweils unter dem Bild). Diese Bilder löschen Sie im Anschluss. Im Beispiel sind es die Bilder „059.pgm“ und „061.pgm“. Der Befehl zum Löschen lautet dann:
rm 059.pgm 061.pgm
Danach starten Sie den Raspberry mit
sudo shutdown -r now
neu. Checken Sie, ob der Spiegel den jeweiligen Benutzer nun besser erkennt.
3 Lichtverhältnisse
Falls die Trefferrate immer noch nicht besserer ist, liegt das Problem vielleicht bei der Beleuchtung. Die Spiegel-Kamera muss Augen, Nase und Mund sicher erkennen können. Kommt das Licht extrem von oben oder von der Seite, können Stirn oder Nase so starke Schatten ins Gesicht werfen, dass die Gesichtserkennung Probleme bekommt. Das können Sie aber beim Training anhand des angezeigten Kamerabildes recht gut einschätzen. Kontrollieren Sie auch, ob das Kamerabild scharf ist. Falls die Raspberry-Kamera auf eine relativ große Entfernung scharf gestellt ist, sollten Sie das ändern. Wie es geht, lesen Sie im kostenlos downloadbaren Artikel „Raspi-Kamera nachgeschärft“ (siehe Links unter der Kurzinfo).
Was Ihr wollt …
Der Spiegel soll für jeden ihm bekannten Benutzer spezielle Inhalte anzeigen. Dazu zunächst etwas Vorwissen: Alles, was der Spiegel anzeigen soll, wird durch Software-Module (siehe Kasten „MagicMirror-Module“) bewerkstelligt. Die wichtigsten davon sind bereits auf der Speicherkarte vorhanden. Sie müssen lediglich aktiviert werden (mehr dazu in der nächsten Ausgabe). Im folgenden erfahren Sie, wie Sie einen Nachrichtenticker so einstellen, dass er für jeden Benutzer andere News anzeigt.
1 Vorarbeiten
Wie bereits bei der Installation der Gesichtserkennung müssen Sie eine Verbindung von Ihrem PC zum Spiegel herstellen, also Putty (Windows) oder ein Terminalfenster (Linux) öffnen. Außerdem laden Sie wieder die Konfigurationsdatei des Spiegels „config.js“.
2 Bearbeiten der Modul-Konfiguration 1
Wenn Sie in dieser Datei etwas nach unten scrollen, gelangen Sie zum Abschnitt mit der Überschrift „modules“. Darunter folgen die Konfigurationseinträge sämtlicher installierten Module. Sie beginnen immer mit einer öffnenden geschweiften Klammer. In der nächsten Zeile steht dann der Modulname und alle weiteren Konfigurationseinstellungen. Zum Schluss folgt eine schließende geschweifte Klammer. Als erstes Modul steht immer die Gesichtserkennung „MMM-Facial-Recognition“. Hier sollten Sie nur eine Zeile ändern, und zwar die mit den Benutzernamen. Tragen Sie alle Namen in der Reihenfolge ein, die Ihnen das Analyseprogramm in Schritt 6 auf Seite 106 gemeldet hatte.
3 Bearbeiten der Modul-Konfiguration 2
Wir wollen ja den Nachrichtenticker bearbeiten. Das Modul heißt „newsfeed“. Scrollen Sie nach unten, bis Sie den entsprechenden Eintrag finden. Für die Zusammenarbeit mit der Gesichtserkennung sind die Zeilen „position“ und „classes“ wichtig. Die erste gibt an, wo auf dem Bildschirm die Anzeige des jeweiligen Moduls erscheinen soll (siehe Tabelle), die zweite sagt, für welchen Benutzer das Modul aktiv werden soll. Gehen wir davon aus, dass für den Benutzer Daniel die Nachrichten aus der Make-Redaktion angezeigt werden sollen. Dann muss die Zeile „classes“ so geändert werden:
classes: 'Daniel',
Falls das Modul in dieser Form bei mehreren Benutzern angezeigt werden soll, setzen Sie deren Namen einfach durch Leerzeichen getrennt in die Zeile, also zum Beispiel:
classes: 'Daniel Helga',
Dann speichern Sie die Datei wie bekannt und starten den Raspberry neu. Wenn sich danach Daniel vor den Spiegel stellt, erscheint der Newsticker am unteren Bildschirmrand.
4 Anzeigeposition ändern
Tabelle: Positionen im MagicMirror
Der Wert in der Positionszeile eines Moduls bestimmt, wo es angezeigt wird. Beim Newsticker erfolgt das bislang am unteren Bildrand (bottom_bar) . Möchten Sie es woanders sehen, ändern Sie den Wert entsprechend der Tabelle.
5 Ein Modul für mehrere Benutzer
Soll der Nachrichtenticker mit unterschiedlichem Inhalt für jede Person erscheinen, wird die Sache etwas aufwendiger: Sie müssen dann nämlich den Moduleintrag in der Datei config.js für jeden Benutzer wiederholen. Dazu ein Beispiel: Daniel soll weiterhin den Newsticker von Make erhalten, Helga hingegen die Tagesschau-Nachrichten. Dann gehen Sie so vor: Laden Sie erneut die Datei config.js mit
nano /home/pi/Magicmirror/config/config.js
Scrollen Sie nach unten bis zum Eintrag des Newsticker-Moduls. Setzen Sie den Cursor auf den Anfang der Zeile mit der öffnenden geschweiften Klammer vor dem Modulnamen. Klicken Sie dann mit der Maus auf den Cursor und halten Sie die linke Maustaste gedrückt. Führen Sie die Maustaste bis zur schließenden geschweiften Klammer am Ende des Moduleintrags. Dort lassen Sie die Maustaste los und tippen bei gedrückter Strg-Taste auf C.
Dann setzen Sie den Mauszeiger mit Hilfe der Cursor-Tasten hinter die schließende geschweifte Klammer und tippen ein Komma gefolgt von der Eingabetaste. Klicken Sie dann mit der rechten(!) Maustaste auf den Cursor. Die Kopie des Moduleintrags wird so eingefügt. Anschließend ändern Sie den Namen in der classes-Zeile dieser Kopie zum Beispiel auf „Helga“. Da Helga ja die Tagesschau-Nachrichten sehen soll, müssen Sie noch die Adresse der Nachrichtenquelle ändern. Die steht in der url -Zeile. Im Moment sehen Sie dort zwei solcher Zeilen. Die erste mit den Make-News, die zweite mit der Tagesschau-Adresse hat noch zwei Schrägstriche am Anfang, sie ist auskommentiert. Entfernen Sie die beiden Schrägstriche und setzen Sie stattdessen zwei solche vor die URL-Zeile mit der Make-Adresse. Danach speichern Sie die Datei wie bereits bekannt und starten den Raspberry neu. Und schon erhält Daniel News von Make, Helga hingegen von der Tagesschau.
6 Modul für alle bekannten Benutzer
Einige Module wie die Uhr, der Kalender, Wetterdaten und -vorhersage interessieren sicher alle Benutzer. Kein Problem: Setzen Sie einfach alle Benutzernamen in die classes-Zeile der entsprechenden Module, dann bekommt es auch jeder bekannte Benutzer angezeigt.
Monitor bei Bedarf ausschalten
Der Monitor im Spiegel hat einen Leistungsbedarf von etwa 20 Watt. Das ist zu viel, um ihn ständig laufen zu lassen. Er ist ja auch nur notwendig, wenn jemand vor dem Spiegel steht und er etwas anzeigen soll. Daher habe ich die Spiegel-Software so modifiziert, dass die Gesichtserkennung den Bildschirm ein- und ausschalten kann. So aktivieren Sie diese Funktion:
1 Gesichtserkennungskonfiguration laden
Starten Sie, fal ls noch nicht geschehen, das Terminalfenster. Geben Sie darin diesen Befehl ein:
nano /home/pi/Magicmirror/modules/MMM-Face-Recognition/facerecognition/facerecognition.py
2 Gesichtserkennung modifizieren
Suchen Sie die Ze ile
# os.system("/usr/bin/monitor.sh stop")
und löschen Sie das Doppelkreuz (Raute) an deren Anfang. Danach scrollen Sie weiter nach unten bis zur Zeile
# os.system("/usr/bin/monitor.sh start")
und entfernen auch dort das Doppelkreuz. Dann speichern Sie die Datei mit F2, J und der Eingabetaste und starten den Raspberry neu.
Nach dem nächsten Start ist erst einmal alles wie bisher. Hat der Spiegel jedoch einmal ein Gesicht erkannt und verlässt die Person den Magicmirror, schaltet der Raspberry nach wenigen Sekunden den Monitor ab. Der Stromverbrauch sinkt dadurch auf etwa 3 bis 4 Watt.
Damit ist der Zauberspiegel nun schon deutlich nützlicher geworden. Er kann Ihnen verraten, was in der ganzen Welt so geschieht, nicht nur hinter den sieben Bergen …
In der nächsten Folge erfahren Sie dann, wie man weitere Module einbaut. Wie wäre es zum Beispiel mit einer Diashow zu Weihnachten? Dann folgt endlich die Antwort auf die Frage: Wer hat die schönste Tanne im ganzen Land? Bis dahin viel Spaß beim morgendlichen Rasieren, Frisieren und Informieren. — hgb