ich habe mir ein PiCar, im folgenden Auto genannt, von Sunfounder zugelegt und es so programmiert, dass es mithilfe von OpenCV von selbst fährt. Nun wollte ich das Programm erweitern, sodass das Auto auch Verkehrsschilder wie ein Stoppschild erkennt. Nun habe ich bissien gegoogelt und bin auf die Cascade Classifier von OpenCV gestoßen. Da es genug Tutorials zu dem Thema gibt habe ich es auch schnell geschafft ein Stoppschild zu erkennen. Leider ist die Performance von dem Auto deutlich schlechter, wenn ich das Auto mit dem classifier starte. Plötzlich werden Linien zu spät erkannt, sodass das Auto aus der Spur fährt und eigentlich macht was er will. Wenn ich den entsprechenden Code vom Classifier dann aber auskommentiere läuft das ganze wieder wunderbar und das Auto fährt auch so wie er soll.
Meine Frage ist nun woran das liegt. Schafft es das Pi nicht gleichzeitig eine Linieinerkennung und eine Opjekterkennung, wie die vom Stoppschild, durchzuführen? Ist er dafür zu schwach oder liegt das eventuell am Code, den ich geschrieben habe? Den Code zum Classifier und die entsprechende Stelle, in der ich auf die Funktion zugreife, ist unten. Gibt es noch andere Methoden, die ich nutzen kann um eine Objekterkennung wie für Stoppschilder zu machen die das Pi auch während der Fahrt schafft?
Ich bin noch ein relativer Anfänger was Python Programmierung angeht, verzeiht mir daher meine groben Programmierkenntnisse.
Schonmal vielen Dank für die Hilfe
Code: Alles auswählen
import cv2
import numpy
def cascade_classifier(frame,classifier):
stopSign_cascade=cv2.CascadeClassifier('Stopsign.xml')
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
stopSign=classifier.detectMultiScale(gray)
for (x, y, w, h) in stopSign:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 4)
return stopSign
Hier greife ich darauf zu:
Code: Alles auswählen
def main():
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
frame= frame.array
frame = cv2.flip(frame, -1)
processed_frame, steer_dir, offset, roi_frame = frame_processing.frame_processing(frame)
steering_angle_PWM, speed = steering_control.steering_processing(steer_dir, offset)
stop = cascade.cascade_classifier(frame,stopSign_cascade)
if len(stop) == 0:
print ('Stoppschild erkannt...Halte an')
motor.stop()
time.sleep(3)
break