openapi / app.py
Cosqun12's picture
Upload 3 files
da13ba4 verified
raw
history blame
3.86 kB
import gradio as gr
from io import BytesIO
from PIL import Image
# Attempt to import DeepFace and transformers. If unavailable, show helpful error to user.
try:
from deepface import DeepFace
deepface_available = True
except Exception as e:
deepface_available = False
deepface_error = str(e)
try:
from transformers import pipeline
llm_available = True
except Exception as e:
llm_available = False
llm_error = str(e)
# Choose a small, CPU-friendly text model as default so the Space can run without GPU
LLM_MODEL = "google/flan-t5-small"
def analyze_face(image, consent):
if not consent:
return "Zəhmət olmasa şəkili analiz etmədən əvvəl razılıq verin. (I agree)"
if image is None:
return "Şəkil yükləmədiniz."
# Convert to PIL Image reliably
if isinstance(image, bytes):
img = Image.open(BytesIO(image)).convert('RGB')
elif isinstance(image, Image.Image):
img = image.convert('RGB')
else:
# Gradio may pass numpy array
img = Image.fromarray(image).convert('RGB')
analysis_summary = ""
if deepface_available:
try:
# DeepFace.analyze can accept numpy array or path. It returns a dict with emotion, age, gender, etc.
df_res = DeepFace.analyze(img_path = img, actions=['age','gender','emotion'])
analysis_summary += f"---Üz Analizi Nəticələri---\nAge: {df_res.get('age', 'N/A')}\nGender: {df_res.get('gender', 'N/A')}\nEmotions: {df_res.get('emotion', {})}\n\n"
except Exception as e:
analysis_summary += f"DeepFace analizində xəta: {e}\n\n"
else:
analysis_summary += "DeepFace kitabxanası mövcud deyil. Space-də DeepFace quraşdırılmasa server sadə təhlil edəcək.\n\n"
# Prepare prompt for LLM
prompt = f\"\"\"Aşağıdakı üz analizi məlumatlarına əsasən bu şəxsin xasiyyətini, emosional vəziyyətini və onunla necə davranmalı olduğunu qısa və aydın şəkildə yaz.
Məlumatlar:
{analysis_summary}
Yekun təkliflər qısa və praktik olsun (3-5 bənd).\"\"\"
if llm_available:
try:
gen = pipeline('text2text-generation', model=LLM_MODEL)
llm_out = gen(prompt, max_length=256, do_sample=False)[0]['generated_text']
result = f"{analysis_summary}\n---AI Xasiyyət & Davranış Tövsiyəsi---\n{llm_out}"
return result
except Exception as e:
return f"{analysis_summary}\nLLM işləmədə xəta: {e}\n\nPrompt:\n{prompt}"
else:
# Fallback simple rule-based output (if transformers not available)
fallback = "Fallback analiz: Emosiyalara və yaşa əsasən bu şəxs sakit və nəzakətli görsənir. Onunla danışıqda nəzakətli və açıq suallar verin. Zarafatla başlamayın. Empatiya göstərmək faydalıdır."
return f"{analysis_summary}\n---Fallback Xasiyyət & Davranış Tövsiyəsi---\n{fallback}"
title = "Pulsuz AI Üz Xasiyyət Analizörü"
description = """
Şəkili yükləyin və bu tətbiq DeepFace ilə üz analizi aparacaq, sonra sadə LLM (FLAN-T5-small) ilə xasiyyət və necə davranmalı olduğuna dair tövsiyələr verəcək.
**Əhəmiyyətli:** Şəxsin icazəsi olmadan şəkilləri analiz etməyin.
"""
with gr.Blocks() as demo:
gr.Markdown(f"# {title}\n{description}")
with gr.Row():
with gr.Column(scale=1):
img = gr.Image(type="pil", label="Şəkil yüklə")
consent = gr.Checkbox(label="Mən bu şəxsin şəkilini analiz etmək üçün icazəm var (I agree)", value=False)
submit = gr.Button("Analiz et")
with gr.Column(scale=2):
out = gr.Textbox(label="Nəticə", lines=18)
submit.click(fn=analyze_face, inputs=[img, consent], outputs=[out])
if __name__ == '__main__':
demo.launch()