Hallo zusammen,
ich mache einen Fernlichtassistenten für ein Modellfahrzeug. Die Funktion soll aber möglichst realitätsnah sein. Dafür verwende ich eine Bilderkennung über die Raspberry Kamera mit OpenCV. Alles läuft über einen Pi 2B.
Das unten abgetippte Programm ist aber noch etwas träge und ich hoffe das man es noch beschleunigen kann. Im Moment komme ich damit so auf ca. 1,5 Bilder pro Sekunde.
Vielleicht hat ja jemand eine Idee, da ich selber nicht so tief in der Programmierung stecke.
Außerdem verstehe ich nicht ganz genau was die ersten drei Zeilen Code in der while machen. Diese habe ich mir einfach nur aus dem Internet gesucht. Wenn mir das jemand erklären könnte würde ich mich freuen.
Vielen Dank für eure Hilfe im voraus !
Code
import cv2
import picamera
import time
import picamera.array
from picamera.array Import PiRGBArray
# Definieren Ursprung Koordinatensystem und Farbwerte/ Farbgrenzen
y = 0 # Ursprung (0|0) befindet sich oben links. Nach unten und nach rechts positiv zaehlen
x = 0
lower = 200 # definiert untere Grenze fuer Filterung
upper = 255 # definiert obere Grenze fuer Filterung (absoluter Maxwert: 255)
i = 0 # zaehl Variabel
# Kamera initialisieren
cam = picamera.PiCamera() # Kamera auf cam
cam.resolution = (640, 480) # Aufloesung der Kamera
cam.brightness = 45 # Helligkeit der Kamera
#cam.color_effects = (128, 128) # stellt die Kamera auf schwarzweis
#cam.start_preview() # startet Kameravorschau
print "start" # Ausgabe um zu erkennen wann die Schleife beginnt
time.sleep(1) # eine Sekunde warten
# Start Bildanalyse
while (i<=30): # damit das Programm zum testen von alleine aufhoert
# Foto erstellen
rawCapture = PiRGBArray(cam)
cam.capture(rawCapture, Format="bgr")
Image = rawCapture.array
# Bestimmten Ausschnitt definieren, diesen filtern und Pixel zaehlen
region = Image [y+280:y+480, x:x+640] # defeniert den unteren Teil des Bildes mit einer Flaeche von 200x640 Pixel (h x b)
gray = cv2.Color(region, cv2.COLOR_BGR2GRAY) # konvertiert den Ausschnitt in Graustufen
graypart = cv2.inRange(gray, lower, upper) # zeigt nur noch Pixel heller als lower und dunkler als upper
pixdetected = cv2.countNonZero(graypart) # zaehlt alle Pixel die nicht schwarz sind
i = i +1 # zaehlt hoch fuer while
# Entscheidung ob Fernlicht an oder aus
if pixdetected <= 2000: # kein Licht kommt entgegen
print "Fernlicht An"
elif pixdetected >= 2000:
print "Fernlicht Aus"
#cam.stop_preview() # beendet Kameravorschau
Alles anzeigen