OpenCV ist eine Bibliothek, mit der Bildverarbeitungen mit Programmiersprachen wie Python durchgeführt werden. In diesem Projekt wird OpenCV Library verwendet, um eine Echtzeit-Gesichtserkennung mit Ihrer Webcam als Hauptkamera durchzuführen.

Es folgen die Voraussetzungen dafür: -

  1. Python 2.7
  2. OpenCV
  3. Numpy
  4. Haar Cascade Frontal Gesichtsklassifikatoren

Ansatz / verwendete Algorithmen:

  1. Dieses Projekt verwendet den LBPH-Algorithmus (Local Binary Patterns Histograms), um Gesichter zu erkennen. Es beschriftet die Pixel eines Bildes durch Schwellenwertbildung der Nachbarschaft jedes Pixels und betrachtet das Ergebnis als Binärzahl.
  2. LBPH verwendet 4 Parameter:
    (i) Radius: Der Radius wird verwendet, um das kreisförmige lokale Binärmuster aufzubauen, und repräsentiert den Radius um das
    zentrale Pixel.
    (ii) Nachbarn: Die Anzahl der Abtastpunkte zum Erstellen des kreisförmigen lokalen Binärmusters.
    (iii) Gitter X: Die Anzahl der Zellen in horizontaler Richtung.
    (iv) Gitter Y: Die Anzahl der Zellen in vertikaler Richtung.
  3. Das gebaute Modell wird mit den Gesichtern trainiert, denen ein Etikett zugewiesen wurde. Später erhält die Maschine Testdaten und die Maschine entscheidet über das richtige Etikett.

Wie benutzt man :

  1. Erstellen Sie ein Verzeichnis in Ihrem PC und benennen Sie es (sagen Sie Projekt)
  2. Erstellen Sie zwei Python-Dateien mit den Namen create_data.py und face_recognize.py und kopieren Sie den ersten Quellcode bzw. den zweiten Quellcode.
  3. Kopieren Sie haarcascade_frontalface_default.xml in das Projektverzeichnis. Sie können es in opencv oder von
    hier herunterladen .
  4. Sie können jetzt die folgenden Codes ausführen.
import cv2, sys, numpy, os 
haar_file = 'haarcascade_frontalface_default.xml'
  
datasets = 'datasets'  
  
  
sub_data = 'vivek'     
  
path = os.path.join(datasets, sub_data) 
if not os.path.isdir(path): 
    os.mkdir(path) 
  
(width, height) = (130, 100)     
  
face_cascade = cv2.CascadeClassifier(haar_file) 
webcam = cv2.VideoCapture(0
  
count = 1
while count < 30
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 4) 
    for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height)) 
        cv2.imwrite('% s/% s.png' % (path, count), face_resize) 
    count += 1
      
    cv2.imshow('OpenCV', im) 
    key = cv2.waitKey(10) 
    if key == 27: 
        break

Der folgende Code sollte ausgeführt werden, nachdem das Modell für die Gesichter trainiert wurde:



import cv2, sys, numpy, os 
size = 4
haar_file = 'haarcascade_frontalface_default.xml'
datasets = 'datasets'
  
print('Recognizing Face Please Be in sufficient Lights...') 
  
(images, lables, names, id) = ([], [], {}, 0) 
for (subdirs, dirs, files) in os.walk(datasets): 
    for subdir in dirs: 
        names[id] = subdir 
        subjectpath = os.path.join(datasets, subdir) 
        for filename in os.listdir(subjectpath): 
            path = subjectpath + '/' + filename 
            lable = id
            images.append(cv2.imread(path, 0)) 
            lables.append(int(lable)) 
        id += 1
(width, height) = (130, 100) 
  
(images, lables) = [numpy.array(lis) for lis in [images, lables]] 
  
model = cv2.face.LBPHFaceRecognizer_create() 
model.train(images, lables) 
  
face_cascade = cv2.CascadeClassifier(haar_file) 
webcam = cv2.VideoCapture(0) 
while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height)) 
        
        prediction = model.predict(face_resize) 
        cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 3) 
  
        if prediction[1]<500: 
  
           cv2.putText(im, '% s - %.0f' % 
(names[prediction[0]], prediction[1]), (x-10, y-10),  
cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
        else: 
          cv2.putText(im, 'not recognized'
(x-10, y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
  
    cv2.imshow('OpenCV', im) 
      
    key = cv2.waitKey(10) 
    if key == 27: 
        break

Hinweis: Die oben genannten Programme werden nicht in der Online-IDE ausgeführt.

Screenshots des Programms

Es könnte etwas anders aussehen, weil ich das obige Programm in das Kolbengerüst integriert hatte

Das Ausführen des zweiten Programms führt zu ähnlichen Ergebnissen wie im folgenden Bild:

Gesichtserkennung

Gesichtserkennung

Datensatzspeicherung:

data_sets

data_sets