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 Platinenbohrmaschine der Firma Lemmen
von der optischen Version (Bohrlochzentrierung per Lupe) in eine
opto-elektronische Version (Bohrlochzentrierung auf Bildschimmonitor)
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 Mikroskopkameras, 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 Videocamera) in Frage, die einfach
an einen geeigneten Bildschim (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 Microskopkamera |
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 Raspian-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 Rasbperry
gebootet werden. Jetzt gibt es zwei Möglichkeiten an den Raspberry eine
Camera anzuschliessen:
-mittels Flachbandkabel an den Cameraport (hier kann nur die PI-Camera angeschlossen werden)
-oder über den USB-Port jede USB2.0 Camera.
Voraussetzung hierbei ist, dass die Cam auch erkannt wird.
Hier kann mit >lsusb in der Linuxkonsole nachgesehen werden, ob die angeschlossene Cam auch in der Deviceliste erscheint. Als einfaches Tool, um am Desktop das Camerabild 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 Camerabild ein Overlay mit Fadenkreuz einzublenden.
-mittels Flachbandkabel an den Cameraport (hier kann nur die PI-Camera angeschlossen werden)
-oder über den USB-Port jede USB2.0 Camera.
Voraussetzung hierbei ist, dass die Cam auch erkannt wird.
Hier kann mit >lsusb in der Linuxkonsole nachgesehen werden, ob die angeschlossene Cam auch in der Deviceliste erscheint. Als einfaches Tool, um am Desktop das Camerabild 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 Camerabild ein Overlay mit Fadenkreuz einzublenden.
Das lässt sich in Python mit der PI-camera und der picamera Library
wunderbar lösen. Die Library besitzt dafür eine integrierte Overlayfunktion. Es geht
aber auch mit der USB-Kamera. Hierfür müssen ein paar Module installiert
werden. In der Linuxkonsole sind folgende Zeilen einzugeben:
zuerst einmal die üblichen Aktualisierungen:
>sudo apt-get update
>sudo apt-get upgrade
>sudo apt-get upgrade
dann installieren wir numpy
>sudo apt-get install python-numpy
und danach das Bildverarbeitungstool schlechthin: OpenCV >sudo apt-get install install python-opencv
Jetzt kann ein Pythonscript erstellt werden, das die USB-Camera 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 Script:
#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 Camerabild und das Fadenkreuz zu sehen sein:
Will man, dass das Pythonscript (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 Configurationsfenster einen Eintrag hinzufügen. Dazu ist im Desktopmenu unter >Einstellungen >Default applications for LXSession anzuklicken.
@python /(pfad zum pythonscript)/camtest9.py
Jetzt muß nur mehr neu gestartet werden und das Script sollte nach dem
Start direkt ausgeführt werden. Die folgenden Bilder zeigen den
umgebauten Variodrill...
Keine Kommentare:
Kommentar veröffentlichen