Inhaltsverzeichnis:

Gesichtserkennung + -erkennung - Gunook
Gesichtserkennung + -erkennung - Gunook

Video: Gesichtserkennung + -erkennung - Gunook

Video: Gesichtserkennung + -erkennung - Gunook
Video: Gesichtserkennung | Die Martina Hill Show | SAT.1 2024, November
Anonim
Image
Image
Gesichtserkennung + -erkennung
Gesichtserkennung + -erkennung

Dies ist ein einfaches Beispiel für die Gesichtserkennung und -erkennung mit OpenCV von einer Kamera. HINWEIS: ICH HABE DIESES PROJEKT FÜR DEN SENSORWETTBEWERB GEMACHT UND ICH VERWENDETE DIE KAMERA ALS SENSOR, UM GESICHTER ZU VERFOLGEN UND ZU ERKENNEN. Also, unser ZielIn dieser Sitzung: 1. Anaconda installieren 2. Open CV Package herunterladen 3. Umgebungsvariablen einstellen 4. Test zur Bestätigung 5 • Code für die Gesichtserkennung erstellen 6. Code zum Erstellen des Datensatzes erstellen 7. Code zum Trainieren des Erkenners erstellen 8. Code zum Erkennen der Gesichter erstellen &Ergebnis.

Schritt 1: Installieren Sie Anaconda

Anaconda installieren
Anaconda installieren

Anaconda ist im Wesentlichen eine schön verpackte Python-IDE, die mit vielen nützlichen Paketen wie NumPy, Pandas, IPython Notebook usw. geliefert wird. Sie scheint überall in der wissenschaftlichen Gemeinschaft empfohlen zu werden. Schauen Sie sich Anaconda an, um es zu installieren.

Schritt 2: Open CV-Paket herunterladen

Open CV-Paket herunterladen
Open CV-Paket herunterladen

Rufen Sie zunächst die offizielle OpenCV-Site auf, um das vollständige OpenCV-Paket herunterzuladen. Wählen Sie eine Version aus, die Ihnen gefällt (2.x oder 3.x). Ich arbeite mit Python 2.x und OpenCV 2.x - hauptsächlich, weil die OpenCV-Python-Tutorials darauf aufgebaut/basiert sind.

In meinem Fall habe ich das Paket (im Wesentlichen einen Ordner) direkt auf mein F-Laufwerk extrahiert. (F:\opencv).

Schritt 3: Umgebungsvariablen einstellen

Umgebungsvariablen einstellen
Umgebungsvariablen einstellen

Kopieren Sie die Datei cv2.pyd und fügen Sie sie ein

Das Verzeichnis Anaconda Site-packages (z. B. F:\Program Files\Anaconda2\Lib\site-packages in meinem Fall) enthält die Python-Pakete, die Sie importieren können. Unser Ziel ist es, die Datei cv2.pyd in dieses Verzeichnis zu kopieren und einzufügen (damit wir den Import cv2 in unseren Python-Codes verwenden können.).

Kopieren Sie dazu die Datei cv2.pyd…

Aus diesem OpenCV-Verzeichnis (der Anfangsteil kann auf Ihrem Computer etwas anders sein):

# Python 2.7- und 64-Bit-Computer: F:\opencv\build\python\2.7\x64# Python 2.7- und 32-Bit-Computer: F:\opencv\build\python\2.7\x84

Zu diesem Anaconda-Verzeichnis (der Anfangsteil kann auf Ihrem Computer etwas anders sein):

F:\Programme\Anaconda2\Lib\site-packages

Nachdem wir diesen Schritt ausgeführt haben, können wir nun import cv2 in Python-Code verwenden. ABER, wir müssen noch ein bisschen mehr arbeiten, damit FFMPEG (Video-Codec) funktioniert (um Dinge wie die Verarbeitung von Videos zu ermöglichen).

Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz" (oder "Dieser PC" unter Windows 8.1) -> klicken Sie mit der linken Maustaste auf Eigenschaften -> klicken Sie mit der linken Maustaste auf die Registerkarte "Erweitert" -> klicken Sie mit der linken Maustaste auf die Schaltfläche "Umgebungsvariablen…". Fügen Sie eine neue Benutzervariable hinzu auf OpenCV verweisen (entweder x86 für 32-Bit-System oder x64 für 64-Bit-System.) Ich bin derzeit auf einem 64-Bit-Rechner.

