[PYTHON] [Échec] Trouvez Maki Horikita par apprentissage automatique

【environnement】

windows8.1  Anaconda(python2.7)

【Aperçu】

J'ai écrit le code pour décider à partir de l'image s'il s'agit de Maki Horikita. Collectez des dossiers d'images de visage, numérisez-les et formez-les avec scicit-learn.

Structure des dossiers


|---face_category
     |---horikita_face(Dossier d'images du visage de Maki Horikita 200 pièces)
     |---joyu_face(200 dossiers d'images de visage autres que Maki Horikita)
     |---horikita_siken(20 dossiers d'images de Maki Horikita à tester)
     |---face_rec2.py(horikita_Extraire le visage de l'image siken)
     |---LinearSVC.py(Traitement principal)
     |---haarcascade_frontalface_alt.xml(Fichier en cascade)

face_rec2.py


#-*- coding:utf-8 -*-
def picture_face(before_image, num):

    import cv2
    import os
    import sys
    
    cascade_path = "haarcascade_frontalface_alt.xml"
    
    #Lecture de fichiers
    image_file = cv2.imread('C:/Users/nobu/Desktop/my_programs/face_category/horikita_siken/%s' % before_image)
    
    #Conversion de l'échelle de gris
    image_gray = cv2.cvtColor(image_file, cv2.COLOR_BGR2GRAY)
    
    #Acquérir la quantité de caractéristiques du classificateur en cascade
    cascade = cv2.CascadeClassifier(cascade_path)
    
    #Exécution de la reconnaissance d'objets (reconnaissance faciale)
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
    
    if facerect == None:
        sys.exit()
    
    for rect in facerect:
        #Découpez seulement le visage et enregistrez
        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()

#Données d'entraînement
#Convertir l'image de Maki Horikita en valeur numérique
horikita_list = glob.glob(current_dir + "\\horikita_face\\*") 

horikita_dim2 = []

for image in horikita_list:
    #Exclusion des fichiers système
    if image == current_dir + "\\horikita_face\\Thumbs.db":
        continue
    else:
        x = np.array([])
        horikita_dim3 = np.array(Image.open(image).convert('L'))
        #scikit-Il semble que l'apprentissage ne puisse pas gérer plus de 3 dimensions, alors convertissez-le en 2 dimensions
        for i in xrange(256):
            x = np.r_[x,horikita_dim3[i]]
        horikita_dim2.append(x)

data_training1 = horikita_dim2

#Convertir des images autres que Maki Horikita en valeurs numériques
joyu_list = glob.glob(current_dir + "\\joyu_face\\*") 

joyu_dim2 = []

for image in joyu_list:
    #Exclusion des fichiers système
    if image == current_dir + "\\joyu_face\\Thumbs.db":
        continue
    else:
        x = np.array([])
        joyu_dim3 = np.array(Image.open(image).convert('L'))
        #scikit-Il semble que l'apprentissage ne puisse pas gérer plus de 3 dimensions, alors convertissez-le en 2 dimensions
        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]

#Réglage de l'étiquette
label_training = []
for i in xrange(400):
    if i < 200:
        label_training.append(1)
    else:
        label_training.append(0)

 #Apprentissage
estimator = LinearSVC(C=0.5)
estimator.fit(data_training, label_training)

j = 0
#Données de test
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
        
        #Je vais prédire
        label_prediction = estimator.predict(data_test)
        
        if label_prediction == 1:
            print "----------------------------------------------"
            print str(i) + ".jpg est Maki Horikita"
            print "----------------------------------------------"
        else:
            print "----------------------------------------------"
            print str(i) + ".jpg n'est pas Maki Horikita"
            print "----------------------------------------------"
    except:
        print "----------------------------------------------"
        print str(i) + ".jpg n'a pas pu être traité"
        print "----------------------------------------------"
        continue

【résultat】

Échec ...: fatigué: J'ai testé avec 20 dossiers d'images de visage de Maki Horikita pour les tests, mais pour une raison quelconque Je reçois une sortie disant "Ce n'est pas Maki Horikita". J'aimerais savoir s'il y a des solutions ou des améliorations.

[Site de référence]

SVM pour essayer l'apprentissage automatique avec scikit-learn Effectuer la reconnaissance faciale avec OpenCV, couper et enregistrer uniquement la partie faciale [Python]

Recommended Posts

[Échec] Trouvez Maki Horikita par apprentissage automatique
4 [/] Quatre arithmétiques par apprentissage automatique
Résumé de l'apprentissage automatique par les débutants de Python
Apprentissage automatique
Faire le contrôle d'un homme sandwich par l'apprentissage automatique ver4
Quatre règles de fonctionnement avec l'apprentissage automatique 6 [Commercial]
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Classification des images de guitare par apprentissage automatique Partie 1
Essayez de prédire la demande de puissance par l'apprentissage automatique
Classer les informations liées à l'apprentissage automatique par modèle de sujet
Analyse de l'utilisation de l'espace partagé par l'apprentissage automatique
Prévision du cours de l'action par machine learning Numerai Signals
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
Estimation raisonnable du prix de Mercari par apprentissage automatique
[Memo] Apprentissage automatique
Classification des images de guitare par apprentissage automatique, partie 2
Classification de l'apprentissage automatique
Histoire de l'analyse de données par apprentissage automatique
Exemple d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer chapitres 1 et 2
Prédiction de données chronologiques par AutoML (apprentissage automatique automatique)
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Machine Sommelier par Keras-
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Collectez des données d'apprentissage automatique en grattant des bases de données publiques biosourcées
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
Discriminer les chansons t + pazolite par apprentissage automatique (développement du défi NNC)
Prévisions du cours des actions par apprentissage automatique Commençons Numerai
J'étais frustré par Kaggle, alors j'ai essayé de trouver une bonne propriété locative en grattant et en apprentissage automatique