»Endlich ist es Zeit, sich zu amüsieren.
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
#OpenCV-Standardpfad für Gesichtsklassifizierer
cascade_path = '/usr/local/Cellar/opencv3/3.2.0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)
#Identifikationsetikett und der Name, der jeder Etikettennummer entspricht
HUMAN_NAMES = {
0: u"Kyo",
1: u"Kaoru",
2: u"Shinya"
}
#Angegebenes Bild(img_path)Lernergebnisse(ckpt_path)Beurteilung mit
def evaluation(img_path, ckpt_path):
#Graph Reset(Anscheinend bin ich mir nicht sicher, was ich tue ...)
tf.reset_default_graph()
#Datei öffnen
f = open(img_path, 'r')
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
#In ein Schwarzweißbild konvertieren
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceCascade.detectMultiScale(gray, 1.1, 3)
if len(face) > 0:
for rect in face:
#Ich wollte dem verarbeiteten Bild einen passenden Namen geben, weil es keine Rolle spielt. Vielleicht das Datum und die Anzahl der Sekunden
random_str = str(random.random())
#Schreiben wir den Gesichtsteil mit einer roten Linie
cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2)
#Wo soll das Bild gespeichert werden, wobei das Gesicht von einer roten Linie umgeben ist?
face_detect_img_path = '{Verzeichnispfad}' + random_str + '.jpg'
#Speichern des Bildes mit dem Gesicht, das von einer roten Linie umgeben ist
cv2.imwrite(face_detect_img_path, img)
x = rect[0]
y = rect[1]
w = rect[2]
h = rect[3]
#Speichern Sie das Bild des erkannten Gesichtsausschnitts
cv2.imwrite('{Verzeichnispfad}' + random_str + '.jpg', img[y:y+h, x:x+w])
#Schneiden Sie das Gesichtsbild aus, um es an TensorFlow weiterzuleiten
target_image_path = '{Verzeichnispfad}' + random_str + '.jpg'
else:
#Wird kein Gesicht gefunden, endet die Verarbeitung
print 'image:No Face'
return
f.close()
f = open(target_image_path, 'r')
#Array zum Einfügen von Daten
image = []
img = cv2.imread(target_image_path)
img = cv2.resize(img, (28, 28))
#Nach dem Anordnen der Bildinformationen in einer Reihe wird 0-Auf einen Float-Wert von 1 setzen
image.append(img.flatten().astype(np.float32)/255.0)
#In das Numpy-Format konvertieren, damit es von TensorFlow verarbeitet werden kann
image = np.asarray(image)
#Gibt die Wahrscheinlichkeit jedes Etiketts für das Eingabebild aus und gibt sie zurück(main.Anruf von py)
logits = main.inference(image, 1.0)
# We can just use 'c.eval()' without passing 'sess'
sess = tf.InteractiveSession()
# restore(Parameter lesen)Vorbereitung von
saver = tf.train.Saver()
#Variable Initialisierung
sess.run(tf.global_variables_initializer())
if ckpt_path:
#Parameter nach dem Lernen lesen
saver.restore(sess, ckpt_path)
# sess.run(logits)Gleich wie
softmax = logits.eval()
#Urteilsergebnis
result = softmax[0]
#Urteilsergebnis%Und abrunden
rates = [round(n * 100.0, 1) for n in result]
humans = []
#Erstellen Sie einen Hash für Etikettennummer, Name und Prozentsatz
for index, rate in enumerate(rates):
name = HUMAN_NAMES[index]
humans.append({
'label': index,
'name': name,
'rate': rate
})
#Nach höchstem Prozentsatz sortieren
rank = sorted(humans, key=lambda x: x['rate'], reverse=True)
#Geben Sie das Ergebnis an die Konsole aus
print rank
#Gibt das Beurteilungsergebnis und den Pfad des verarbeiteten Bildes zurück
return [rank, os.path.basename(img_path), random_str + '.jpg']
#Zum Testen über die Kommandozeile
if __name__ == '__main__':
evaluation('{Verzeichnispfad}/test.jpg', '{Verzeichnispfad}/model2.ckpt')
python eval.py
Recommended Posts