Problem mit OpenCV Beispiel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
simon137
User
Beiträge: 5
Registriert: Samstag 21. September 2013, 21:10

Hallo zusammen,

Ich arbeite jetzt seit einiger Zeit mit Python und wollte ein bisschen im Bereich "Face Detection" mit OpenCV herumspielen, also habe ich mir die python-opencv Erweiterung heruntergeladen und installiert und folgendes Beispielprogramm von der OpenCV Website ausprobiert:

Code: Alles auswählen

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread('meinbild.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Da ich auf meinem System keine Graphische Oberfläche habe, habe ich dass Programm dahingehen modifiziert dass das Foto mit den erkannten Gesichtern nicht angezeigt wird sondern wieder in einer Datei gespeichert wird:

Code: Alles auswählen

cv2.imwrite('/mein/pfad/meinbild.jpg', img)

#cv2.imshow('img',img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
Jetz habe ich dass Problem dass das Ausgabebild mit dem Eingabebild 1:1 identisch ist und keine Rechtecke bei den erkannten Gesichtern vorhanden sind, wie auf der Website beschrieben:

https://opencv-python-tutroals.readthed ... s/face.jpg

Ich habe schon Verschieden Bilder bzw. verschieden Haarcascade .xml Dateien versucht, also muss der Fehler bei meinem Programm liegen.

Vielen Dank im Vorraus für eure Hilfe
simon137
Zuletzt geändert von Anonymous am Samstag 21. September 2013, 21:56, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Das Ergebnis von ``cv2.rectangle`` an ``img`` binden sieht auf den ersten Blick nicht nach einer guten Idee aus. Bis wohin läuft denn dein Code überhaupt durch, hast du das mal mit ein paar Ausgaben getestet? Werden überhaupt Gesichter erkannt und das neue Bild wird gar nicht erst geschrieben?
Das Leben ist wie ein Tennisball.
simon137
User
Beiträge: 5
Registriert: Samstag 21. September 2013, 21:10

Es werden leider keine Gesichter erkannt, dass Bild wird aber dennoch geschrieben, der Code läuft fehlerfrei.
Habs schon mit verschiedenen Bildern probiert.

Ich werde morgen mal testen bis wie weit der Code durchläuft.

simon137
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann hast du offensichtlich keine guten Gesichter. Ich hab deinen Code mal lauffähig gemacht:

Code: Alles auswählen

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread('face.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    print x, y, w, h
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Damit funktioniert es dann bei dem Bild halbwegs und bei diesem perfekt.
Das Leben ist wie ein Tennisball.
simon137
User
Beiträge: 5
Registriert: Samstag 21. September 2013, 21:10

ich werds mal ausprobieren, danke
simon137
User
Beiträge: 5
Registriert: Samstag 21. September 2013, 21:10

ich habs mit deinem code und deinen bildern ausprobiert, immernoch sind Ein und Ausgabebild identisch, es werden keine Gesichter erkannt, auch wird nichts ausgegeben, der Programm läuft ein paar Sekunden ohne Ausgaben oder Fehler umd dann ist es fertig.
BlackJack

@EyDu: Also ich bekomme von dem Quelltext das John Cleese Foto auch 1:1 ohne irgendwelche Änderungen angezeigt. `faces` ist in dem Fall leer, dass heisst die Schleife wird gar nicht erst ausgeführt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Tja, bei mir sieht das Ergebnis so aus. Es könnte noch an verschiedenen Datenbanken liegen. Ich benutze diese für die Augen und diese für Gesichter.
Das Leben ist wie ein Tennisball.
BlackJack

@EyDu: Ja, damit geht es dann.
simon137
User
Beiträge: 5
Registriert: Samstag 21. September 2013, 21:10

Bei mir funktioniert es auch, Danke.
Antworten