12
2015 Projekt: Florian Engel, Marc Vögele, Ann- Katrin Riedel, Steffen Fleck Dokumentation: Florian Engel Hochschule Darmstadt 23.07.2015 Bildverarbeitung mit dem Raspberry Pi

Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

  • Upload
    vancong

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

2015

Projekt: Florian Engel, Marc Vögele, Ann-

Katrin Riedel, Steffen Fleck

Dokumentation: Florian Engel

Hochschule Darmstadt

23.07.2015

Bildverarbeitung mit dem Raspberry Pi

Page 2: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

1 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

Inhaltsverzeichnis Vorbemerkung ......................................................................................................................................... 2

1. Grundlegendes ................................................................................................................................ 3

1.1 Was wird benötigt? ................................................................................................................. 3

1.2 Aufbau der Hardwarekomponenten ....................................................................................... 4

1.2 Installation des Betriebssystems Raspbian ............................................................................. 4

2. Erste Bildverarbeitung mit dem Raspberry Pi ................................................................................. 7

2.1 Notwendige Installationen ...................................................................................................... 7

2.2 OpenCV Grundgerüst .............................................................................................................. 7

2.3 Beispielprogramm: Threshold ................................................................................................. 9

3. Nützliche Befehle für die Kommandozeile .................................................................................... 11

Page 3: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

2 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

Vorbemerkung Ziel dieser Dokumentation ist es, den Studierenden des Optotechnik und Bildverarbeitung Studien-

gangs der Hochschule Darmstadt, die Möglichkeiten von Bildverarbeitung mit dem Raspberry Pi na-

hezubringen. Sie stellt eine Guideline zur Einrichtung des Raspberry Pi und dessen Nutzung mit dem

Raspberry Pi Camera Module in Verbindung mit der OpenCV dar. Damit soll Grundlage und Anregung

zu eigenen Experimenten geschaffen sein.

Page 4: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

3 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

1. Grundlegendes Der Raspberry Pi ist ein kleiner und preisgünstiger Einplatinencomputer („Microcontroller“), der vor-

dergründig dazu entwickelt wurde, Programmier- und Hardwarekenntnisse zu erlangen. Seine Ein-

satzzwecke sind äußerst vielseitig und es lassen sich unterschiedlichste Projekte und Ideen damit

verwirklichen, worauf hier allerdings nicht näher eingegangen werden soll. Diese Dokumentation

beschränkt sich auf den Einsatz des Raspberry Pi als Bildverarbeitungssystem mit der OpenCV. Dazu

werden die benötigten Hard- und Softwareelemente gelistet und die prinzipielle Vorgehensweise

(Zusammenbau und Installationen) beschrieben sowie ein erstes OpenCV-Projekt gezeigt.

1.1 Was wird benötigt?

Der Raspberry Pi an sich

Hier gibt es mehrere Modelle, die sich hinsichtlich ihrer Leistung und ein paar Anschlussmög-

lichkeiten unterscheiden. Welches Modell gewählt wird ist prinzipiell jedoch zweitrangig,

wobei das neueste Raspberry 2 Modell B hinsichtlich Leistung und Anschlussvielfalt zu emp-

fehlen ist.

Netzteil

Als Spannung werden 5V DC benötigt, dies entspricht einem gewöhnlichen USB-Ladegerät.

Wie viel Strom der Raspberry benötigt hängt auch von den angeschlossenen Geräten ab, in

der Regel reicht ein Strom von 1200mA allerdings völlig aus.

Als kleiner Hinweis am Rande: USB-Ladegeräte liefern gegenüber „richtigen“ Netzteilen

meist keinen stabilisierten Strom, was bei Lastspitzen zu Aussetzern führen kann.

SD Karte

Der Raspberry hat keine Schnittstelle für Festplatten, das Betriebssystem und alle weiteren

Programme müssen auf einer SD Karte installiert werden.

Ein- und Ausgabegeräte

Alle zwingend erforderlichen Elemente sind bereits gelistet, der Raspberry Pi kann prinzipiell

komplett über die Konsole angesprochen werden, was für eine Serveranwendung zielführend

wäre, für unseren Zweck als Bildverarbeitungssystem allerdings nicht.

o Raspberry Pi Camera Module

Wird mit einem Flachbandkabel am CSI-Port des Raspberry Pi (direkt hinter der

Ethernet-Buchse) angeschlossen. Da die Kamera durch statische Ladung beschädigt

