!/usr/bin/python
-*- coding: utf-8 -*-
import cv2, os
import numpy as np
from PIL import Image
# Bild lernen
train_path = './training_data'
# Testbild
test_path = './test_data'
# Haarartiger Merkmalsklassifikator
cascadePath = "./haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)
LBPH
recognizer = cv2.createLBPHFaceRecognizer()
def get_images_and_labels(path):
#Array zum Speichern von Bildern
images = []
# Array zum Speichern von Etiketten
labels = []
#Array zum Speichern von Dateinamen
files = []
for f in os.listdir(path):
#Bildpfad
image_path = os.path.join(path, f)
# Bild in Graustufen laden
image_pil = Image.open(image_path).convert('L')
Im # NumPy-Array gespeichert
image = np.array(image_pil, 'uint8')
# Haar-ähnlicher Feature-Klassifikator erkennt Gesicht (Parameter sind angemessen)
faces = faceCascade.detectMultiScale(image,1.1,9,0)
# Verarbeitung des erkannten Gesichtsbildes
for (x, y, w, h) in faces:
# Ändern Sie die Größe des Gesichts auf 200 x 200
roi = cv2.resize(image[y: y + h, x: x + w], (200, 200), interpolation=cv2.INTER_LINEAR)
# Bilder in einem Array speichern
images.append(roi)
# Beschriftung vom Dateinamen abrufen "Angenommen, ein Dateiname wie 0_xxxxx.jpg "
labels.append(int(f[0]))
# Speichern Sie Dateinamen in einem Array
files.append(f)
return images, labels, files
# Holen Sie sich ein Trainingsbild
images, labels, files = get_images_and_labels(train_path)
# Durchführung der Schulung
recognizer.train(images, np.array(labels))
# Holen Sie sich das Testbild
test_images, test_labels, test_files = get_images_and_labels(test_path)
i = 0
while i < len(test_labels):
# Vorhersage für Testbilder
label, confidence = recognizer.predict(test_images[i])
# Ausgabe des Vorhersageergebnisses an die Konsole
print("Test Image: {}, Predicted Label: {}, Confidence: {}".format(test_files[i], label, confidence))
# Testbild anzeigen
cv2.imshow("test image", test_images[i])
cv2.waitKey(1000)
i += 1
cv2.destroyAllWindows()
Recommended Posts