File size: 3,628 Bytes
35649be
7b253cc
 
 
fc5efa6
1c0ebe4
 
 
7b253cc
1c0ebe4
7b253cc
 
 
 
 
 
 
1c0ebe4
 
 
 
 
7b253cc
fc5efa6
 
 
 
7b253cc
 
1c0ebe4
 
7b253cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c0ebe4
 
 
 
7b253cc
fc5efa6
 
 
 
1c0ebe4
 
 
 
 
7b253cc
 
 
 
 
 
 
 
 
1c0ebe4
62b9901
 
 
 
 
 
 
 
7b253cc
 
 
62b9901
1c0ebe4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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()