werden kann, sollte darauf geachtet werden, sich zuvor geerdet, also vollständig ent-

laden, zu haben.

o Tastatur und Maus

Aufgrund der begrenzten Anzahl an USB-Ports empfiehlt sich hier eine Tastatur mit

eingebautem Touchpad.

o Bildschirm

Hier eignet sich nahezu jeder Monitor, der via HDMI angeschlossen werden kann.

Software

o Raspbian

o CMake

o OpenCV

Page 5: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

4 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

1.2 Aufbau der Hardwarekomponenten

Abbildung 1: Draufsicht des Raspberry Pi 1 Model B1

Der Anschluss der Hardwarekomponenten ist einfach und gestaltet sich denkbar unkompliziert. Alle

hier benötigten Anschlüsse wurden in Abbildung 1 grün umrandet und dürften selbsterklärend sein.

Bevor mit dem Raspberry Pi gearbeitet werden kann, muss jedoch zunächst ein Betriebssystem (hier

Raspbian) auf der SD Karte installiert werden.

1.2 Installation des Betriebssystems Raspbian Zunächst sei darauf hingewiesen, dass auf dem Raspberry Pi auch andere (Linux-basierte) Betriebs-

systeme lauffähig sind. Diese Dokumentation beschränkt sich aber auf die Installation von Raspbian,

einem von Debian abgeleiteten und speziell auf den Raspberry Pi zugeschnitten Betriebssystem. Dies

muss zuerst aus dem Internet heruntergeladen werden, am besten direkt von der Raspberry Pi

Website:

http://www.raspberrypi.org/downloads/

Aus dem zu entpackenden zip-Archiv erhält man eine Image-Datei, die auf der SD Karte von einem

anderen Rechner aus installiert werden muss. Bei einem Windows-Rechner funktioniert dies zum

1 Quelle: http://www.elektronik-kompendium.de/sites/raspberry-pi/1912111.htm, Stand 19.02.2015, Modifiziert durch Autor

Page 6: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

5 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

Beispiel mit Win32DiskImager und unter MacOS mit der App RPi-sd card builder. Nachdem die

Image-Datei auf der SD Karte installiert wurde, kann diese an den Raspberry Pi gesteckt werden. Die-

ser ist jetzt bootfähig und kann, nachdem Tastatur, Maus, Bildschirm und optional ein Netzwerkkabel

angeschlossen wurde, mit Strom versorgt werden. Die Kamera wird an dieser Stelle noch nicht benö-

tigt, es müssen vielmehr einige Einstellungen vorgenommen werden:

Abbildung 2: Haupt-Konfigurationsmenü2

Das Konfigurationsmenü (kann bei anderen Versionen variieren, hier Raspbian Wheezy) sollte nach

einer Weile beim ersten Start des Raspberry Pi auf dem Bildschirm erscheinen. In diesem navigiert

man grundsätzlich mit den Pfeiltasten durch die Menüpunkte, bestätigt mit der Eingabetaste, trifft

Mehrfachauswahlen mit der Leertaste und wechselt mit der Tab-Taste zwischen Auswahlmöglichkei-

ten. Folgende Einstellungen müssen getroffen werden:

1 Expand Filesystem

Sorgt dafür, dass der gesamte SD Karten Speicher (beim späteren Neustart) zur Verfügung

gestellt wird.

3 Enable Boot to Desktop/Scratch

Ermöglicht die Auswahl zwischen einer graphischen Benutzeroberfläche oder eine reine Kon-

solennutzung. Wir entscheiden uns für die Desktopvariante und bestätigen mit Ok.

4 Internationalisation Options

o I1 Change Locale

Es erscheint eine Liste, in der die drei Einträge de_DE ISO-8859-1, de_DE.UTF-8 UTF-8

und de_DE@euro ISO-8859-15 ausgewählt werden müssen (Mehrfachauswal mit

Leertaste, anschließend mit der Tab-Taste zu Ok navigieren und bestätigen).

Im nächsten Fenster de_DE.UTF-8 auswählen.

o I2 Change Timezone

Zunächst Europe wählen und dann mit Berlin präzisieren.

o I3 Change Keyboard Layout

In der Liste die angeschlossene Tastatur selektieren, falls diese nicht gelistet ist oder

Unsicherheit über den genauen Typ besteht, kann die Voreinstellung beibehalten

