windows8.1 Anaconda(python2.7)
Ich habe den Code geschrieben, um anhand des Bildes zu entscheiden, ob es sich um Maki Horikita handelt. Sammeln Sie Gesichtsbildordner, digitalisieren Sie sie und trainieren Sie sie mit scicit-learn.
Ordnerstruktur
|---face_category
|---horikita_face(Maki Horikitas Gesichtsbildordner 200 Stück)
|---joyu_face(200 Gesichtsbildordner außer Maki Horikita)
|---horikita_siken(20 Bildordner von Maki Horikita zum Testen)
|---face_rec2.py(horikita_Gesicht aus Siken-Bild extrahieren)
|---LinearSVC.py(Hauptverarbeitung)
|---haarcascade_frontalface_alt.xml(Kaskadendatei)
face_rec2.py
#-*- coding:utf-8 -*-
def picture_face(before_image, num):
import cv2
import os
import sys
cascade_path = "haarcascade_frontalface_alt.xml"
#Datei lesen
image_file = cv2.imread('C:/Users/nobu/Desktop/my_programs/face_category/horikita_siken/%s' % before_image)
#Graustufenumwandlung
image_gray = cv2.cvtColor(image_file, cv2.COLOR_BGR2GRAY)
#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
cascade = cv2.CascadeClassifier(cascade_path)
#Ausführung der Objekterkennung (Gesichtserkennung)
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
if facerect == None:
sys.exit()
for rect in facerect:
#Schneiden Sie nur das Gesicht aus und speichern Sie
x = rect[0]
y = rect[1]
width = rect[2]
height = rect[3]
dst = image_file[y:y+height, x:x+width]
resize_image = cv2.resize(dst,(256,256))
new_image_path = 'C:/Users/nobu/Desktop/my_programs/face_category/' + str(num) + '_face.jpg'
print new_image_path
cv2.imwrite(new_image_path, resize_image)
LinearSVC.py
# -*- coding:utf-8 -*-
from sklearn.svm import LinearSVC
from PIL import Image
import os
import glob
import numpy as np
import face_rec2
current_dir = os.getcwd()
#Trainingsdaten
#Konvertieren Sie das Bild von Maki Horikita in einen numerischen Wert
horikita_list = glob.glob(current_dir + "\\horikita_face\\*")
horikita_dim2 = []
for image in horikita_list:
#Ausschluss von Systemdateien
if image == current_dir + "\\horikita_face\\Thumbs.db":
continue
else:
x = np.array([])
horikita_dim3 = np.array(Image.open(image).convert('L'))
#scikit-Es scheint, dass Lernen nicht mehr als 3 Dimensionen verarbeiten kann. Konvertieren Sie also in 2 Dimensionen
for i in xrange(256):
x = np.r_[x,horikita_dim3[i]]
horikita_dim2.append(x)
data_training1 = horikita_dim2
#Konvertieren Sie andere Bilder als Maki Horikita in numerische Werte
joyu_list = glob.glob(current_dir + "\\joyu_face\\*")
joyu_dim2 = []
for image in joyu_list:
#Ausschluss von Systemdateien
if image == current_dir + "\\joyu_face\\Thumbs.db":
continue
else:
x = np.array([])
joyu_dim3 = np.array(Image.open(image).convert('L'))
#scikit-Es scheint, dass Lernen nicht mehr als 3 Dimensionen verarbeiten kann. Konvertieren Sie also in 2 Dimensionen
for i in xrange(256):
x = np.r_[x,joyu_dim3[i]]
joyu_dim2.append(x)
data_training2 = joyu_dim2
data_training = np.r_[data_training1, data_training2]
#Etiketteneinstellung
label_training = []
for i in xrange(400):
if i < 200:
label_training.append(1)
else:
label_training.append(0)
#Lernen
estimator = LinearSVC(C=0.5)
estimator.fit(data_training, label_training)
j = 0
#Testdaten
for i in xrange(1,21):
face_rec2.picture_face(str(i) + '.jpg', i)
horikita_siken = np.array([])
try:
horikita = np.array(Image.open('C:/Users/nobu/Desktop/my_programs/face_category/' + str(i) + '_face.jpg').convert('L'))
for j in xrange(256):
horikita_siken = np.r_[horikita_siken,horikita[j]]
data_test = horikita_siken
#Ich werde vorhersagen
label_prediction = estimator.predict(data_test)
if label_prediction == 1:
print "----------------------------------------------"
print str(i) + ".jpg ist Maki Horikita"
print "----------------------------------------------"
else:
print "----------------------------------------------"
print str(i) + ".jpg ist nicht Maki Horikita"
print "----------------------------------------------"
except:
print "----------------------------------------------"
print str(i) + ".jpg konnte nicht verarbeitet werden"
print "----------------------------------------------"
continue
Misserfolg ...: müde: Ich habe mit 20 Gesichtsbildordnern von Maki Horikita zum Testen getestet, aber aus irgendeinem Grund Ich bekomme eine Ausgabe mit der Aufschrift "Es ist nicht Maki Horikita". Ich würde gerne wissen, ob es Lösungen oder Verbesserungen gibt.
SVM versucht maschinelles Lernen mit Scikit-Learn Gesichtserkennung mit OpenCV durchführen, nur den Gesichtsteil [Python] zuschneiden und speichern
Recommended Posts