Kampis Elektroecke

Kamera

Raspberry Pi

Für den Raspberry Pi gibt es seit längerem eine CSI-Kamera, die mittlerweile auch als HD-Version verfügbar ist. In diesem Beitrag möchte ich einige Beispiele mit der Kamera vorstellen.

Inbetriebnahme:

Vor der ersten Inbetriebnahme der Kamera muss das Kamerainterface unter Interfaces im Menü raspi-config aktiviert werden:

Nach einem Reboot steht das Interface zur Verfügung und kann genutzt werden. Über eine Installation der Video4Linux-API kann die Kamera wie ein normales Video-Device genutzt werden.

$ sudo apt-get update
$ sudo apt-get install v4l

Nach einem Reboot wird die Kamera unter /dev als Video-Device gelistet:

$ ls /dev

Wenn ein Gerät namens video0 angezeigt wird, kann die Webcam genutzt werden:

Webcam(1)

Auslesen der Kamera:

Das erste Programm soll das aktuelle Bild der Webcam aufnehmen und speichern. Dies soll mit der Bibliothek OpenCV erfolgen, welche installiert (oder als optimierte Version kompiliert) werden muss:

$ sudo apt-get update
$ sudo apt-get install libopencv-de

Durch das Modul opencv wird der Zugriffprozess auf die Webcam und der Bildbearbeitung stark vereinfacht und es kann über

Mat Frame;
VideoCapture Camera(0);

if (!Camera.isOpened())
{
	return -1;
}
	
Camera >> Frame;

die Webcam geöffnet und ein Bild eingelesen werden. Die 0 steht dabei für die Nummer der Webcam, sprich wenn die Kamera als /dev/video1 erkannt wird, muss dort eine 1 stehen.

Dieses Bild kann nach dem Auslesen in einem Fenster angezeigt werden:

namedWindow("Display Image", WINDOW_AUTOSIZE);
imshow("Display Image", Frame);

waitKey(0);

Durch die Nutzung der V4L-API lässt sich die Raspberry Pi Kamera somit wie eine ganz normale Webcam nutzen und mit einer Kombination mit OpenCV lässt sich eine Weiterverarbeitung des Kamerabildes implementieren.

Die Kamera zur Schrifterkennung nutzen:

Über die Raspberry Pi Kamera kann auch eine Schrifterkennung realisiert werden. Diesen Ansatz habe ich vor einiger Zeit für einen automatischen Auslesemechanismus eines Stromzählers (die Analogen mit der drehenden Scheibe) gesehen. Doch die kann man eine Schrifterkennung (in einfach) umsetzen? 

Für die Schrifterkennung wird ein Open Source Tool namens Tesseract genutzt.

$ apt-get update
$ sudo apt-get install tesseract-ocr tesseract-ocr-deu

Die Software liest ein vorhandenes Foto aus und schreibt den erkannten Text in eine Textdatei. Um einen Auslesevorgang zu starten, reicht folgender Befehl:

$ tesseract <Bild>.jpg Ausgabedatei

Zum Testen habe ich mit der Raspberry Pi Kamera ein Foto gemacht und dieses anschließend analysiert:

$ dd if=/dev/video0 of=Foto.jpg bs=11M count=1
$ tesseract Foto.jpg Text

Die Ausgabe sieht sehr vielversprechend aus:

Webcam(5)

An für sich funktioniert die Software auch ganz gut. Wenn trotzdem mal Ausleseprobleme bestehen sollten, liegt es mit sehr großer Wahrscheinlichkeit am Licht bzw. am Kontrast, sodass die Software keinen Text erkennen kann.

Dazu ein Beispiel:

Webcam(6)

Grundsätzlich sollten glänzende Oberflächen vermieden werden und es sollte darauf geachtet werden, dass die Oberflächen möglichst kontrastreich sind. Dies kann z. B. durch eine vorherige Konvertierung in ein Schwarz-Weiß Bild erreicht werden.

