USB Camera an Raspberry PI mit OSD

Loading

In diesem Projekt stelle ich eine Anwendung des Raspberry PI im Bereich Bilderfassung vor. Es gibt zu diesem Thema etliche Foren und Beiträge im Internet, doch eine direkt geeignete Lösung war nicht zu finden. Darum poste ich hier meine Lösung.

Als Aufgabenstellung  soll eine Platinen Bohrmaschine der Firma Lemmen von der optischen Version (Bohrlochzentrierung per Lupe) in eine opto-elektronische Version (Bohrlochzentrierung auf Bildschirm Monitor) kostengünstig umgebaut werden.

Lemmon „Variodrill“ Bild: Herstellerwebsite

Die Bohrmaschine soll dahingehend modifiziert werden, dass die zur Sichtkontrolle verwendete Lupe mit sechsfacher Vergrößerung durch eine Kamera ersetzt wird. Das Kamerabild soll auf einem LCD Computermonitor dargestellt werden. Eine geeignete Kamera war schnell gefunden. Hier gibt es günstige Mikroskop Kameras, die eine variable Vergrößerung bis 200fach erreichen. Eine solche Kamera ist beispielsweise die DigiMicro Scale von „dnt“. Allerdings ist das eine USB-Kamera, die einen PC und eine geeignete Software benötigt, um ein Bild anzuzeigen. Und ein PC ist wiederum nicht unbedingt eine kostengünstige Lösung. Weiters käme auch eine CVBS Kamera (also eine analoge Videokamera) in Frage, die einfach an einen geeigneten Bildschirm (oder PC-Monitor mit Upscaler/Converter) geschaltet werden müsste. Aber das ist nicht zeitgemäß …

Weiters soll das Bild ja nicht nur das Bohrloch vergrößern, sondern auch noch die Vorzüge eines Zielvisieres, also eines Fadenkreuzes oder Kreisabsehens implementieren. Dafür bräuchte man im analogen Bereich wieder einen OSD- (OnScreenDisplay) Generator oder zumindest einen Edding, der das Kreuz gemalt auf dem Bildschirm darstellt 🙂

USB Mikroskop Kamera

Also die Varianten PC oder analoges Kamerasystem fallen durch. Aber es gibt ja noch den Raspberry PI, den kleinen Einplatinencomputer mit einem integrierten USB-Host und wunderbaren Grafikfähigkeiten.  Das Projekt wird also mit einem Raspberry PI 3 realisiert.

Als Betriebssystem kommt das Raspbian-Jessi zur Anwendung. Das Image kann hier heruntergeladen werden. Nach dem Entpacken der ZIP Datei und dem Beschreiben der MicroSD Karte mit dem Win32DiskImager, kann der Raspberry gebootet werden. Jetzt gibt es zwei Möglichkeiten an den Raspberry eine Kamera anzuschließen:

-mittels Flachbandkabel an den Kamera Port (hier kann nur die PI-Kamera angeschlossen werden)

-oder über den USB-Port jede USB2.0 Kamera.  

Voraussetzung hierbei ist, dass die Cam auch erkannt wird. Hier kann mit >lsusb in der Linux Konsole nachgesehen werden, ob die angeschlossene Cam auch in der Devicelist erscheint. Als einfaches Tool, um am Desktop das Kamerabild zu sehen, kann guvcview verwendet werden. Das würde jetzt auch schon genügen, wenn man nur das Bild sehen will. Unser Ziel ist jedoch, in das Kamerabild ein Overlay mit Fadenkreuz einzublenden.

Das lässt sich in Python mit der PI-Kamera und der der picamera Library wunderbar lösen. Die Library besitzt eine integrierte Overlayfunktion. Es geht aber auch mit der USB-Kamera. Hierfür müssen ein paar Module installiert werden. In der Linux Konsole sind folgende Zeilen einzugeben:  

zuerst einmal die üblichen Aktualisierungen:  

sudo apt-get update >sudo apt-get upgrade

dann installieren wir numpy

sudo apt-get install python-numpy
und danach das Bildverarbeitungstool schlechthin: OpenCV

sudo apt-get install python-opencv

