Vous voulez être gentil avec les autres au travail. Endurant la colère de savoir pourquoi je dois le faire, je m'occupe de projets ennuyeux sans me plaindre. Mangeons après le déjeuner, hein ~ Je suis malade pour le moment! Un junior qui visait le moment où il s'étira un peu puis se pencha un peu sur le bureau et s'apprêtait à déjeuner, apporta un nouveau projet ennuyeux. N'est-ce pas ce sentiment sur votre visage? Êtes-vous un monstre junior? Les incidents ne sont plus signalés en raison de la peur, et des incidents encore plus graves se produisent. .. .. Je ne pense pas que ce soit le cas, mais avez-vous un visage effrayant avant de vous en rendre compte au travail? Ou est-ce normal de sourire aujourd'hui? Évaluons objectivement en utilisant la technologie de reconnaissance d'image.
Le visage est photographié à l'aide de la caméra intégrée de l'ordinateur personnel ou de la caméra Web connectée par USB, et évalué par la colère, la nausée, la peur, le bonheur, la tristesse, la surprise et la neutralité. Vous pouvez définir vous-même l'intervalle de prise de vue et l'heure de prise de vue, et les résultats seront représentés graphiquement et enregistrés dans Excel. Le contenu utilise un modèle formé par tensorflow et expression faciale. Je ne peux pas utiliser python! !! Je voulais le donner à quelqu'un qui l'a dit, mais je ne pouvais pas en faire un exe même si j'utilisais pyinstaller. Est-ce parce qu'il existe des packages lourds tels que tensorflow et keras? Veuillez me dire qui peut le faire.
(Initialement conçu pour être évalué par les vétérinaires lorsqu'ils expliquent aux patients. Modifiez le nom dans le code en conséquence.)
Win: à l'invite anaconda, procédez comme suit dans l'ordre. conda create -n face python=3.6.10 proceed ([y]/n)? → y activate face pip install opencv-python pip install pandas pip install matplotlib pip install openpyxl pip install tensorflow pip install keras
Mac: dans Terminal, copiez et collez les éléments suivants dans l'ordre et appuyez sur Entrée un par un. conda create -n face python=3.6.10 anaconda proceed ([y]/n)? → y conda activate face pip install opencv-python pip install pandas pip install matplotlib pip install openpyxl pip install tensorflow pip install keras
Utilisez le modèle de reconnaissance des expressions faciales créé par M. Octavio Arriaga, qui est déployé sur github. Je suis reconnaissant qu'une chose aussi merveilleuse soit déployée gratuitement sur github. Téléchargez le zip, supprimez le fichier appelé fer2013_mini_XCEPTION.110-0.65.hdf5 à partir de là, veuillez le mettre quelque part dans le dossier pour une utilisation à partir de maintenant. https://github.com/oarriaga/face_classification/tree/master/trained_models/emotion_models
Créez le fichier python suivant dans le dossier où vous avez enregistré le fichier ci-dessus.
face.py
from tkinter import *
from tkinter import ttk
import tkinter
import cv2
import os
import time
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
import glob
import openpyxl
import datetime
from tkinter import filedialog
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # not to show an error message related to CPU
def _destroyWindow(): # function to close the tinker window
root.quit()
root.destroy()
def askfileplace():
cd = filedialog.askdirectory() # function to ask which directly to use for saving image and excel
path.set(cd)
def resource_path(relative_path): # function to get the target path
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.dirname(__file__)
return os.path.join(base_path, relative_path)
# create a main function which is to be used after pressing a button
def save_frame_camera_key(device_num,interval1,duration1,vetname1,name1,path1):
os.makedirs("{}//{}_{}".format(path1,vetname1,name1)) # create a folder to save above
cap = cv2.VideoCapture(device_num) # create a videocapture object
if not cap.isOpened(): # check if it has been opened
return
n = 0 # increment initiated with 0
while n <= int(duration1)/int(interval1) : # calculation of the terminating point of the increment
ret, frame = cap.read() # read the object which returens two variables
cv2.imwrite("{}//{}_{}//{}.jpg ".format(path1,vetname1,name1,n), frame) # save the pictures
time.sleep(int(interval1)) # wait for interval
n += 1 # increment
image_paths = glob.glob("{}//{}_{}//*.jpg ".format(path1,vetname1,name1)) # get the jpg files in the folder
result=[] # create a list of the results
for image_path in image_paths: # process each file in the jpg files
img = image.load_img(image_path, color_mode="grayscale" , target_size=(64, 64)) # convert it to grayscale
img_array = image.img_to_array(img) # convert it to array
pImg = np.expand_dims(img_array, axis=0) / 255 # make it between 0 ~ 1
# read the face recognision trained model hdf5
model_path = resource_path(".//fer2013_mini_XCEPTION.110-0.65.hdf5")
emotions_XCEPTION = load_model(model_path, compile=False)
prediction = emotions_XCEPTION.predict(pImg)[0] # predict a image using the model
result.append(prediction) # append the result to the list named result
df = pd.DataFrame(result) # convert it to DataFrame
df.columns=['angry','disgust','fear','happy','sad','surprise','neutral'] # name the columns
df = pd.concat([df,pd.DataFrame(df.mean(axis=0),columns=['Mean']).T]) # create a mean row on the bottom
df.to_excel("{}//{}_{}//result.xlsx".format(path1,vetname1,name1), sheet_name='result') # save a excel file
# create a graph using mtplotlib
fig = plt.figure() # create object
ax=fig.add_subplot(1,1,1) # create subplot indicating the place of the subplot
mycolor = ["#ff0033", "#cc99ff", "#ffff66", "#ff9999", "#6699ff", "#ff9966", "#99ffcc"] # create a list for color
ax.pie(df.tail(1).values[0],labels=df.columns,counterclock=True, startangle=90, autopct="%1.1f%%",colors=mycolor) # create piechart
centre_circle = plt.Circle((0,0),0.7,color='white', fc='white',linewidth=1.25) # make it donuts shape
fig = plt.gcf() #get current figure
fig.gca().add_artist(centre_circle) # get the current axes and cover the white donuts on the pie chart
# Create new window by Tkinter Class
root = tkinter.Tk()
root.title("Résultat de l'analyse faciale")
root.withdraw()
root.protocol('WM_DELETE_WINDOW', _destroyWindow) # When you close the tkinter window.
# Canvas and put the figure to the canvas
canvas = FigureCanvasTkAgg(fig, master=root) # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().pack() #canvas._tkcanvas.pack()
root.update()
root.deiconify()
# create interface
root = Tk()
root.title('Outil d'évaluation faciale')
root.resizable(True, True)
#create text
frame1 = ttk.Frame(root, padding=(32))
frame1.grid()
label1 = ttk.Label(frame1, text='Intervalle de prise de vue(Secondes)', padding=(5, 2))
label1.grid(row=0, column=0, sticky=E)
label2 = ttk.Label(frame1, text='Temps de prise de vue(Secondes)', padding=(5, 2))
label2.grid(row=1, column=0, sticky=E)
label3 = ttk.Label(frame1, text='Nom du vétérinaire (alphabétique uniquement)', padding=(5, 2))
label3.grid(row=2, column=0, sticky=E)
label4 = ttk.Label(frame1, text='Nom du patient (alphabétique uniquement)', padding=(5, 2))
label4.grid(row=3, column=0, sticky=E)
label5 = ttk.Label(frame1, text='Où enregistrer les photos et les résultats', padding=(5, 2))
label5.grid(row=4, column=0, sticky=E)
# create textboxes
interval = StringVar()
interval_entry = ttk.Entry(
frame1,
textvariable=interval,
width=20)
interval_entry.insert(0,"2")
interval_entry.grid(row=0, column=1)
duration = StringVar()
duration_entry = ttk.Entry(
frame1,
textvariable=duration,
width=20)
duration_entry.insert(0,"10")
duration_entry.grid(row=1, column=1)
vetname = StringVar()
vetname_entry = ttk.Entry(
frame1,
textvariable=vetname,
width=20)
vetname_entry.insert(0,"vet")
vetname_entry.grid(row=2, column=1)
name = StringVar()
name_entry = ttk.Entry(
frame1,
textvariable=name,
width=20)
name_entry.insert(0,datetime.datetime.now().strftime("%Y%m%d_%H%M")) # time
name_entry.grid(row=3, column=1)
path =StringVar()
path_entry = ttk.Entry(
frame1,
textvariable=path,
width=20)
path_entry.grid(row=4, column=1)
path_button = ttk.Button(frame1,text="Sélection de dossier",command= lambda : [askfileplace()] )
path_button.grid(row=4, column=2)
# create bottens
frame2 = ttk.Frame(frame1, padding=(0, 5))
frame2.grid(row=5, column=1, sticky=W)
button1 = ttk.Button(
frame2, text='Lancer l'analyse',
command= lambda : [save_frame_camera_key(0,interval.get(),duration.get(),vetname.get(),name.get(),path.get())]) # read the function I made
button1.pack(side=LEFT)
button2 = ttk.Button(frame2, text='Fin', command=quit)
button2.pack(side=LEFT)
root.mainloop()
Si vous le souhaitez, consultez votre propre site Web. D'autres exemples (indicateur d'activité du chat AI) sont également affichés. https://meknowledge.jpn.org/
Recommended Posts