32-bitOPENCV_DIRC:\opencv\build\x86\vc12

64-bitOPENCV_DIRC:\opencv\build\x64\vc12

Hängen Sie %OPENCV_DIR%\bin an den Benutzervariablen PATH an.

Meine Benutzervariable PATH sieht zum Beispiel so aus…

Vor:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts

Nach:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

Das ist es, wir sind fertig! FFMPEG ist einsatzbereit!

Schritt 4: Zur Bestätigung testen

Zur Bestätigung testen
Zur Bestätigung testen
Zur Bestätigung testen
Zur Bestätigung testen

Wir müssen testen, ob wir dies jetzt in Anaconda tun können (über Spyder IDE):

  • OpenCV-Paket importieren
  • Verwenden Sie das FFMPEG-Dienstprogramm (um Videos zu lesen/schreiben/verarbeiten)

Test 1: Können wir OpenCV importieren?

Um zu bestätigen, dass Anaconda jetzt das OpenCV-Python-Paket (nämlich cv2) importieren kann, Geben Sie diese in der IPython-Konsole aus:

CV2 importieren

cv2 drucken._version_

Wenn das Paket cv2 fehlerfrei importiert und die cv2-Version ausgedruckt wird, dann sind wir alle gut!

Test 2: Können wir den FFMPEG-Codec verwenden?

Probe platzieren

input_video.mp4

Videodatei in einem Verzeichnis. Wir wollen testen, ob wir können:

  • Lesen Sie diese.mp4-Videodatei und
  • eine neue Videodatei schreiben (kann.avi oder.mp4 usw. sein)

Dazu benötigen wir einen Test-Python-Code, nennen Sie ihn test.py. Legen Sie es in das gleiche Verzeichnis wie das Beispiel

input_video.mp4

Datei.

Das ist was

test.py

aussehen könnte (Anmerkung: vielen Dank an die Vorschläge von Pete und Warren im Kommentarfeld - ich habe meinen ursprünglichen Testcode durch seinen ersetzt - bitte teste ihn selbst und lass uns wissen, ob das besser funktioniert):

CV2 importieren

cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = Video erfolgreich gelesen. False - Video kann nicht gelesen werden. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = Video erfolgreich schreiben. False - Video kann nicht geschrieben werden. cap.release() out.release()

Dieser Test ist SEHR WICHTIG. Wenn Sie Videodateien verarbeiten möchten, müssen Sie sicherstellen, dass Anaconda / Spyder IDE den FFMPEG (Videocodec) verwenden kann. Es hat Tage gedauert, bis es funktionierte. Aber ich hoffe, Sie brauchen viel weniger Zeit!:) Hinweis: noch ein sehr wichtiger Tipp bei der Verwendung der Anaconda Spyder IDE. Überprüfen Sie unbedingt das Current Working Directory (CWD)!!!

Schritt 5: Code für die Gesichtserkennung erstellen

Code für die Gesichtserkennung erstellen
Code für die Gesichtserkennung erstellen
Code für die Gesichtserkennung erstellen
Code für die Gesichtserkennung erstellen

Ziel

In dieser Sitzung,

  • Wir werden die Grundlagen der Gesichtserkennung mit den merkmalsbasierten Kaskadenklassifizierern von Haar kennenlernen
  • Wir werden dasselbe für die Augenerkennung usw. erweitern

Haarkaskadenerkennung in OpenCV

Hier beschäftigen wir uns mit der Erkennung. OpenCV enthält bereits viele vortrainierte Klassifikatoren für Gesicht, Augen, Lächeln usw. Diese XML-Dateien werden im Ordner opencv/data/haarcascades/ gespeichert. Lassen Sie uns mit OpenCV einen Gesichts- und Augendetektor erstellen. Zuerst müssen wir die erforderlichen XML-Klassifikatoren laden. Laden Sie dann unser Eingabebild (oder Video) im Graustufenmodus ODER wir können die Kamera verwenden (für die Echtzeit-Gesichtserkennung)

