Face Tracking mit OpenCV und Pan-Tilt-Hat

  • Der Pfad in dem Programm ist ziemlich sicher falsch. Die Datei hätte an der Stelle nichts zu suchen. Und würde auch bedeuten, dass in einem Verzeichnis in dem Python-Package liegen sollten, plötzlich ein Verzeichnis `data/` wäre, was kein Python-Package enthält. Grosses No-Go!

    Das ist eine Datei die zur C++-Bibliothek OpenCV gehört, und Du musst halt schauen wo die bei Dir ist. Bei mir auf dem Rechner ist die hier zu finden:

    /usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Hallo,

    das würde man so zwar nicht mehr schreiben, aber:

    Code
    cascPath=os.path.dirname("/home/XXX/opencv/data/haarcascades/haarcascade_frontalface_default.xml")

    Oder du müsstest den 'data'-Ordner in das 'cv2'-Verzeichnis kopieren, dann kannst du den Code so lassen. das Verzeichnis findest du zum Beispiel mit diesem Code:

    Code
    import cv2
    
    print(cv2.__file__)


    Grüße

    Dennis

    Edit: Auf GitHub ist die Verzeichnisstrutur /data/haarcascades/haarcascade_frintalface... und im ursprünglichen Code steht /data/haarcascade_frontalface... gleiche das mit deinem Verzeichnis ab.

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo Dennis!

    Danke für die ausführliche Beschreibung.

    Habe den Pfad umbennannt aber am Ende feststellen müssen, dass der Pfadteilweise vorgegeben ist.

    Das Fettgedruckte lässt sich nicht anpassen.

    /usr/lib/python3/dist-packages/home/pi/opencv/data/haarcascades/haarcascade_frontalface_default.xml

    Da /usr/lib,etc schreibgeschützt ist, benötige ich den Befehl "sudo".

    Aber wie lautet der Befehl um dorthin zu kopieren, bzw. wie gebe ich diesen Pfad an?


    Und als Antwort auf den cv2-Punkt:

    print(cv2.__file__)

    >>>

    >>> print(cv2.__file__)

    /usr/lib/python3/dist-packages/cv2.cpython-37m-arm-linux-gnueabihf.so

    >>> print(cv2.__file__)

    /usr/lib/python3/dist-packages/cv2.cpython-37m-arm-linux-gnueabihf.so

    >>>

    Einmal editiert, zuletzt von Discoverer81 (30. Oktober 2021 um 09:43)

  • Moin,

    Habe den Pfad umbennannt

    Hast du in der 'cam_pantiltcontrol.py' Zeile 21 durch:

    Code
    cascPath=os.path.dirname("/home/XXX/opencv/data/haarcascades/haarcascade_frontalface_default.xml")

    ersetzt?

    Das wäre für einen Test mal die Variante, die du am einfachsten wieder rückgängig machen kannst, ohne irgendwelche root-Rechte.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo Dennis,


    ja, habe es umbenannt.

    Allerdings kommt dann das:

    xxxi:~/palt-tilt-cam $ python3 cam_pantiltcontrol.py

    /usr/lib/python3/dist-packages/home/xxx/opencv/data/haarcascades/haarcascade_frontalface_default.xml

    Wie gesagt, der erste Teil wird automatisch genommen.

  • Hallo Dennis und vielen Dank für deine Hilfe!!!!

    Anbei die Fehlermeldung:

    Code
    xxx:~/palt-tilt-cam $ python3 cam_pantiltcontrol.py
    /usr/lib/python3/dist-packages/home/pi/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

    Und hier die ersten 25 Zeilen:

  • Okay, dann vergleiche bitte deine Zeile 21 nochmal genau mit meinem Vorschlag aus Beitrag 29.

    Tipp 'cv2.__file__' gibt das Verzeichnis von 'cv2' zurück, das wollen wir nicht, weil deine 'haarcascades_frontalface_default.xml' dort nicht gespeichert ist, sondern in '/home/...'

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo!

    Habe die Datei angepasst:

    Ergibt:

    Code
    xxx:~/palt-tilt-cam $ python3 cam_pantiltcontrol.py
    
    File "cam_pantiltcontrol.py", line 24
    
    faceCascade = cv2.CascadeClassifier(cascPath)
    
    ^
    
    SyntaxError: invalid syntax
  • RESPEKT Adlerauge!

    Schnel korrigiert doch leider was neues:

    Code
    xxx:~/palt-tilt-cam $ python3 cam_pantiltcontrol.py               
    OpenCV Error: Unknown error code -49 (Input file is empty) in cvOpenFileStorage, file /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 4422
    Traceback (most recent call last):
      File "cam_pantiltcontrol.py", line 24, in <module>
        faceCascade = cv2.CascadeClassifier(cascPath)
    cv2.error: /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp:4422: error: (-49) Input file is empty in function cvOpenFileStorage

    Ich habe keinen build Ordner, aber die Datei "persistence.cpp" habe ich gefunden.

    xxx:~ $ find -name persistence.cpp

    ./opencv/modules/core/src/persistence.cpp


    Grüße

    Einmal editiert, zuletzt von Discoverer81 (30. Oktober 2021 um 15:10)

  • Hallo,

    __blackjack__ , das war wohl meine Schuld, ich habe das „dirname()“ aus dem originalen Code übernommen ohne zu überprüfen ob dass durch das zusammen puzzeln mit den „+“ nachher auf die Datei oder das Verzeichnis zeigt. :blush:

    In dem Fall wäre eventuell „os.normpath()“ das richtige?


    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo!

    Sorry, abgeseen davon, dass ich scon fast aufgebe, verstehe ich nicht wirklich.

    Dies ist der aktuelle Code

    Code
    cascPath=os.path.dirname("/home/xxx/opencv/data/haarcascades/haarcascade_frontalface_default.xml"

    und es sollte nun

    Code
    cascPath=os.normpath("/home/xxx/opencv/data/haarcascades/haarcascade_frontalface_default.xml"

    heißen?


    Und was ist mit

    Code
    OpenCV Error: Unknown error code -49 (Input file is empty) in cvOpenFileStorage, file /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 4422

    Hier wird doch auch auf einen Ordner verwiesen (der bei mir woanders liegt).

    Wäre es nicht einfacher, die Daten entsprechend dort hineinzukopieren.

    Zum einen, weil ich nicht herausfinde, wo der Pfad angegeben ist, sonst könnte ich ihn ändern.


    Grüße

  • und es sollte nun ... heißen?

    Ja versuche das mal, achte auf die fehlende schließende Klammer.

    Zum zweiten Teil kann ich leider nichts sagen, auch nicht ob er mit dem ersten Fehler zusammenhängt. Versuche bitte mal die Änderung von 'dirname' in 'normpath' und wenn dann wieder einen Fehlermeldung kommt, poste sie bitte vollständig.

    Viel Glück,

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!