Schlagwort: Raspberry Pi

Der magische Spiegel – Gesichtserkennung & allgemeines Update

Nachdem ich hier eine ganze Weile nichts mehr von mir gegeben habe, mal wieder ein kleines Update. Das Dateisystem meiner SD-Karte hat sich vor längerer Zeit mal verabschiedet und ich hatte bis vorgestern keine wirkliche Motivation dazu das System neu aufzusetzen.
Jetzt bin ich allerdings endlich mal dazu gekommen – nun auch mit der neusten Version von Raspbian: „Jessie“ und einem mit dem Original-Code wieder abgeglichenen Spiegelinterface von Michael Teeuw. Kurz zu der neuen Linux Version, ich muss sagen, mir gefällt systemd bisher echt gut, kommt mir sehr viel einfacher vor damit die Prozesse zu verwalten aber darum soll es heute nicht gehen.

Ich habe damals mal den Code von der Raspberry Pi Face Recognition Treasure Box genommen und etwas angepasst, sodass er nicht nur ein Gesicht als berechtigt oder nicht berechtigt erkennt, sondern zwischen Gesichtern unterscheiden kann und kontinuierlich nach Gesichtern sucht, statt nur nach einem Knopfdruck. Diesen veränderten Code habe ich nun auch in den Spiegel eingebaut. Er kann nun also erkennen, wer vor ihm steht, dann eine Begrüßung und Informationen für diesen speziellen Nutzer anzeigen.

Da ich inzwischen relative viele Prozesse habe, die irgendwas machen, habe ich gestern Abend mal noch ein kleines Schema aufgezeichnet, um nicht den Überblick zu verlieren, wer mit wem redet.
Software:Hardware magischer Spiegel

Auf der Software Seite habe ich ganz unten, für die Steuerung von GPIO-Sachen, den mirrorcontroller. Er schaut nach Veränderungen des Bewegungsmelders und überwacht einen Knopf. In Zukunft wird er auch noch die Farben der RGB LED Beleuchtung steuern aber die, muss ich erst noch einbauen. Bewegt sich etwas, wird das Relais des Monitors geschaltet und ein Signal an den Gesichtserkennungsprozess gegeben, welcher dann anfängt Fotos aufzunehmen und sie nach Gesichtern abzusuchen. Erkennt der Prozess ein Gesicht, gibt er dieses an den SocketIOServer weiter, welcher es wiederum an das Webinterface leitet, um dort dann eine Willkommensnachricht und personalisierte Inhalte anzuzeigen. Neben dieser Funktion kann der SocketIOServer noch Online-Banking, um den aktuellen Kontostand des Nutzers anzuzeigen, er sammelt Statistiken zu meinen Vimeo-Videos, ermittelt den vorhandenen Festplattenspeicher auf meinem Server, überwacht die Fritz!Box, um über Anrufe zu informieren und zeigt von meinen Kunden noch zu bezahlende Rechnungen an. In nächster Zeit möchte ich noch Wunderlist einbauen, damit auch meine ToDo’s angezeigt werden können.

Das ist mein aktueller Stand soweit, nachdem ich die letzten Hardwarekomponenten jetzt dann soweit fertig habe, kann es endlich auch mal an das Gehäuse gehen.

Der magische Spiegel – Update

_MG_3464

Ich habe den Raspberry Pi 1 Model A durch einen Pi 2 Model B ersetzt; der Spiegel startet jetzt mehr als doppelt so schnell und die Animationen der Oberfläche sind etwas flüssiger geworden.
Pi2

Da halbtransparenten Spiegel natürlich weniger reflektieren als normale Spiegel, habe ich beschlossen eine LED-Beleuchtung hinter ein bisschen Milchglas in das Gehäuse einzubauen, um die Person vor dem Spiegel zu erhellen und damit noch besser sichtbar zu machen.
LEDs Spiegel