numpy als np importieren

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades./haarcascade_eye.xml') cap = cv2. VideoCapture(0)while 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) in Gesichtern: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grau[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) für (ex, ey, ew, eh) in den Augen: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "gefunden " +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()

Schritt 6: Code zum Erstellen eines Datensatzes erstellen

Code zum Erstellen von Datensätzen erstellen
Code zum Erstellen von Datensätzen erstellen
Code zum Erstellen von Datensätzen erstellen
Code zum Erstellen von Datensätzen erstellen

Wir machen Gesichtserkennung, Sie benötigen also einige Gesichtsbilder! Sie können entweder Ihren eigenen Datensatz erstellen oder mit einer der verfügbaren Gesichtsdatenbanken beginnen, https://face-rec.org/databases/ gibt Ihnen einen aktuellen Überblick. Drei interessante Datenbanken sind (Teile der Beschreibung sind zitiert von

  • AT&T Gesichtsdatenbank
  • Yale-Gesichtsdatenbank A
  • Erweiterte Yale-Gesichtsdatenbank B

HIER verwende ich meinen eigenen Datensatz….mit Hilfe des Codes, der unten angegeben ist:

numpy als np importieren

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('enter user id') sampleN=0; while 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in Faces: sampleN = Probe N+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", grau[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) if sampleN > 20: break cap.release() cv2.destroyAllWindows()

Schritt 7: Code zum Trainieren des Erkenners erstellen

Code erstellen, um den Erkenner zu trainieren
Code erstellen, um den Erkenner zu trainieren

Erstellen Sie die Funktion zur Vorbereitung des Trainingssets

Nun definieren wir eine Funktion

getImagesWithID(Pfad)

Das nimmt den absoluten Pfad zur Bilddatenbank als Eingabeargument und gibt Tupel von 2 Listen zurück, eine mit den erkannten Gesichtern und die andere mit dem entsprechenden Label für dieses Gesicht. Wenn beispielsweise der i-te Index in der Liste der Gesichter das fünfte Individuum in der Datenbank darstellt, dann hat die entsprechende i-te Position in der Liste der Labels den Wert 5.

Konvertieren Sie nun die Dataset-Gesichter (die in Schritt 6) erstellt werden, mit Hilfe des unten angegebenen Codes in eine.yml-Datei:

Importieren von OS

import numpy as np import cv2 from PIL import Image # Für die Gesichtserkennung verwenden wir die LBPH Face Recognizer-Erkennung = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path)faces = IDs = for imagePath in imagePaths: # Bild lesen und in Graustufen konvertieren faceImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Rufen Sie das Label des Bildes ab ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Erkenne das Gesicht im Bildfaces.append(faceNP) IDs.append (ID) cv2.imshow("Hinzufügen von Gesichtern zum Training", faceNP) cv2.waitKey(10) return np.array(IDs), Gesichter Ids, Gesichter = getImagesWithID(path)cognizer.train(faces, Ids)cognizer.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

Mit diesem Code werden alle Gesichtsdatensätze in eine einzelne.yml-Datei konvertiert….. Pfadort ist ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Schritt 8: Erstellen Sie Code, um die Gesichter und das Ergebnis zu erkennen

Guyzz, dies ist der letzte Schritt, in dem wir den Code erstellen können, um die Gesichter mit Hilfe Ihrer Webcam zu erkennen. 1. Aufnehmen des Videos von der Kamera 2. Vergleichen Sie es mit Ihrer.yml-Datei

import numpy as npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) während 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) für (x, y, w, h) in Flächen: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(gray[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if id= =5: id='rahul' if id==6: id="akshay" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), Schriftart, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break cap.release()

cv2.destroyAllWindows()

und schließlich kommt das Ergebnis vor Ihren Augen … Sie können die Zip-Datei auch von unten unter dem Link herunterladen: Klicken Sie hier, um die Codes herunterzuladen wie dieses instructable….. plzzz abonniere mich und stimme für mich…..danke Freunde:)