from deepface import DeepFace import pandas as pd import gradio as gr import matplotlib.pyplot as plt import tempfile import os def faceAnalyzer(image_path): def analyze(image_path, attribute): analysis = DeepFace.analyze(img_path=image_path, actions=['gender', 'race', 'emotion', 'age']) df = pd.DataFrame(analysis[0]) plot = df[attribute].plot(kind='line', figsize=(9, 5), title=attribute).get_figure() _, temp_filename = tempfile.mkstemp(suffix=".png") plot.savefig(temp_filename, dpi=600) plt.close(plot) return temp_filename attributes = ['gender', 'race', 'emotion'] images = [analyze(image_path, attribute) for attribute in attributes] return [gr.Image(image) for attribute, image in zip(attributes, images)] def faceAnalyzer2(image_path, attribute): analysis = DeepFace.analyze(img_path=image_path, actions=['age', 'gender', 'race', 'emotion']) # convert the resulting dictionary to a DataFrame df = pd.DataFrame(analysis[0]) if attribute == "gender": gender = df['gender'].plot(kind = 'line', figsize = (9, 5), title = 'Gender').get_figure() return gender elif attribute == "race": race = df['race'].plot(kind = 'line', figsize = (9, 5), title = 'Race').get_figure() return race elif attribute == "emotion": emotion = df['emotion'].plot(kind = 'line', figsize = (9, 5), title = 'Emotion').get_figure() return emotion app1 = gr.Interface(faceAnalyzer, inputs=gr.Image(label="Upload Photo"), outputs=[gr.Image(label="Gender Analysis"), gr.Image(label="Race Analysis"), gr.Image(label="Emotion Analysis")], theme=gr.themes.Soft()) app2 = gr.Interface(faceAnalyzer2, inputs=[gr.Image(label="Upload Photo"),gr.Radio(choices=["gender","race","emotion"], value="gender", label="Attributes", info="Select an attribute")], outputs=gr.Plot(label="Analysis Output"), theme=gr.themes.Soft()) application = gr.TabbedInterface([app1,app2],["Full Analysis","Select Analysis"],theme=gr.themes.Soft()) application.launch()