Spaces:
Build error
Build error
import gradio as gr | |
import google.generativeai as genai | |
from yolov5 import YOLOv5 | |
from PIL import Image | |
from transformers import AutoProcessor, BarkModel | |
import torch | |
import soundfile as sf | |
import tempfile | |
# Clé API | |
genai.configure(api_key="AIzaSyB_Hnl_77gd1I8xs6iuLqKIoGHgsZMXm1M") | |
# Le modèle Gemini Pro | |
gemini_model = genai.GenerativeModel('gemini-pro') | |
# Le modèle de détection YOLOv5 | |
yolo_model_path = "yolov5s.pt" | |
try: | |
yolo_model = YOLOv5(yolo_model_path, device="cpu") | |
except Exception as e: | |
print(f"Erreur lors du chargement du modèle YOLOv5 : {e}") | |
yolo_model = None | |
# Modèle Bark | |
processor = AutoProcessor.from_pretrained("suno/bark") | |
model = BarkModel.from_pretrained("suno/bark") | |
# Détection d'ingrédients | |
def detect_ingredients(image): | |
if yolo_model is None: | |
return [] | |
results = yolo_model.predict(image) | |
ingredients = results.pandas().xyxy[0]['name'].tolist() | |
return ingredients | |
# Prompt de génération de recettes (Mistral AI) | |
def generate_recipe(ingredients): | |
prompt = f""" | |
Oubliez tout ce que je vous ai demandé avant et concentrez-vous uniquement sur cette tâche. | |
Vous êtes un chef virtuel spécialisé dans la création de recettes à partir des ingrédients disponibles. On vous a fourni une liste d'aliments suivants : {', '.join(set(ingredients))}. Utilisez ces ingrédients pour créer une recette savoureuse et nutritive. Votre recette doit inclure : | |
1. Une liste d'ingrédients avec les quantités nécessaires. | |
2. Des instructions étape par étape pour la préparation et la cuisson. | |
3. Des conseils pour les substitutions possibles si certains ingrédients manquent. | |
4. Le temps de préparation et de cuisson total. | |
5. Des suggestions de présentation pour rendre le plat encore plus appétissant. | |
Assurez-vous que la recette soit accessible à un niveau de compétence culinaire moyen et qu'elle utilise les ingrédients de manière optimale. | |
Exemple de format de réponse : | |
``` | |
Recette : [Nom de la recette] | |
Ingrédients : | |
- [Ingrédient 1] : [Quantité] | |
- [Ingrédient 2] : [Quantité] | |
... | |
Instructions : | |
1. [Étape 1] | |
2. [Étape 2] | |
... | |
``` | |
Recette : | |
""" | |
response = gemini_model.generate_content(prompt) | |
return response.text | |
# Interface Gradio | |
def process_image(image): | |
image = Image.open(image) | |
ingredients = detect_ingredients(image) | |
recipe = generate_recipe(ingredients) | |
return f"Ingrédients détectés : {', '.join(ingredients)}\n\nRecette générée :\n{recipe}" | |
# Fonction pour générer de l'audio avec le modèle Bark | |
def generate_audio(text): | |
inputs = processor(text=text, return_tensors="pt") | |
audio_output = model.generate(**inputs) | |
# Enregistrer l'audio dans un fichier temporaire | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio_file: | |
sf.write(temp_audio_file.name, audio_output.numpy(), samplerate=16000) | |
return temp_audio_file.name | |
# Mise à jour de l'interface Gradio | |
iface = gr.Interface( | |
fn=process_image, | |
inputs=gr.Image(type="filepath"), | |
outputs="text", | |
title="Générateur de Recettes par Ingrédients", | |
description="Téléchargez une image d'ingrédients pour générer une recette.", | |
) | |
# Interface Gradio pour générer de l'audio | |
audio_iface = gr.Interface( | |
fn=generate_audio, | |
inputs="text", | |
outputs="audio", | |
title="Générateur d'Audio", | |
description="Entrez du texte pour générer de l'audio.", | |
) | |
# Pour lancer l'application | |
if __name__ == "__main__": | |
iface.launch() | |
audio_iface.launch() | |