werden. Im nächsten Fenster other auswählen, dann German und letztendlich noch

einmal German. Besitzt die Tastatur die Taste „AltGr“ wird noch The default for the

keyboard layout und No compose key gewählt sowie die Meldung „By default the

combination Control+Alt+Backspace does nothing. If you want it can be used to ter-

2 Quelle: http://www.nat.at/_media/blog/raspberry-pi_raspi-config_expand-filesystem.png, Stand 21.02.2015

Page 7: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

6 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

minate the X server.” mit No bestätigt. Damit sollte das Ausgangsmenü wieder er-

reicht sein.

5 Enable Camera

Hierbei Enable auswählen, um die Nutzung der Kamera zu etablieren.

8 Advanced Options

o A1 Overscan

Dient zur Skalierung der Anzeige, wird nur bei Darstellungsproblemen benötigt.

o A2 Hostname

Gibt dem Raspberry Pi einen Namen, unter dem er im Netzwerk zu finden ist. Dabei

empfehlen sich durchweg Kleinbuchstaben und keine Sonderzeichen sowie keine Zif-

fern am Anfang.

o A3 Memory Split

Erlaubt die Aufteilung des Arbeitsspeichers für die CPU und GPU, also zwischen Pro-

zessor und Grafikeinheit des Raspberry Pi. Da wir Bildverarbeitung betreiben wollen,

sollte dieser nicht zu gering gewählt werden (128 MB).

Die weiteren Einstellungen in diesem Menü sind erstmal unerheblich. Damit ist die Konfiguration des

Betriebssystems abgeschlossen, es darf mit Finish neugestartet werden. Wenn ein Login erforderlich

ist, lautet der Benutzername „pi“ und das Passwort „raspberry“ (sofern hierfür keine eigenen Einstel-

lungen getroffen wurden).

Hinweis: Das Konfigurationsmenü kann auch nachträglich erneut aufgerufen und weitere Einstellun-

gen vorgenommen werden. Dafür gibt man lediglich sudo raspi-config in die Kommandozeile ein.

Nach der Installation des Betriebssystems, empfiehlt es sich ein Systemupdate durchzuführen. Fol-gende Befehle müssen dazu in der Kommandozeile eingegeben werden: sudo apt-get update

sudo apt-get upgrade sudo raspi-config

Die Kamera kann nun mit dem Raspberry Pi verbunden werden.

Page 8: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

7 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

2. Erste Bildverarbeitung mit dem Raspberry Pi