Aktiviert wird die Beleuchtung durch einen Schalter. Ein kurzer Druck aktiviert und deaktiviert das Licht. Ein langer Druck schaltet zwischen zwei Ansichten in der Spiegeloberfläche hin und her.
Schalter Spiegel

Python Unklarheit

Vielleicht hat hier ja irgendjemand ein bisschen mehr Ahnung von Python als ich – vermutlich nicht sonderlich schwer – und kann mir daher erklären, wieso das erste Skript nicht funktioniert, das Zweite hingegen schon. Biteule und ich sind nur soweit gekommen, dass es wohl irgendwas mit dem Threading der GPIO-Callbacks zu tun haben muss aber was jetzt genau das Problem ist, verstehen wir beide nicht. Es ist nicht so, dass zerorpc im ersten Skript beim Aufruf nicht vorhanden ist, immerhin kann es einen Fehler ausgeben (LostRemote: Lost remote after 10s heartbeat), wieso also macht es trotzdem einen Unterschied, an welcher Stelle ich es importiere?

import RPi.GPIO as GPIO
import time
import zerorpc

nodebridge = zerorpc.Client()
nodebridge.connect("tcp://127.0.0.1:4242")

GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN)

def switchview(switchview_taster):
    nodebridge.switchview()

try:
    GPIO.add_event_detect(27, GPIO.FALLING, callback=switchview, bouncetime=600)
    while 1:
        time.sleep(100)
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN)

def switchview(switchview_taster):
    import zerorpc
    nodebridge = zerorpc.Client()
    nodebridge.connect("tcp://127.0.0.1:4242")
    nodebridge.switchview()

try:
   GPIO.add_event_detect(27, GPIO.FALLING, callback=switchview, bouncetime=600)
   while 1:
      time.sleep(100)
var io = require('socket.io').listen(1234);
var zerorpc = require("zerorpc");

var pythonbridge = new zerorpc.Server({
  switchview: function(reply) {
    io.sockets.emit('switchview');
    reply(null);
  }
});

pythonbridge.on("error", function(error) {
  console.error("RPC server error:", error);
});

pythonbridge.bind("tcp://0.0.0.0:4242");

UPDATE 12.02.15 – 14:51:

Der magische Spiegel – EMV Störungen

Kleines Zwischenupdate! Mein Onkel hat mir ein Spiegelmuster besorgt, so sieht das ganze mit Glas davor aus 🙂
Spiegelmuster

Wie es aussieht, habe ich ein paar Probleme mit der elektromagnetischen Verträglichkeit meiner Komponenten…
Ich habe vor kurzem einen Taster zum herunterfahren des Spiegels eingebaut, der folgendermaßen funktioniert: Ein GPIO-Pin ist ständig auf 3.3V gesetzt, wenn ich den Taster drücke, wird der Pin geerdet und geht auf 0V. Ein Pythonskript bemerkt das und fährt den Raspberry herunter. Seltsamerweise passiert das auch jedes mal, wenn der Bewegungsmelder meinen Monitor anschaltet. Ich dachte zunächst irgendetwas stimmt mit meiner Schaltung nicht und überlegte daher, zusammen mit meinem Onkel, wie die 230V des Monitors den Pi über das Relais beeinflussen könnten. Eine andere Überlegung war, dass der Monitor zuviel Strom zieht und deswegen irgendwie kurz die 3.3V zusammenbrechen- wieso auch immer – da es, wie ich später bemerkt habe, auch passiert, wenn ich den Monitor nicht über das Relais anschließe.

alte Lampe
Gerade habe ich dann aber diese alte Lampe geholt, da ich etwas Licht gebraucht habe, um richtig beurteilen zu können, wie es sich mit der Reflektivität und der Durchlässigkeit verhält, wenn man den Spiegel normal verwendet. Naja. Mit dem, was dann passiert ist, habe ich nicht so ganz gerechnet…
Jedes mal, wenn ich die Lampe entweder ein oder aus schalte (und sie an einer bestimmten Stelle steht), geht der Monitor für 2 Sekunden aus, auf den Raspberry Pi, scheint sie keine Auswirkung zu haben aber es würde nahe liegen, dass es sich bei dem anderen Problem, um etwas ähnliches handelt…

