Posts mit dem Label Image werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Image werden angezeigt. Alle Posts anzeigen

Freitag, 27. Dezember 2019

Einfache Bewegungserkennung auf dem Raspberry Pi

Mit dem Thema Bewegungserkennung wird gerne KI in Verbindung gebracht, aber Bewegungserkennung geht auch mit normalen Computer Vision Mitteln.

Es ist sehr einfach möglich, Bewegungserkennung mit einfachen UNIX Programmen durchzuführen. Ich benutze hier ImageMagic. Folgend ein Beispiel, das auf einem Raspberry Pi Zero W läuft. Hier ein Auszug aus dem BASH Script:

raspistill -o                      camImages/$DATE.jpg
convert    -normalize -blur 0x8    camImages/$DATE.jpg blur/$DATE.jpg
compare    -fuzz 8%   -metric RMSE nb3.jpg nb4.jpg x.jpg

  1. Zuerst muss ein Bild aufgenommen werden.
  2. Dann wir das Bild bzgl. des Histogramms normalisiert und mit dem Weichzeichen wird das Bildrauschen des Kamerasensors eliminiert.
  3. Zuletzt wird das aktuelle Bild mit dem Vorgängerbild verglichen. Die Metrik gibt an, wie stark sich die Bilder unterscheiden, hier muss ein passender Schwellwert (-fuzz 8%) eingestellt werden.

Mit dieser Lösung werden Bewegungen in Bildern zuverlässig erkannt. Hier ein Beispiel für ein Differenzbild.

Die Nachteile:
  1. Dieser Lösung ist die hohe Laufzeit von ca. 75 sec auf Raspberry Zero W. 
  2. Die Normalisierung ist noch nicht optimal, Änderungen in der Beleuchtung werden häufig als Bewegung erkannt, das kann zur Zeit nur durch ein Anhaben des Schwellwertes kompensiert werden.
Update:
Einige Optimierungen wie die Verringerung der Bildauflösung führen zur einer Reduktion der Laufzeit von 90 sec auf 75 sec auf 23 sec. Durch die jetzt kürzeren Abstände zwischen den Bildern werden Fehlerkennungen noch weiter reduziert.

Dienstag, 14. Juni 2016

Bilder Vergleichen auf der Kommandozeile

Wie vergleicht man am besten Bilder? Dazu muss man zuerst wissen, was man genau wissen möchte. Um die Identität zweier Bilder nachzuweisen reicht in der Regel die Berechnung des MD5 Wertes. Komplizierter wird es, wenn ein und das selbe Bild auf zwei Weisen komprimiert wurde, sind die Bilder gleich und wenn nein, wo sind die Unterschiede.

Zuerst sollte man den Blick auf die Bildgrösse, nicht die Dateigrösse, richten. Dabei hilft das Programm exvi2, auch wenn es eigentlich sonst der Manipulation von Bild-Metadaten dient.
metalpro2:test-diffimage mirkoebert$ exiv2 15556649?_f*
15556649A_formatz.jpg File name       : 15556649A_formatz.jpg
15556649A_formatz.jpg File size       : 103058 Bytes
15556649A_formatz.jpg MIME type       : image/jpeg
15556649A_formatz.jpg Image size      : 720 x 960
15556649A_formatz.jpg: No Exif data found in the file
15556649S_formatz.jpg File name       : 15556649S_formatz.jpg
15556649S_formatz.jpg File size       : 156172 Bytes
15556649S_formatz.jpg MIME type       : image/jpeg
15556649S_formatz.jpg Image size      : 720 x 960

15556649S_formatz.jpg: No Exif data found in the file

Hier sind beide Bilder gleich gross. Jetzt geht es weiter mit dem Vergleich des Inhalts mittels Imagemagic und der Funktion compare.
compare 15556649A_formatz.jpg 15556649S_formatz 15556649_diff.png 

Hier wird ein simples Differenzbild erzeugt, dass man dann begutachten kann. Im Bild unten sieht bei der Vergrösserung des Bildes Unterschiede (Weichzeichnung, Farbe) vor allem an den Kanten. Das obere, rechte Bild verliert Tiefe, Schärfe und Farbe. Alternativ kann man compare auch eine Metrik mitgeben, mit der man das Differenzbild errechnet.



Weiter Links:

  1. Automated Visual Regression Tests with JLineup im OTTO DEV Blog