Ich wurde gefragt "Kannst du Gesichtserkennung nicht schnell machen?", Also habe ich es versucht. Ich kann keine Feinabstimmung vornehmen.
Auf einem Mac ist das ziemlich einfach. Installieren Sie OpenCV mit Brew. Python verwendet, was ich in Gebräu gesetzt habe. Es scheint, dass numpy auch benötigt wird, aber es wird weggelassen, weil es bereits installiert wurde. Anscheinend wird bei der Installation von OpenCV das Paket cv2 für Python in das Site-Paket kopiert, sodass die Installationsreihenfolge Python → numpy → OpenCV lautet.
bash
brew tap homebrew/science
brew install opencv
Stellen Sie vorerst zuerst den Code zur Verfügung. Ich beschloss, die Kommentare zu hinterlassen, als ich sie für Versuch und Irrtum verwendete, obwohl sie schmutzig waren. Ich habe die Erklärung für die Parametereinstellung hinterlassen, aber www
recognize.py
# -*- coding: utf-8 -*-
import cv2
#Funktionen zur Gesichtserkennung des HAAR-Klassifikators
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"
cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml"
image_path = "lena.jpg "
color = (255, 255, 255) #Weiß
#color = (0, 0, 0) #schwarz
#Datei lesen
image = cv2.imread(image_path)
#Graustufenumwandlung
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
cascade = cv2.CascadeClassifier(cascade_path)
#Ausführung der Objekterkennung (Gesichtserkennung)
#image – CV_Matrix vom Typ 8U. In den hier gespeicherten Bildern werden Objekte erkannt
#Objekte - Ein Vektor, dessen Elemente Rechtecke sind. Jedes Rechteck enthält das erkannte Objekt
#scaleFactor - Stellt den Grad der Reduzierung bei jeder Bildskala dar
#minNeighbors - Kandidatenrechtecke müssen mindestens diese Anzahl von Nachbarn enthalten
#flags - Dieser Parameter wird in der neuen Kaskade nicht verwendet. Für ältere Kaskaden hat es dieselbe Bedeutung wie für die Funktion cvHaarDetectObjects.
#minSize - Die Mindestgröße, die ein Objekt annehmen kann. Objekte, die kleiner als diese sind, werden ignoriert
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
#facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv2.cv.CV_HAAR_SCALE_IMAGE)
print "face rectangle"
print facerect
if len(facerect) > 0:
#Erstellen Sie ein Rechteck, das das erkannte Gesicht umgibt
for rect in facerect:
cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
#Erkennungsergebnisse speichern
cv2.imwrite("detected.jpg ", image)
Da wir dieses Mal kein Bild zum Lernen vorbereitet haben, verwenden wir die Funktionen des HAAR-Klassifikators, der mit OpenCV geliefert wird. Siehe hier für den HAAR-Klassifikator ([10. CV-Studiengruppe OpenCV Festival - Gründliche Erklärung der Objekterkennung!](Http://www.slideshare.net/takmin/opecv-object-detectiontakmin opencv)). Ich konnte jede Feature-Menge im Bild der berühmten Lena erkennen, aber als ich es mit anderen Bildern versuchte, konnte haarcascade_frontalface_default.xml nicht sehr gut erkannt werden, daher ist es besser, verschiedene Dinge auszuprobieren.
Original Bild
Bild nach Erkennung
Recommended Posts