Seite 1 von 1

Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 14:19
von lopo
Hallo zusammen,

auf der Suche nach Lösungen habe ich dieses Forum gefunden.
Meine Katze hat mich ganz dolle lieb und bringt mir fast täglich ihre Spielsachen nach Hause.

Als Grundlage diverser Lösungen mit Raspberry (JoakimSoderberg - catcierge, Tony DiCola - pi-facerec-box, PiVision......) würde ich gern eine andere Idee mit der eingebauten Katzentür mit 12cm langem Tunnel verwirklichen:
- Per PIR Sensor soll die NoIR Kamera ausgelöst werden (funktioniert) und vorher IR LED's eingeschaltet werden (sollte kein Problem sein)
- Per GPOI soll ein Servo gesteuert werden um die Tür auf der Innenseite zu verriegeln (funktioniert)

Wo ich nun aber, auch auf Grund meiner mangelhaften Englischkenntnisse scheitere, ist der Punkt Bildauswertung.
Mit OpenCV kann der PI zwar inzwischen Gesichter erkennen, aber keine Katze....
Ich denke, das schlaueste wäre ein schneller Vergleich zweier Bilder. Wenn die Katze durch den Tunnel reinkommt, müsste ihr Profil eigentlich immer an der fast gleichen Stelle in der Höhe sein. Die Position könnte ich eventuell mit -roi 0.5,0.5,0.25,0.25 begrengen, dass es "nur ein S/W Foto" wird mit --colfx 128:128 festlegen.
Nun gäbe es die Möglichkeit per (aus Imagmagick) compare -metric rmse a.jpg b.jpg null: die zwei Fotos zu vergleichen, doch die Werte werden nur im Terminal ausgegeben, auch die Umleitung mit >> diff.txt ist nicht möglich. Mein Gedanke war, per Schleife die diff.txt auszulesen, einen Grenzwert festzulegen und entsprechend den Servo zu steuern.
Was ich nun suche, ist eine Möglichkeit die Differenz der Foto's zu bestimmen und in eine Datei um zu leiten.

Würde so etwas mit Python gehen? Hat jemand eine Idee dazu?

Viele Grüsse
lopo

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 14:57
von snafu
Ich kann dir fachlich leider nicht weiterhelfen, möchte aber erwähnen, dass ich die Idee super finde...! :mrgreen:

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 15:03
von lopo
Hi snafu,

dann bist Du auch Katzenliebhaber?! :P

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 16:50
von snafu
Nee, ich bevorzuge eher Hunde. Aber ich weiß trotzdem, dass Katzen gerne mal tierische Geschenke nach Hause bringen. Ich fand die Idee an sich einfach originell. Und beim Lesen deiner detaillierten Gedankengänge zu dem Thema musste ich schmunzeln.

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 17:35
von Sirius3
@lopo: die Ausgabe von compare läßt sich genauso umleiten, wie üblich. Es kann nur sein, dass der Text auf stderr statt auf stdout geschrieben wird, um stdout für das Ausgabebild frei zu haben.

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 17:37
von lopo
Hi snafu,

was bei den erwähnten anderen Lösungen etwas nervt:
Bei der pi-facerec-box nimmt Tony DiCola Raspbian testing. Nach der Installation/Upgrade funktionieren fast alle Module von OpenCV nicht.
train.py schreibt zwar:
eading training images...
Read 0 positive images and 400 negative images.
Training model...
Training data saved to training.xml
Aber die Kamera geht nicht einmal an, ich hatte erwartet, dass ein oder mehrere Foto's zum Training "geschossen" werden, um z.B. die Katze "anzulernen" wenn sie im Tunnel ist.
Irgendwie habe ich Mühe, die Software zu verstehen.
Bei catcierge ist es ähnlich: Der Entwickler hat einen RFID Leser selbst gebaut, aber das will ich nicht, weil die Katzentür den selbst hat.
Bei dem kompilieren kommen dann auch Fehler ohne Ende.
Eines der Probleme ist halt auch, je nach alter des Projekts ist es für Raspberry 1, b, b+ oder 2.
Was sich nie im Voraus sagen lässt, hab ich das Gefühl.

Gruss
lopo

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 17:43
von lopo
Hi Sirius3,

öhm, könntest Du mir das eventuell näher erklären?
Du scheinst da was zu wissen, was ich nicht weiss. :K Oder den Wald nicht sehe.....
compare -metric rmse a.jpg b.jpg null: und dann? Eventuell wäre mein Problem schon gelöst.
compare ist bei der Bildgrösse von ~75 KB und S/W recht fix, etwa 1 Sek.

Gruss
lopo

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 18:15
von Sirius3
@lopo: Du mußt halt statt stdout stderr auslesen:

Code: Alles auswählen

_, output = subprocess.Popen(["compare", "-metric", "rmse", bildA, bildB, "null"], stderr=subprocess.PIPE).communicate()
oder wie auch immer Du das in Deinem Programm bisher gelöst hast.

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 20:20
von lopo
Hi Sirius3,

Dein Tip war super!!! Danke!
Allerdings: ich mach das erstmal in der Shell.

Code: Alles auswählen

#!/bin/bash
    raspistill --colfx 128:128 -w 480 -h 240 -q 50 -t 5000 -vs -o snapshot.jpg
    compare -metric rmse image_positiv.jpg snapshot.jpg null: &> diff.txt
exit 0
Die Shell geht ganz erheblich schneller als Python, allein schon das Foto "schiessen".

In der diff.txt nun: 23223.8 (0.354372)
Nun noch mit grep und sed bearbeiten, damit nur der Wert 0.354372 in der Datei steht.

Ich glaub, Python wäre schon sehr interessant, aber da muss ich noch viel lesen.

Gruss lopo

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 20:59
von snafu
Naja, statt `grep` und `sed` könnte man halt Python-Boardmittel zur String-Verarbeitung nutzen. Eine Befehlszeile in einen Aufruf des `subprocess`-Moduls in Python zu übersetzen, ist auch nicht wirklich kompliziert, wenn man einmal weiß, wie man es machen muss.
lopo hat geschrieben:Die Shell geht ganz erheblich schneller als Python, allein schon das Foto "schiessen".
Falls es hier um die Verarbeitungszeit geht, so kann ich mir das nur schwer vorstellen. Wenn man nicht etwas grundlegendes falsch gemacht hat, dann ist der Programm-Aufruf aus Python heraus ähnlich schnell wie aus einere Shell. Es ist halt nur schneller als Shell-Befehl hingeschrieben.

Wie gesagt: Das Aufbereiten von Progamm-Ausgaben ist mit Python oftmals schöner als mit den üblichen Shell-Tools. Lediglich das Umleiten des Ausgabeflusses (Stichwort: Pipes) ist mit den entsprechenden Umleitungssymbolen der Shell hübscher anszusehen. Dies müsste man bei `subprocess` in entsprechende Parameter und Methoden-Aufrufe übersetzen.

Re: Katzentür mit Mauserkennung

Verfasst: Donnerstag 4. Juni 2015, 22:58
von lopo
Hi snafu,

ich gugg das in den nächsten Tagen an, versprochen.
Aber als erstes muss erst mal der eine PI laufen und die Katzentür dicht machen.
Da ich noch mal den gleichen habe, kann ich dort mit Python anfangen zu lernen.
Bisher bisher habe ich mir nur das eine und andere angesehen .... und meist gegrübelt: was machen die da???
Alles was nicht die Hardware des Pi betrifft, kann ich hier am Laptop machen - bin ausschliesslich mit Linux unterwegs.

Gute Nacht und vielen Dank für Heute
lopo