UPDATE 22:22
Ich habe noch ein bisschen mit der Lampe oder besser ihrem Kabel experimentiert. Wenn ich das Kabel über den Pi hänge, passiert beim Anschalten das Selbe, wie beim Einschalten des Monitors. Es liegt also vermutlich tatsächlich an irgendwelchen Abstrahlungen der Stromkabel.

Der magische Spiegel – Raspberry Pi

Ich bin momentan mit einem kleinen Projekt beschäftigt und dachte ich schreibe daher einfach mal wieder einen Artikel! 🙂

In meinem Zimmer steht seit geraumer Zeit ein DVI-Monitor herum. Er war von Anfang an mit einem Raspberry Pi verbunden aber hatte immer wieder wechselnden Aufgaben. Zu beginn hatte ich eine XBMC Installation darauf und benutzte den Bildschirm zum Filme schauen und Musik hören mit meiner Anlage. Danach hatte ich mal den Plan ihn als Informationskiosk einzusetzen, irgendwann fand ich es dann aber doch etwas seltsam und unnötig ein Display herumstehen zu haben, das nur Informationen anzeigt (mal abgesehen davon, dass ich sowieso nicht wirklich wusste, was ich darauf eigentlich anzeigen sollte), also funktionierte ich das Setup wieder in ein Mediencenter um.

Vor kurzem habe ich dann – auf der Suche nach Raspberry Pi Projekten – den „Magischen Spiegel“ von Michael Teeuw wiederentdeckt und ganz spontan beschlossen mir auch so einen zu bauen. Ich habe also das Gehäuse des Monitor auseinandergeschraubt und angefangen zu überlegen, wie ich den Pi am besten darauf unterbringen konnte, an Michaels Interface habe ich auch noch ein bisschen etwas verändert. Das Original zeigte zufällige Komplimenten aus einer Liste, da ich aber eher Tageszeit bezogene Texte wollte, habe ich diese Funktion noch schnell eingebaut (meine erste Git-Pull-Requests; yeah!).

Ich hatte ein bisschen bedenken einen Bildschirm im Zimmer zu haben, der rund um die Uhr läuft, selbst, wenn keiner da ist, der überhaupt darauf schauen könnte, also habe ich mir ein Relais und einen Bewegungsmelder bestellt und ein kleines Pythonskript geschrieben, das den Monitor nur anschaltet, wenn sich auch etwas bewegt; Jonathan vom Studio Einz hat mir währenddessen den benötigten Mini-Schaltkreis zusammengelötet, der, mit den ca. 3 Volt der GPIO-Pins, den 5V Stromkreis für das Relais aktiviert (Man beachte die wunderschöne LED! Wir hatten leider keine Diode zur Hand :D)

Transistor Board

Relais

Bewegungsmelder

Raspberry Pi

Was manche FRITZ!Box Besitzer eventuell wissen: Die Box besitzt einen Anrufsmonitor, den man zum Beispiel per Node.js (sehr praktisches Modul dafür!) abfragen kann. Die eingehenden Anrufe leite ich mithilfe von Socket.IO an das Webinterface des Spiegels weiter, welches dann diese wunderschöne Meldung anzeigt:

Anruf

Eine Meldung, die mich darauf hinweist, wenn jemand an der Tür klingelt, existiert im Code auch schon, bevor der funktioniert, muss ich aber erst noch die Klingel an die FRITZ!Box anschließen. Soweit zu meinem momentanen stand. Jetzt brauche ich noch den Spiegel und ein Gehäuse für das Ganze.

Ah! Falls jemand eine Idee haben sollte, was man noch so sinnvolles auf einem Spiegel anzeigen könnte: Immer her damit!

Copyright © 2024 MeType

Theme von Anders Norén↑ ↑