«Il est enfin temps de vous amuser.
eval.py
#!/usr/local/bin/python
#! -*- coding: utf-8 -*-
import sys
import numpy as np
import cv2
import tensorflow as tf
import os
import random
import main
#Chemin du classificateur de visage par défaut OpenCV
cascade_path = '/usr/local/Cellar/opencv3/3.2.0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)
#Étiquette d'identification et le nom correspondant à chaque numéro d'étiquette
HUMAN_NAMES = {
0: u"Kyo",
1: u"Kaoru",
2: u"Shinya"
}
#Image spécifiée(img_path)Résultats d'apprentissage(ckpt_path)Jugement utilisant
def evaluation(img_path, ckpt_path):
#Réinitialisation du graphique(Apparemment, je ne suis pas sûr de ce que je fais ...)
tf.reset_default_graph()
#Fichier ouvert
f = open(img_path, 'r')
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
#Convertir en image monochrome
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceCascade.detectMultiScale(gray, 1.1, 3)
if len(face) > 0:
for rect in face:
#Je voulais donner un nom approprié à l'image traitée car cela n'a pas d'importance. Peut-être la date et le nombre de secondes
random_str = str(random.random())
#Écrivons la partie du visage avec une ligne rouge
cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2)
#Où enregistrer l'image avec le visage entouré d'une ligne rouge
face_detect_img_path = '{Chemin du répertoire}' + random_str + '.jpg'
#Enregistrement de l'image avec le visage entouré d'une ligne rouge
cv2.imwrite(face_detect_img_path, img)
x = rect[0]
y = rect[1]
w = rect[2]
h = rect[3]
#Enregistrer l'image du visage détecté découpé
cv2.imwrite('{Chemin du répertoire}' + random_str + '.jpg', img[y:y+h, x:x+w])
#Découpez l'image du visage à transmettre à TensorFlow
target_image_path = '{Chemin du répertoire}' + random_str + '.jpg'
else:
#Si aucun visage n'est trouvé, le processus se termine
print 'image:No Face'
return
f.close()
f = open(target_image_path, 'r')
#Tableau pour mettre des données
image = []
img = cv2.imread(target_image_path)
img = cv2.resize(img, (28, 28))
#Après avoir organisé les informations d'image dans une rangée, 0-Défini sur une valeur flottante de 1
image.append(img.flatten().astype(np.float32)/255.0)
#Convertir au format numpy afin qu'il puisse être traité par TensorFlow
image = np.asarray(image)
#Sort et renvoie la probabilité de chaque étiquette pour l'image d'entrée(main.Appel de py)
logits = main.inference(image, 1.0)
# We can just use 'c.eval()' without passing 'sess'
sess = tf.InteractiveSession()
# restore(Lecture des paramètres)Préparation de
saver = tf.train.Saver()
#Initialisation variable
sess.run(tf.global_variables_initializer())
if ckpt_path:
#Lecture des paramètres après l'apprentissage
saver.restore(sess, ckpt_path)
# sess.run(logits)Pareil que
softmax = logits.eval()
#résultat du jugement
result = softmax[0]
#Résultat du jugement%Et arrondir
rates = [round(n * 100.0, 1) for n in result]
humans = []
#Créer un hachage pour le numéro d'étiquette, le nom, le pourcentage
for index, rate in enumerate(rates):
name = HUMAN_NAMES[index]
humans.append({
'label': index,
'name': name,
'rate': rate
})
#Trier par pourcentage le plus élevé
rank = sorted(humans, key=lambda x: x['rate'], reverse=True)
#Sortir le résultat sur la console
print rank
#Renvoie le résultat du jugement et le chemin de l'image traitée
return [rank, os.path.basename(img_path), random_str + '.jpg']
#Pour tester à partir de la ligne de commande
if __name__ == '__main__':
evaluation('{Chemin du répertoire}/test.jpg', '{Chemin du répertoire}/model2.ckpt')
python eval.py