sudo vi /etc/inittab
Sonntag, 28. Februar 2016
Raspberry Pi: autologin
Donnerstag, 25. Februar 2016
Gesichtserkennung mit Python und OpenCV
Zielstellung
Setup
Installation von OpenCV siehe: http://thefoxisthenewowl.blogspot.de/2016/02/opencv-31-linux-mint-173-cinnamon-64-bit.htmlUmsetzung
Als Erstes wird ein Projektverzeichnis angelegt und der Classifierer in dieses kopiert.cd ~
mkdir facedetect
cp /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml facedetect/haarcascade_frontalface_default.xml
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
webcam = cv2.VideoCapture(0)
while(True):
ret, frame = webcam.read()
frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
frame = cv2.flip(frame, 1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.3,
minNeighbors=5)
print "{0} Gesicht(er) gefunden!".format(len(faces))
for (x, y, w, h) in faces:
img = cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 0), 2)
cv2.imshow("Gesicht(er) gefunden", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Beim Beenden wird die verwendete Webcam und alle Fenster geschlossen.
webcam.release()
cv2.destroyAllWindows()
Montag, 22. Februar 2016
Markdown Pelican und Blogger - Ein Versuch
Da ich jetzt vermehrt meine Sachen bei github ablege, komme ich in die Verlegenheit vieles doppelt zu dokumentieren. Einmal die README.md bei github und einmal ein Post in diesem Blog. Daher habe ich mich entschlossen einen Weg zu finden die bei github verwendetet Markdown Syntax auch zu Generierung meiner Post zu verwenden.
Derzeit probiere ich mich an dem static website Generator pelican. Dieser kann die mittels Markdown geschriebenen Seiten in HTML konvertieren, welche ich anschließend bei Blogger posten kann. Nachdem ich in die globale Blogger Vorlage ein par Zeilen der des Pelican Theme CSS übernommen habe, sieht es schon recht zufriedenstellend aus. Mal sehen in wieweit ich das alles noch optimieren kann.
Powered by Pelican. Theme blueidea, inspired by the default theme.
Python Virtualenv Einrichten
Eine Ausführliche Dokumentation findet sich in der virtualenv Dokumentation unter: https://virtualenv.readthedocs.org/en/latest/
Im Folgenden werde ich an einem einfachen Beispiel die Einrichtung einer virtuellen Python Umgebung festhalten.
Installation
Virtualenv lässt sich über das Paketverwaltungsprogramm von Python (pip) installieren, dazu folgenden Befehl ausführen:$sudo pip install virtualenv
Einrichtung
Um eine virtuelle Python Umgebung mit virtualenv einzurichten, wechseln wir ins HOME Verzeichnis, legen einen test Ordner und anschließend eine Python Umgebung, mit den folgenden drei Befehlen, an:$cd ~
$mkdir test
$virtualenv venv
venv ist dabei der Ordner in dem die virtuelle Python Umgebung eingerichtet wird. Dazu wird eine Kopie der globalen Python Umgebung angelegt. Wie man diese darüber hinaus konfiguriert, kann der virtualenv Dokumentation entnommen werden. An dieser Stelle reichen die default Einstellungen zuerst aus.
Aktivierung
Zur Aktivierung, d.h. zum Wechsel in die virtuelle Python Umgebung, muss folgendes Skript ausgeführt werden.$source bin/activate
Durch ein vorangestelltes (venv) erkennt man, dass die virtuelle Python Umgebung aktiv ist.
Deaktivierung
Um die virtuelle Python Umgebung zu verlassen reicht folgender Befehl:(venv)$deactivate
Deinstallation
Um die virtuelle Python Umgebung zu deinstallieren, reicht es den angelegten Ordner zu löschen.$rm -r test/venv
Generated by Pelican with crowsfoot theme.
Samstag, 20. Februar 2016
Raspberry Pi: Temperatur Logger
Vor einiger Zeit habe ich alle Teile zu einem Projekt zusammengefasst und bei github (https://github.com/f0xd3v1lsw1ld/1-wire) veröffentlicht. Jetzt erfolgt hier eine kleine Vorstellung. Neben der simplen Messwertaufnahme und Speicherung in einer CSV, werden die Temperaturwerte auch in einer Datenbank abgelegt.
Somit können einige Auswertefunktionen relativ einfach genutzt werden. Derzeit habe ich folgende Funktionen implementiert:
- minimal Temperatur
- maximale Temperatur
- durchschnittliche Temperatur
Weiterhin ist es möglich den Zeitraum der statistischen Auswertung durch Angabe des Start- und Enddatums einzuschränken.
Nun zur Verwendung:
Falls nicht bereits vorhanden, muss zunächst auf dem Raspberry Pi git installiert werden.
$sudo apt-get install git
Anschließend wechseln wir in das Home Verzeichnis und clonen uns das Repository von github.
$cd ~
$git clone https://github.com/f0xd3v1lsw1ld/1-wire.git
$cd 1-wire
ls
cpu_temperature.py dygraph-combined.js fritzing move.sh
database_temperature.py dygraph-extra.js index.html README.md
Dazu folgende Erklärung:
cpu_temperature.py
Dieses Skript liest die Temperaturen der GPU, CPU und eines 1-wire Temperatursensors aus. Diese werden anschließend in eine csv Datei und in eine sqlite3 Datenbank geschrieben. Aufgerufen wird das Skript per cronjob. Um das Skript an das eigene Setup anzupassen, kann der Pfad für die CSV und die Datenbank und muss die ID des 1-wire Sensors (siehe Raspberry Pi 1-wire mit Device Tree Overlay) angepasst werden.
database_temperature.py
Dieses Skript hat zwei Einsatzmöglichkeiten. Erstens wird es von cpu_temperature.py zum Speichern der Temperaturwerte in der Datenbank aufgerufen. Zweitens kann dieses alleine dazu genutzt werden die Statistikfunktionen zu nutzen.
$./database_temperature.py
usage: database_temperature.py [-h] [-i] [-d DIRECTORY] [--min] [--max]
[--avg] [-s START] [-e END] [-p]
optional arguments:
-h, --help show this help message and exit
-i import all csv files of current dir
-d DIRECTORY set working directory
--min show mininmal value
--max show maximal value
--avg show average value
-s START set start date YYYY-MM-DD
-e END set end date YYYY-MM-DD
-p print values
move.sh
Ist ein einfaches Shell Skript, welches ebenfalls per cronjob aufegrufen wird. Der Zweck des Skriptes liegt darin, dass es die CSV Datei des Vortages anhand des Datums umbennet. Als Resultat gibt es für jeden Tag eine CSV mit allen Messwerten. Wird das Skript nicht verwendet landen alle Messwerte in einer CSV Datei.
frizing
Ist ein Ordner und enthält das Frizing Modell aus Raspberry Pi 1-wire mit Device Tree Overlay.
dygraph-combined.js, dygraph-extra.js, index.html
Visualisierung der CSV Messdaten mittels dygraph im Browser. Mehr dazu gibt es z.B. hier Datenvisualisierung mit Dygraph.
Installation:
Nachdem nun alle Projektdatein beschrieben sind, erfolgt nun die Aktivierung der automatischen Messwertaufnahme. Dazu muss crontab geöffnet werden und die folgenden beiden Zeilen (für die Messwertaufnahme und die CSV Umbenennung) eingetragen werden. Evtl. muss der Pfad für die Skripte an des entsprechende Setup angepasst werden.
$ crontab -e
*/10 * * * * /home/pi/1-wire/cpu_temperature.py>>/dev/null
00 0 * * * /home/pi/1-wire/move.sh /home/pi/1-wire/ rpi_temperature.csv>>/dev/null
Erklärung:
Mit der ersten Zeile wird cpu_temperature.py alle 10 min aufgerufen und alle evtl. auftretenden Ausgaben nach /dev/null ausgegeben.
Mit der zweiten Zeile wird move.sh täglich um 00:00 aufgerufen und alle evtl. auftretenden Ausgaben nach /dev/null ausgegeben.
Repository:
https://github.com/f0xd3v1lsw1ld/1-wire)
Dienstag, 16. Februar 2016
Python Script Sammlung
Hier der Link zum github repo: https://github.com/f0xd3v1lsw1ld/python-snippets
Montag, 8. Februar 2016
OpenCV 3.1 Linux Mint 17.3 Cinnamon 64-bit
In diesem Eintrag beschreibe ich, wie man OpenCV 3.1 unter Linux Mint 17.3 Cinnamon 64-bit für python 2.7 (default für OpenCV) einrichte.
Als erstes wird ein Arbeitsverzeichnis angelegt.
$ mkdir opencv
$ cd opencv
Anschließend werden die Quellen der aktuelle OpenCV Version von opencv.org$ wget https://github.com/Itseez/opencv/archive/3.1.0.zip
ausgepackt$ unzip 3.1.0.zip
und in das entpackte Verzeichnis gewechselt.$ cd opencv-3.1.0
Um aus den Quellen OpenCV zu bauen, werden einige zusätzliche Pakete benötigt, welche zunächst installiert werden müssen. Dies wird im folgenden Schritt erledigt.$ sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev cmake-qt-gui
Nachdem nun alles vorbereitet ist, wird noch ein build Verzeichnis angelegt und in dieses gewechselt.$ mkdir build
$ cd build
Der Buildvorgang von OpenCV wird mittels cmake konfiguriert, daher muss im frisch angelegten build Verzeichnis zunächst cmake aufgerufen werden. Mit cmake wird OpenCV konfiguriert, in der Release Version gebaut und anschließend in das Verzeichnis /usr/local installiert. Außerdem werden die python Beispiele (default für v2.7) installiert. Mit dem abschließenden ".." wird angegeben, dass sich die Quellen im übergeordneten Verzeichnis befinden.$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON..
Hinweis 1: Um weitere Einstellungen vorzunehmen kann die gui version cmake-gui verwendet werden.Hinweis 2: In der Version 3.1.0 ist scheinbar ein Fehler enthalten, wenn die C Example gebaut werden sollen, daher den Schalter INSTALL_C_EXAMPLES=ON nicht aktivieren bzw. auf OFF setzten.
Wenn die Konfiguration abgeschlossen ist, kann OpenCV gebaut werden. Um den Prozess zu beschleunigen wird empfohlen, den Build Prozess mit mehren parallelen Prozessen auszuführen.
$ make -j4 # runs 4 jobs in parallel
Jetzt ist etwas Geduld gefragt, wie lange der Build Prozess dauert, hängt vom HOST ab. Aber wenn der Vorgang abgeschlossen ist, wird OpenCV mit folgenden Befehl in /usr/local installiert.$ sudo make install
Die installierten Python Beispiele befinden sich anschließend unter: /usr/local/share/OpenCV/samples/python.Zum Test kann als Beispiel die Anzeige des webcam Bildes probiert werden:
$ sudo python /usr/local/share/OpenCV/samples/python/video.py