Seite 2 von 2
Re: OpenCV Gesichtserkennung
Verfasst: Samstag 25. August 2018, 13:07
von ThomasL
meine Gedanken/Fragen dazu:
- im Code oben wird dem Dateinamen zweimal .jpg zugewiesen
- wird das Unterverzeichnis mit dem Personennamen auch erstellt?
- wenn es ein Verzeichnis mit dem Namen der Person gibt, warum wird dem Dateinamen nochmals der Personenname zugewiesen?
- cv2.imwrite() liefert ein Boolean zurück, gib das mal aus, ich vermute False deutet auf einen Fehler beim schreiben
- gib imwrite mal manuell einen Pfadnamen ala imwrite('C:\cv2testdatei.jpg', roi_gray), wird diese Datei geschrieben?
Re: OpenCV Gesichtserkennung
Verfasst: Samstag 25. August 2018, 14:00
von ThomasL
Habe mal aus Spaß an der Freud opencv installiert und deinen Code in einem Jupyter Notebook ausprobiert.
Der Ordner "Personen" mit Unterordner "Vorname Nachname" wird erstellt.
Die Bilddateien werden problemlos geschrieben, haben aber .jpg.jpg am Ende. Naja, leicht zu ändern.
Das bei dir keine Dateien geschrieben werden, liegt also nicht am Code.
cv2.imwrite() liefert bei mir True zurück, Dateien werden ja auch erstellt. Was gibt es bei dir zurück?
Re: OpenCV Gesichtserkennung
Verfasst: Samstag 25. August 2018, 15:21
von Sirius3
@DonJuan: Du erzeugst den Pfad './Personen/' + name willst aber in os.path.join(Basispfad, "Personen", name) schreiben. Solange Du den Pfad auf zwei verschiedene Arten zusammensetzt, kann es halt sein, dass zwei verschiedene Orte dabei rauskommen. Die Lösung ist, die Variable »Namenpfad« so zu definieren, wie Du es möchtest (also entweder relativ zum Skript oder zum Arbeitsverzeichnis) und sie überall zu benutzen.
@ThomasL: danke ThomasL, dass Du den OP weiter verwirrst, indem Du schreibst, sein Code wäre richtig, obwohl schon drei andere Leute geduldig versuchen, ihm den Fehler, den er macht zu erklären.
Re: OpenCV Gesichtserkennung
Verfasst: Samstag 25. August 2018, 15:48
von ThomasL
Kann jetzt schlecht Bitte sagen, zu verwirren war ja nicht meine Absicht.
Ich stimme dir zu, mit der Aussage "liegt also nicht am Code" habe ich mich etwas zu weit aufs Glatteis gewagt.
Aus der Tatsache, dass der Code bei mir funktioniert auf Korrektheit in anderen Umgebungen zu schließen,
ist vermessen und da es bei ihm ja nicht läuft sogar falsch.
Da bin ich im Eifer übers Ziel hinaus geschossen.
Re: OpenCV Gesichtserkennung
Verfasst: Mittwoch 20. Februar 2019, 12:57
von Vicky
Hallo, ich bin ganz neu im Forum und glaube, dass meine Frage hier ganz gut reinpasst, auch wenn sie mit der Ursprungsfrage nichts zu tun hat.
Folgender Code greift die Koordinaten des erkannten Bildes ab und macht es unscharf, um es dann anzuzeigen.
roi_color = img_frame[y:y + h, x:x + w]
roi_color = cv2.GaussianBlur(roi_color, (21,21), 0)
cv2.imshow("unscharf", roi_color)
Was ich möchte, ist aber kein neues Fenster, sondern dass direkt im Originalbild das Gesicht unscharf gezeichnet wird. Wie mache ich das?
Vielen Dank im Voraus!
Re: OpenCV Gesichtserkennung
Verfasst: Mittwoch 20. Februar 2019, 14:21
von __blackjack__
@Vicky: Wie kann eine Frage hier ganz gut reinpassen die nichts mit der ursprünglichen Frage zu tun hat?
Wenn Du `img_frame` ändern möchtest, müsstest Du das Ergebnis von `GaussianBlur` wieder dem Bildausschnitt zuweisen.
Re: OpenCV Gesichtserkennung
Verfasst: Freitag 22. Februar 2019, 07:32
von Vicky
Super, vielen Dank, hat geklappt! Nächste Challenge: ich möchte das Gesicht nicht verschwommen anzeigen, sondern ein anderes Gesicht vor das Originalgesicht einblenden. Dazu habe ich eine Datei erstellt (sarah_gesicht_klein.jpg), die nur das Gesicht enthält. Es kommt aber ein Value Error could not broadcast input array from shape (594,480,3) into shape (175,175,3). Die Bildgröße der einzufügenden Datei mittels cv2.resize zu verändern bringt nichts, weil die Bezugsgröße sich ständig ändert. Wer weiß eine Lösung? Vielen Dank!
import cv2
video = cv2.VideoCapture(0)
sarah = cv2.imread("sarah_gesicht_klein.jpg")
while True:
check, frame = video.read()
frame = cv2.flip(frame, 1)
result_image = frame.copy()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
classifier = cv2.CascadeClassifier("c:/Users/vw/Kursmaterialien/data/haarcascades/haarcascade_frontalface_alt2.xml")
faces = classifier.detectMultiScale(gray, 1.1, minNeighbors=8)
for x, y, w, h in faces:
roi_color = frame[y:y + h, x:x + w]
result_image[y:y + roi_color.shape[0], x:x + roi_color.shape[1]] = sarah
cv2.imshow("Test", result_image)
key = cv2.waitKey(1)
if key == ord("q"):
break
print(frame)
video.release()
cv2.destroyAllWindows()
Re: OpenCV Gesichtserkennung
Verfasst: Freitag 22. Februar 2019, 09:10
von __deets__
Doch, genau das musst du tun. Für jeden Frame dein Gesicht auf die gewünschte Größe resizen bevor du es einkopierst.