Die Python-Version die ich hier verwende ist 2.7.9

Jetzt kann ein Python Skript erstellt werden, das die USB-Kamera initialisiert, und in einer Endlosschleife die Bilder an ein Desktopfenster übergibt. Mit den Bildbearbeitungsfunktionen in opencv lässt sich auch das Erstellen eines Fadenkreuzes realisieren. Auch das Fixieren des Ausgabefensters am Desktopbildschirm ist möglich. Siehe folgendes Skript:  

#usb camera mit osd für platinenbohrsystem
#version 1.0 03/2017 by bihlo

import numpy as np
import cv2

cam = cv2.VideoCapture(0)
cam.open(0)

cam.set(3,800)
cam.set(4,600)

while(True):

# bei jedem schleifendurchlauf wird ein frame genereriert

# frame von der camera holen
ret, frame = cam.read()

# fadenkreuz mit der funktion line zeichnen mit 2 pixeln linienbreite
cv2.line(frame,(0,300),(800,300),(255,0,0),2)
cv2.line(frame,(400,0),(400,600),(255,0,0),2)

# zwei kreise zeichnen
cv2.circle(frame,(400,300), 50, (255,0,0), 2)
cv2.circle(frame,(400,300), 100, (255,0,0), 2)

#text ins bild einblenden
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame,'Platinenbohrsystem V1.0',(10,50), font, 1,(255,255,255),2)