2.1 Notwendige Installationen Zuerst muss Cmake heruntergeladen ( http://www.cmake.org/download/ ) und installiert werden.

Die Datei muss entpackt werden, dies geschieht mit einem Rechtsklick Hier entpacken. Zur Instal-

lation die Kommandozeile (im selben Verzeichnis) öffnen und entweder

./bootstrap oder sudo apt-get install cmake make make install

eingeben und ausführen.

Danach muss der Quellcode für die OpenCV bezogen werden. Zum Beispiel über die Eingabe von wget https://github.com/Nolaan/libopencv_24/archive/OpenCV_2.4.10.tar.gz oder wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.11/opencv-2.4.11.zip in der Kommandozeile. Es empfiehlt sich nach der aktuellen OpenCV Version zu suchen und den je-

weiligen URL zu benutzen.

Nach dem Entpacken müssen abschließend noch folgende Befehle nacheinander in die Kommando-zeile eingegeben werden: cmake Cmakelist.txt sudo make install Hierzu sollte bei dem Raspberry 2 etwa 2 bis 3 Stunden und bei dem Vorgängermodell etwa die 3- bis

4-fache Zeit einplant werden.

2.2 OpenCV Grundgerüst Zuerst muss CmakeLists.txt mit dem Texteditor erstellt werden: cmake_minimum_required(VERSION 2.8) project(Filename) find_package(OpenCV REQUIRED) add_executable (Filename filename.cpp) target_link_libraries(Filename ${OpenCV_LIBS}) Der OpenCV Code wird ebenfalls im Texteditor geschrieben und muss als filename.cpp gespeichert werden. Die Anzeige eines Bildes kann wie folgt aussehen (Abb.3):

Page 9: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

8 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

Abbildung 3: Beispielcode zum Anzeigen eines Bildes

3

Vor der ersten Kompilierung muss cmake CMakeLists.txt einmalig in die Kommandozeile eingeben werden. Die Kompilierung und Ausführung geschieht in der Kommandozeile mit den Befehlen: make Filename ./Filename Im Fall von Abb.3 muss zudem der Bild-Pfad angegeben werden: ./Filename pic.jpg Weitere nützliche Informationen, Tutorials und eine Übersicht der OpenCV Funktionen sind auf

http://opencv.org/ zu finden.

3 Quelle: http://docs.opencv.org/doc/tutorials/introduction/display_image/display_image.html#display-image, Stand 04.06.2015

Page 10: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

9 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

2.3 Beispielprogramm: Threshold Als grundlegendes Beispiel sei hier ein einfacher Threshold auf ein Bild angewandt. Der Bildpfad wird

bei diesem Beispiel erst bei der Ausführung des Programms in der Kommandozeile angegeben. Es

wird also auf ein bereits aufgenommenes Bild zugegriffen. Dieses wird dann zuerst in ein Grautonbild

umgewandelt und dann Binarisiert.

Abbildung 4 zeigt ein Bild, welches mit der Raspberry Camera aufgenommen und dann mit obigem

Programm binarisiert wurde (Abb.5).

#include <stdio.h>

#include <opencv2/opencv.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <cv.h>

using namespace cv;

// Globale Variablen

int threshold_value = 128; // Schwellwert

int threshold_type = 3; // versch. Binarisierungstypen (0...4), s. OpenCV Doku

int const max_BINARY_value = 255; // Groesster Grauwert

int main(int argc, char** argv)

{

if (argc !=2) // Ueberpruefen, ob der Bildpfad vorhanden ist

{

printf("usage: DisplayImage.out <Image_Path>\n");

return -1;

}

Mat image, image_gray, dst; // Bildmatrizen (Type: Mat - Matrix)

image = imread(argv[1],1); // Bild einlesen

if (!image.data) // Ueberpruefen, ob das Bild eingelesen wurde

{

printf("No Image data\n");

return -1;

}

// Konvertierung in ein Grautonbild, Parameter: (Urspungsbild, Zielbild, Konvertierung)

cvtColor(image, image_gray,COLOR_RGB2GRAY);

// Threshold, Parameter: (Urspungsbild, Zielbild, Schwellwert, Max. Grauwert, Typ)

threshold(image_gray,dst, threshold_value, max_BINARY_value, threshold_type);

// Bilder anzeigen

namedWindow("Display Image", WINDOW_AUTOSIZE);

imshow("Original Image",image);

imshow("Binarized Image",dst);

// Bild speichern

imwrite("pic/Binarized_Image.jpg", dst);

waitKey(0);

return 0;

}

Page 11: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

10 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

Abbildung 4: Foto mit der Raspberry Camera

Abbildung 5: Binarisiertes Bild

Page 12: Bildverarbeitung mit dem Raspberry Pi - Main / HomePage · Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck Hochschule Darmstadt

Dokumentation: Florian Engel Projekt: Florian Engel, Marc Vögele, Ann-Katrin Riedel, Steffen Fleck

11 Hochschule Darmstadt Bildverarbeitung mit dem Raspberry Pi Dokumentation

3. Nützliche Befehle für die Kommandozeile

Befehl Aktion

raspivid Video mit der Kamera aufnehmen

raspivid –o dateiname.h264 5s Video aufnhemen; für andere Zeitspanne –t Zeit[ms] anfügen

raspivid | less Gibt eine Liste mit Befehlen für raspivid zurück, exit mit q

raspistill Foto aufnehmen; Befehle für raspivid beachten; speichert im jpg-Format

ls Liste von Dateien im aktuellen Verzeichnis

cd Wechselt das Verzeichnis, z.B. cd directory oder cd /home/pi/directory

pwd Zeigt den aktuellen Verzeichnispfad

mkdir Neues Verzeichnis (Ordner) erstellen, z.B.: mkdir newDir

rmdir Entfernt ein vorhandenes Verzeichnis

sudo Einen Befehl als Superuser ausführen; wichtig bei Installationen

unzip Eine zip-Datei entpacken

tar –xvzf *filename.tar.gz* Eine tar-Datei entpacken

wget Dateien aus dem Internet herunterladen (URL anfügen)

apt-get Verwaltung von Paketen auf Debian, z.B. Installationen

ipconfig Anzeigen der Internetverbindung (analog zu ipconfig bei Windwos)