Discoverer81 Schreib halt ein Minimalprogramm und teste auf Probleme, was das bisherige Programm ja nicht macht. Teste ob das `VideoCapture`-Objekt überhaupt eine ”offene Verbindung” hat, und beim Lesen der Bilddaten, ob da tatsächlich was gelesen wurde.
Face Tracking mit OpenCV und Pan-Tilt-Hat
-
Discoverer81 -
20. Oktober 2021 um 16:58 -
Unerledigt
Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
-
-
Face Tracking mit OpenCV und Pan-Tilt-Hat? Schau mal ob du hier fündig wirst!
-
eigentlich dürfte dein Script gar nicht funktionieren.
Ich habe nur geschaut wo 'data' liegt und den Rest des Pfades aus dem Skript übernommen. Bin gerade nicht daheim und kann deswegen die Unterordner nicht ansehen. Dafür habe den GitHub-Link von dir verwendet.
Aber es hat davor auch funktioniert, nur habe ich auch dort die Ordnerstruktur nicht angeschaut. Wie und was ich installiert habe, habe ich ja geschrieben.
Du wirst am besten jetzt auf __blackjack__ 's Rat hören müssen, dich mit Python beschäftigen. Lass dich nicht unterkriegen, wenn du viel von seinen Antworten googln musst, das ging/geht mir auch so
-
Hallo!
Bahnhof !!!
Anyway, ich habe mal versucht was aufzusetzen.
Python
Alles anzeigenfrom picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 camera = PiCamera() rawCapture = PiRGBArray(camera) time.sleep(0.1) camera.capture(rawCapture, format="bgr") image = rawCapture.array cv2.imshow("Image", image) cv2.waitKey(0)
Ich erhalte dann die Fehlermeldung:
Zitatpi@raspberrypi:~/forumtest/palt-tilt-cam $ nano test_image.py
pi@raspberrypi:~/forumtest/palt-tilt-cam $ python3 test_image.py
/usr/lib/python3/dist-packages/picamera/encoders.py:544: PiCameraResolutionRounded: frame size rounded up from 1680x1050 to 1696x1056
width, height, fwidth, fheight)))
Unable to init server: Could not connect: Connection refused
(Image:893): Gtk-WARNING **: 13:25:25.990: cannot open display:
Habe ich damit "den" Fehler bewiesen oder einen neuen erschaffen ??
-
Abend,
pip3 install icecream
dann
im folgenden Code, dein Verzeichnis anpassen. Dass ist das, was du von GitHub heruntergeladen hast. War bei dir irgendwo '/home/pi/XXX/..' Aber nur das Verzeichnis eintragen ohne die *.xml-Datei. Also wie in der Vorlage.
Python
Alles anzeigen#!/usr/bin/env python3 import cv2 from pathlib import Path from icecream import ic CASCADE_PATH = Path('/home/pi/forumtest/opencv/data/haarcascades/') def main(): ic(cv2.__file__) for file in CASCADE_PATH.iterdir(): if file.name == 'haarcascade_frontalface_default.xml': ic('frontalface_default.xml gefunden') ic(CASCADE_PATH / file) break face_cascade = cv2.CascadeClassifier(str(CASCADE_PATH / file)) ic(face_cascade) video_capture = cv2.VideoCapture(0) ic(video_capture) ic(video_capture.isOpened()) try: ret, frame = video_capture.read() ic(ret) ic(frame) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ic(gray) ic(face_cascade.empty()) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=4) ic(faces) finally: video_capture.release() cv2.destroyAllWindows() if __name__ == '__main__': main()
Bitte die Ausgaben des Skripts posten.
Grüße
Dennis
-
Hallo Dennis,
hier kommts
Zitatpi@raspberrypi:~/forumtest $ python3 dennis.py
ic| cv2.__file__: '/usr/lib/python3/dist-packages/cv2.cpython-37m-arm-linux-gnueabihf.so'
ic| 'frontalface_default.xml gefunden'
ic| CASCADE_PATH / file: PosixPath('/home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
ic| face_cascade: <CascadeClassifier 0xa5da8800>
ic| video_capture: <VideoCapture 0xa5da8930>
ic| video_capture.isOpened(): True
ic| ret: True
ic| frame: array([[[ 63, 94, 100],
[ 63, 94, 100],
[ 57, 95, 98],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]],
[[ 69, 100, 106],
[ 62, 93, 99],
[ 57, 95, 98],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]],
[[ 56, 91, 96],
[ 64, 99, 104],
[ 60, 96, 99],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]],
...,
[[ 0, 1, 0],
[ 0, 0, 0],
[ 0, 0, 0],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]],
[[ 0, 1, 0],
[ 0, 0, 0],
[ 0, 0, 0],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]],
[[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
...,
[ 0, 0, 0],
[ 0, 3, 2],
[241, 244, 243]]], dtype=uint8)
ic| gray: array([[ 92, 92, 92, ..., 0, 2, 243],
[ 98, 91, 92, ..., 0, 2, 243],
[ 89, 97, 93, ..., 0, 2, 243],
...,
[ 1, 0, 0, ..., 0, 2, 243],
[ 1, 0, 0, ..., 0, 2, 243],
[ 0, 0, 0, ..., 0, 2, 243]], dtype=uint8)
ic| face_cascade.empty(): False
ic| faces: ()
-
Okay, sieht meiner Meinung nach gut aus.
Python
Alles anzeigen#!/usr/bin/env python3 import cv2 from pathlib import Path from icecream import ic CASCADE_PATH = Path('/home/pi/forumtest/opencv/data/haarcascades/') def main(): ic(cv2.__file__) for file in CASCADE_PATH.iterdir(): if file.name == 'haarcascade_frontalface_default.xml': ic('frontalface_default.xml gefunden') ic(CASCADE_PATH / file) break face_cascade = cv2.CascadeClassifier(str(CASCADE_PATH / file)) ic(face_cascade) video_capture = cv2.VideoCapture(0) ic(video_capture) ic(video_capture.isOpened()) try: ret, frame = video_capture.read() ic(ret) ic(frame) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ic(gray) ic(face_cascade.empty()) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=4) for x, y, w, h in faces: ic(x, y, w, h) finally: video_capture.release() cv2.destroyAllWindows() if __name__ == '__main__': main()
Ich habe noch zwei Zeilen eingefügt, um zusehen ob etwas in 'faces' steht. Beim Programmtest bitte in die Kamera lächeln
Grüße
Dennis
-
Guten Morgen
das Lächeln war das anstrengendste
Code
Alles anzeigenpi@raspberrypi:~/forumtest $ python3 dennis.py ic| cv2.__file__: '/usr/lib/python3/dist-packages/cv2.cpython-37m-arm-linux-gnueabihf.so' ic| 'frontalface_default.xml gefunden' ic| CASCADE_PATH / file: PosixPath('/home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml') ic| face_cascade: <CascadeClassifier 0xa5df1ad0> ic| video_capture: <VideoCapture 0xa5df1c20> ic| video_capture.isOpened(): True ic| ret: True ic| frame: array([[[ 16, 19, 1], [ 10, 13, 0], [ 14, 19, 1], ..., [ 0, 0, 0], [ 0, 4, 4], [231, 238, 238]], [[ 10, 13, 0], [ 15, 18, 0], [ 9, 14, 0], ..., [ 0, 0, 0], [ 0, 4, 4], [231, 238, 238]], [[ 15, 18, 0], [ 14, 17, 0], [ 12, 17, 0], ..., [ 0, 0, 0], [ 0, 4, 4], [231, 238, 238]], ..., [[ 0, 1, 0], [ 0, 2, 0], [ 1, 3, 0], ..., [ 0, 0, 0], [ 0, 5, 3], [231, 239, 237]], [[ 2, 5, 4], [ 0, 0, 0], [ 0, 4, 0], ..., [ 0, 0, 0], [ 0, 5, 3], [231, 239, 237]], [[ 1, 4, 3], [ 0, 1, 0], [ 0, 3, 0], ..., [ 0, 0, 0], [ 0, 5, 3], [231, 239, 237]]], dtype=uint8) ic| gray: array([[ 13, 9, 13, ..., 0, 4, 237], [ 9, 12, 9, ..., 0, 4, 237], [ 12, 12, 11, ..., 0, 4, 237], ..., [ 1, 1, 2, ..., 0, 4, 237], [ 4, 0, 2, ..., 0, 4, 237], [ 3, 1, 2, ..., 0, 4, 237]], dtype=uint8) ic| face_cascade.empty(): False
-
Moin,
ich habe eigentlich eine Ausgabe von Zeile 31 erwartet. In meinem Test hat mir das Skript Werte für x, y, w und h ausgegeben und ich bezweifle dass das Lächeln den Unterschied macht.
Da mir ehrlich gesagt kein Grund einfällt, wieso du die Ausgabe nicht hast, kann ich dich nur fragen, ob du eventuell beim kopieren was vergessen hast?
Aber was du vielleicht gemerkt hast, dein Fehler den du mal hattest und sich auf 'face_cascade.detectMultiScale' bezog ist weg. Ist das kein Grund zum lächeln?
Grüße
Dennis
-
Servus,
habe sicherheitshalber mal die Datei gelöscht und neu erstellt.
Auch wenn ich mir sicher bin, das schon gemacht zu haben, es gab doch eine Änderung.
Evtl lag es aber auch am Licht oder dass ich diesmal mehr Abstand genommen habe.
Ok, die bessere Laune könnte dazu auch beitragen haben.
Code
Alles anzeigenpi@raspberrypi:~/forumtest $ python3 dennis.py ic| cv2.__file__: '/usr/lib/python3/dist-packages/cv2.cpython-37m-arm-linux-gnueabihf.so' ic| 'frontalface_default.xml gefunden' ic| CASCADE_PATH / file: PosixPath('/home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml') ic| face_cascade: <CascadeClassifier 0xa5de2ad0> ic| video_capture: <VideoCapture 0xa5de2be0> ic| video_capture.isOpened(): True ic| ret: True ic| frame: array([[[111, 103, 101], [115, 107, 105], [112, 104, 106], ..., [ 85, 81, 72], [ 71, 71, 68], [248, 248, 245]], [[116, 108, 106], [113, 105, 103], [113, 105, 107], ..., [ 84, 80, 71], [ 71, 71, 68], [247, 247, 244]], [[114, 104, 108], [117, 107, 111], [113, 105, 107], ..., [ 84, 80, 71], [ 70, 70, 67], [247, 247, 244]], ..., [[200, 197, 198], [208, 205, 206], [212, 209, 210], ..., [ 0, 1, 0], [ 1, 5, 1], [241, 245, 241]], [[175, 169, 172], [172, 166, 169], [174, 170, 173], ..., [ 0, 1, 0], [ 2, 6, 2], [241, 245, 241]], [[190, 184, 187], [193, 187, 190], [189, 185, 188], ..., [ 0, 1, 0], [ 6, 10, 6], [241, 245, 241]]], dtype=uint8) ic| gray: array([[103, 107, 106, ..., 79, 70, 247], [108, 105, 107, ..., 78, 70, 246], [106, 109, 107, ..., 78, 69, 246], ..., [198, 206, 210, ..., 1, 3, 243], [171, 168, 171, ..., 1, 4, 243], [186, 189, 186, ..., 1, 8, 243]], dtype=uint8) ic| face_cascade.empty(): False ic| x: 223, y: 168, w: 187, h: 187
Deine Werte sind jetzt drin
Trotzdem Spanisch!
Verstehe ich richtig, dass die Aufzeicnung funktioniert und damit das als Fehlerquelle ausgesclossen ist?
Was uns wiederum zum cascade-Pfade-Fehler führt?
Grüße
-
-
Ich habe OpenCV nach einigen Schwierigkeiten installieren können.
Wie hast du das denn hinbekommen ?
Ich sitze jetzt schon 2 Tage dran und bekomme es nicht installiert, nicht kompiliert, nichts.
-
Ok, die bessere Laune könnte dazu auch beitragen haben.
Verstehe ich richtig, dass die Aufzeicnung funktioniert und damit das als Fehlerquelle ausgesclossen ist?
So verstehe ich das auch.
Was uns wiederum zum cascade-Pfade-Fehler führt?
Wenn der Fehler noch bestehen würde, wäre er jetzt in deinem 'denniy.py' - Skript aufgetaucht.
Ich würde jetzt mal das ursprüngliche Skript nehmen, Zeile 21 gegen diese Zeile tauschen:
cascPath = '/home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml'
und mal sehen was passiert. Wir haben meiner Meinung nach ja rausgefunden, dass es damit zu keiner Fehlermeldung kam, dass die Videoverbindung steht und das auch Bilder gelesen werden.[/tt]
Duck und Weg.Ja danke, tschüüüüüss
fred0815 was passiert, wenn du es so machst wie ich?
Grüße
Dennis
-
Hallo.
@fred01815: Nutze Beitrag #50.
Dennis hat alles super zusammengefasst.
Sobald ich alles zum laufen kriege, teile ich es abernochmal zusammengefasst in einem Beitrag mit.
Irgendwas stimmt mit der Zeile nicht.
Klammern?
Muss noch etwas basteln.
Nachtrag: ok, es müsste lauten
cascPath = ('home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
Zumindest der erste Schrästrich muss weg sonst kommt es zu einem "Init Error"
Ob die Klammern hinmüssen? Beide Varianten führen zum nächsten, bereits bekannten, Error.
Codepi@raspberrypi:~/forumtest/palt-tilt-cam $ python3 cam_pantiltcontrol.py home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml OpenCV Error: Assertion failed (!empty()) in detectMultiScale, file /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/objdetect/src/cascadedetect.cpp, line 1681 Traceback (most recent call last): File "cam_pantiltcontrol.py", line 121, in <module> faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2, minNeighbors=4, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE) cv2.error: /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/objdetect/src/cascadedetect.cpp:1681: error: (-215) !empty() in function detectMultiScale
-
Ob die Klammern hinmüssen? Beide Varianten führen zum nächsten, bereits bekannten, Error.
Also irgendetwas läuft seltsam. Da muss keine Klammer hin und der erste Slash kann auch bleiben. Wenn etwas zwischen Anführungszeichen bzw. Hochkomata steht, dann ist die Zeichenfolge vom Typ String. Ein führender Slash hat dabei keine Auswirkung. Anders ist es zum Beispiel mit der Zeichenfolge "\n", lass dazu mal folgenden Code laufen:
Codeein_daten_typ = '/Ich bin ein String' print(type(ein_daten_typ)) print(ein_daten_typ) mit_bestimmter_zeichenfolge = '/Ich bin\nein String' print(type(mit_bestimmter_zeichenfolge)) print(mit_bestimmter_zeichenfolge)
Damit ich den Fehler mit 'smbus' nicht mehr bekomme, habe ich alle auskommentiert was mit 'pmw' zu tun hat. Dann meine Zeile 21, wie in meinem Post geschrieben, eingefügt und als Ergebnis erhalte ich:
Codepi@raspberrypi:~/forumtest/palt-tilt-cam $ python3 cam_pantiltcontrol.py x y previous 0 0 x y new 16 380 Unable to init server: Verbindung ist gescheitert: Verbindungsaufbau abgelehnt (face_tracking:2476): Gtk-WARNING **: 17:01:26.939: cannot open display:
Die Ausgabe mit 'new' wird erst in Zeile 161 abgearbeitet, mein Code ist also an deiner fehlerhaften Zeile 121 schon "vorbei".
Tut mir leid, jetzt weis ich wirklich nicht mehr weiter. Dein Test davor war erfolgreich und jetzt das
Wenn du magst, kannst du auch deinen ganzen Code nochmals posten, falls doch irgendwo noch ein Tippfehler drin ist. Ansonsten halte ich mal den Platz für die Leute mit mehr Ahnung frei. Denen fällt bestimmt noch einiges ein
Grüße
Dennis
-
# Änderung Zeile21 in: cascPath=os.path.normpath("/home/pi/forumtest/opencv/data/haarcascade_frontalface_default.xml")
Dennis89 Sollte es nicht so sein:
/home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml
?
Meine Ausgabe:
Code
Alles anzeigen/home/pi/palt-tilt-cam# python3 /home/pi/palt-tilt-cam/cam_pantiltcontrol.py /usr/local/lib/python3.7/dist-packages/cv2/home/pi/opencv/data/haarcascades/haarcascade_frontalface_default.xml VIDEOIO ERROR: V4L: can't open camera by index 0 Traceback (most recent call last): File "/home/pi/palt-tilt-cam/cam_pantiltcontrol.py", line 56, in <module> pwm = PCA9685() File "/home/pi/palt-tilt-cam/PCA9685.py", line 36, in __init__ self.write(self.__MODE1, 0x00) File "/home/pi/palt-tilt-cam/PCA9685.py", line 40, in write self.bus.write_byte_data(self.address, reg, value) OSError: [Errno 121] Remote I/O error
-
Guten Morgen fred0815 ,
du hast Recht. In diesem Versuch hatte ich nur das Verzeichnis geändert. Schau dir mal noch meine letzten Versuche an, da habe ich dann explizit den Pfad an der *.xml - Datei angegeben.
Versuch mal im Code alles mit 'pwm' auszukommentieren und eine Kamera anzuschließen (und aktivieren), falls du eine hast. Dann müsstest du das gleiche Ergebnis wie ich bekommen.
Grüße
Dennis
-
Hallo,
nitte eimal den Pfad hier überprüfen.
Weiß nicht, wie viele Fehler ich da eingesetzt habe.
Aktueller Fehler
Codepi@raspberrypi:~/forumtest/palt-tilt-cam $ python3 cam_pantiltcontrol.py /home/pi/forumtest/opencv/data/haarcascades/haarcascade_frontalface_default.xml x y previous 0 0 x y new 27 31 Unable to init server: Could not connect: Connection refused
cascPath =os.path.normpath("/home/pi/forumtest/opencv/data/haarcascades/haarcasascade_frontalface_default.xml")
Muss ich ' oder " -Zeichen setzen?
Grüße
der dem Wahnsinn verfallen ist
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!