# ausgabe des frames in fenster/ beenden mit taste "q"
cv2.nameWindow('Platinenbohranlage CAM')
cv2.moveWindow('Platinenbohranlage CAM',0,0)
cv2.imshow('Platinenbohranlage CAM',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# nach beendigung das device freigeben und das fenster schlissen
cap.release()
cv2.destroyAllWindows()

Nach Starten des Scripts sollte am Bildschirm das Kamerabild und das Fadenkreuz zu sehen sein:

Will man, dass das Python Skript (in meinem Fall habe ich es „camtest9.py“ genannt) nach dem Hochfahren und Laden des Desktops automatisch gestartet wird, so kann man am einfachsten im LXSession Konfigurationsfenster einen Eintrag hinzufügen. Dazu ist  im Desktopmenu unter >Einstellungen >Default applications for LXSession anzuklicken.

Im LXSession Menü ist dann unter „Autostart“ der folgende Eintrag hinzuzufügen:

@python /(Pfad zum Python Skript)/camtest9.py

Jetzt muss nur mehr neu gestartet werden und das Skript sollte nach dem Start direkt ausgeführt werden. Die folgenden Bilder zeigen den umgebauten Variodrill…

11 Gedanken zu „USB Camera an Raspberry PI mit OSD“

  1. Hallo,
    ein tolles Projekt und genau was ich suche. Meine Platinenbohrmaschine (Marke Eigenbau) ist zwar eine hilfreiche Unterstützung bei der Platinenherstellung, jedoch ein Cam-Sucher würde die Arbeit ungemein unterstützen.
    Ich habe eine USB-Cam mit Spiegel eingebaut und lt. Beschreibung einen PI2 installiert. Leider bekomme ich beim Ausführen folgende Fehlermeldung:
    pi@raspberrypi:~ $ /home/pi/camtest1.py
    -bash: /home/pi/camtest1.py: /usr/bin/python^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

    Was bedeutet python^M?
    Im Verzeichnis /usr/bin/ ist python vorhanden.
    Wo liegt hier der Fehler – vielen Dank
    LG Karl

  2. Hallo,
    ein tolles Projekt und genau was ich suche.
    Meine Platinenbohrmaschine (Marke Eigenbau) ist zwar eine hilfreiche Unterstützung bei der Platinenherstellung, jedoch ein Cam-Sucher würde die Arbeit ungemein unterstützen. Ich habe eine USB-Cam mit Spiegel eingebaut und lt. Beschreibung einen PI2 installiert. Leider bekomme ich beim Ausführen folgende Fehlermeldung:
    Was bedeutet python^M?
    Im Verzeichnis /usr/bin/ ist python vorhanden.
    Wo liegt hier der Fehler – vielen Dank
    LG Karl

    1. Hallo,
      ja da scheint es ein Problem mit Python zu geben.
      Lässt sich der Python-Interpreter aus der Console starten? –> sudo python

      Welche Python Version ist installiert?
      Falls da was fehlen sollte würde ich das python package nochmal installieren

      1. Vielen Dank für die rasche Rückmeldung.
        Bei der Eingabe wird angezeigt:
        pi@raspberrypi:~ $ sudo python
        Python 2.7.9 (default, Sep 17 2016, 20:26:04)
        [GCC 4.9.2] on linux2
        Type „help“, „copyright“, „credits“ or „license“ for more information.
        >>>

        Bei PI bin ich noch ein Anfänger – dies bedeutet doch, dass Python funktioniert.
        Oben im Text ist mir aufgefallen (sudo apt-get install install python-opencv) – zwei mal install.

        Vielen Dank für die Unterstützung

        1. Ja, python funktioniert.
          opencv wird natürlich nicht mit 2x install installiert – habe ich schon korrigiert.
          am besten nochmal opencv installieren -> sudo apt-get install python-opencv

          dann mal überprüfen ob opencv funktioniert. am besten mal den python interpreter starten:
          >sudo python
          >>>
          >>> import cv2
          dann die version prüfen:
          >>> cv2.__version__
          dann sollte die version angezeigt werden…

          1. Hallo,
            ich habe bereits versucht, die Installationen zu löschen und neu zu installieren. Leider bekomme ich noch eine Fehlermeldung beim ausführen des Pythonscript. Beim aufrufen von opencv bekomme ich folgende Anzeige: >>> cv2.__version__
            ‚2.4.9.1‘
            Es gibt ja zwei Seiten wo das Projekt beschrieben wird (http://ingmarsretro.blogspot.co.at/2017/03/usb-camera-raspberry-pi-mit-osd.html). Es gibt hier Unterschiede im Script. Auf dieser Seite sind die ersten drei Zeilen etwas irritierend. Deshalb bin ich mir nicht sicher, ob mein Script funktioniert.
            Ich habe mein Cript hier online gestellt, mit der Bitte, einen prüfenden Blick darauf zu werfen:
            https://drive.google.com/open?id=0B1GdK4jWsplCZnJ2THJKampRdnM

            Vielen Dank für Ihre Bemühungen und liebe Grüsse

  3. hallo Leute cooles Projekt!

    Aber Ihr habt zwei kleine Fehler im Script.

    Zeile 33 cv2.nameWindow(‚Platinenbohranlage CAM‘)
    cv2.namedWindow(‚Platinenbohranlage CAM‘)

    Zeile 40 cap.release()
    cam.release()

  4. Hallo Ingmar,

    cooles Projekt – das werde ich auf meine todo-Liste aufnehmen.
    Aber zunächst muss ich die Bohrmaschine in Betrieb nehmen.
    Leider fehlt bei meinem Gerät (gebraucht erworben) der Fußtaster.
    Ehe ich die Maschine demontiere und mir die Innenbeschaltung erarbeite, versuche ich es mal auf diesem Weg: hast Du den Anschluß und Beschaltung des Fußtasters in Deinem Schaltungsfundus und kannst sie mir zukommen lassen?
    Herzlichen Dank schonmal für Deine Mühe

    Ralf

      1. Hallo Ingmar, die Neugierde war zu groß – ich habe die Maschine demontiert (katastrophale Servicefreundlichkeit) nachdem ich im Netz einen Schaltplan fand. Ich konnte bei dieser Gelegenheit feststellen, dass es wohl mindestens 2 Elektronik-Versionen gibt. Da einige meiner Bastlerfreunde großes Interesse an der grundlegenden Konstruktion einer solchen Maschine haben, habe ich einige Details fotografisch und zeichnerisch festgehalten. Solltest Du Interesse daran haben, schick mir einfach eine kurze mail. Die Tasterbuchse an meiner Maschine ist mit 2 Leitungen beschaltet, zudem sind je zwei Buchsenkontakte gebrückt. Also alles kein Hexenwerk. Bei anderen Revisionen könnte das anders sein. Gruß Ralf

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.