17 Kommentare

  1. Hi Daniel

    versuche gerade eine Webcam anzusprechen.
    Habe python-opencv installiert und die Webcam angeschlossen.
    Sie wird wie beschrieben erkannt (video0).
    Die Datei Kamera.py habe ich kopiert und gestartet.
    Leider kommt in der Python Shell folgende Fehlermeldung:
    ImportError: No module named cv
    Was habe ich falsch gemacht ?

    Gruß Fritz

    1. Hallo Fritz,

      schau dir mal das Beispielprogramm, welches unten verlinkt ist, an.
      Hast du am Anfang von deinem Programm „import cv“ geschrieben?

      Gruß
      Daniel

      1. Hey Daniel,
        natürlich habe ich „import cv“ geschrieben, sonst stände ja nicht
        ImportError, offenbar findet das Programm nicht das Modul cv.
        Könnte es wieder mal an Python 3 liegen. Werde es heute mal mit
        Python 2 probieren.

        Gruß Fritz

          1. Hey,

            ja Python 2 ist als Standard definiert (habe ich irgendwo mal gelesen)….glaube du musst das irgendwie umstellen, damit er Python 3 nimmt und auch dafür die Module dafür verwendet.
            Wie das geht weiß ich allerdings nicht, da ich nur Python 2.7 verwende.

            Gruß
            Daniel

  2. Jow Daniel,
    warum kompliziert wenns auch einfach geht…
    Werde in zukunft alles was mit Python 3 nicht geht
    einfach mit Python 2.7 ausprobieren.

    Gruß Fritz

    1. Noch eine Ergänzung, mit folgendem Programm kann man Live-Bilder
      der Webcam sehen:

      import cv

      KAMERA_NR = 0

      cam = cv.CaptureFromCAM(0)
      taste = 0
      while taste ord(„q“):
      bild = cv.QueryFrame(cam)
      cv.ShowImage(„Livebild“, bild)
      taste = cv.WaitKey(2)

      Mit Taste „q“ wird das Progeamm beendet.

      Gruß Fritz

      1. Korrektur:
        Nach „while…“ müssen folgende 3 Zeilen versetzt sein, also:
        while taste ord(“q”):
        bild = cv.QueryFrame(cam)
        cv.ShowImage(“Livebild”, bild)
        taste = cv.WaitKey(2)

          1. Hey Daniel,
            wenn ich mit deinem Programm einen Schnappschuß mache
            ist das Blid unterbelichtet:
            siehe Schnappschuß
            Das Live-Bild dagegen ist normal:
            siehe Live-Bild
            Woran kann das liegen?
            Meine Webcam: Pearl SC 834
            Hast du ne Ahnung?

            Gruß Fritz

          2. Hallo Fritz,

            hast du das Livebild mit einer Zusatzsoftware gemacht? Oder wie hast du das erstellt?

            Gruß
            Daniel

          3. Hallo Daniel,

            das Livebild habe ich kurzfristig in dem Livebild-Programm aufgenommen, einfach alle 2 Sekunden ein Bild speichern.
            Also im Prinzip deine Software ins Liveprogramm integriert.
            Dann mit dem Raspi Bildbetrachter angesehen und gespeichert.
            Ist halt ein bisschen umständlich als Dauerlösung.

            Gruß Fritz

          4. Hey,

            besteht das Problem auch wenn du andere Webcams nimmst?
            Weil wenn es an der Webcam liegt ist die einzige Möglichkeit wenn du versuchst das Bild künstlich heller zu machen:

            config = {
            cv.CV_CAP_PROP_BRIGHTNESS: 50,
            cv.CV_CAP_PROP_CONTRAST: 50,
            cv.CV_CAP_PROP_SATURATION: 50,
            }

            for param, value in config.iteritems():
            cv.SetCaptureProperty(Kamera, param, value)

            Gruß
            Daniel

          5. Hallo Daniel,

            es hat mir keine Ruhe gelassen, aber jetzt habe ich die Lösung gefunden:
            for i in range (8):
            –>Bild = cv.QueryFrame(Kamera)
            Man muß der Kamera Zeit lassen, dann wird das Blid
            korrekt wiedergegeben, offenbar war das Bild zu kurz belichtet und deshalb zu dunkel. Wie auch immer,
            jetzt klappts…

            Gruß Fritz

Schreibe einen Kommentar zu Fritz Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert