File size: 6,726 Bytes
9639403
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#Importation des packages et de nos constantes
import streamlit as st
import requests
import base64
from dotenv import load_dotenv
from googletrans import Translator
from gtts import gTTS 
from PIL import Image
import os 
import google.generativeai as genai

load_dotenv()
genai.configure(api_key=os.getenv('GOOGLE_API_KEY'))

API_URL = "https://api-inference.huggingface.co/models/openai/clip-vit-large-patch14"
headers = {"Authorization": "Bearer "}

st.set_page_config(page_title='TOUM SERENA SOLANGE MICHELLE _ Final Exam App')

# Définition des différentes applications Streamlit
def app1():
    st.title('Chatbot Intelligent')
    st.write(' Conçu pour répondre à une variété de questions et de requêtes, ce chatbot est alimenté par un modèle de génération de langage avancé. Alors, viens chatter avec mon application')

    model = genai.GenerativeModel('gemini-pro')
    chat = model.start_chat(history=[])

    def get_gemini_response(question):
        response = chat.send_message(question, stream=True)
        return response

    if "messages" not in st.session_state:
        st.session_state.messages = []

    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    if prompt := st.chat_input("Quoi de neuf?"):
        st.chat_message("utilisateur").markdown(prompt)
        st.session_state.messages.append({"role": "utilisateur", "content": prompt})

        response = get_gemini_response(prompt)
        with st.chat_message("assistant"):
            for chunk in response:
                st.write(chunk.text)
                st.session_state.messages.append({"role": "assistant", "content": chunk.text })

def app2():
    st.title('Text to Speech')
    st.write('Ceci est une application  pour la conversion texte en discours. Alors, qu/attends tu pour nous donner ton discours?')
    
    def get_text_to_speech(text):
        text_spanish = translate_text(text)
        tts = gTTS(text=text_spanish, lang='es', slow=False)
        tts.save("output.mp3")
        st.audio("output.mp3")

    def translate_text(text):
        translator = Translator()
        translation = translator.translate(text, dest="es")
        return translation.text

    def input_text_setup():
        text = st.text_input("Entrez le texte à convertir en parole :")
        return text

    text_to_convert = input_text_setup()

    if text_to_convert:
        translated_text = translate_text(text_to_convert)
        get_text_to_speech(translated_text)
        st.success("Texte converti en parole espagnole. Consultez votre console ou le fichier output.mp3 (si activé).")

def app3():
    st.title('Zero shot Image Classification')
    st.write('Ceci est une application  pour la classification d\'image. Entrez plusieurs groupes, et votre image et nous vous donnons la probabilité que votre image se rapproche plus d\'une classe')

    def query(data):
        with open(data["image_path"], "rb") as f:
            img = f.read()
        payload = {
            "parameters": data["parameters"],
            "inputs": base64.b64encode(img).decode("utf-8")
        }
        response = requests.post(API_URL, headers=headers, json=payload)
        return response.json()

    def split_phrase(phrase):
        words = phrase.split(',')
        clean_words = [word.strip() for word in words]
        return clean_words

    st.title("Application Streamlit pour envoyer une image à une API")
    class_label = st.text_input("Entrez l'étiquette de classe (séparée par des virgules):")
    cl = class_label.split(",")
    uploaded_file = st.file_uploader("Téléchargez une image", type=["jpg", "png", "jpeg"])

    if uploaded_file is not None:
        image_path = "temp_image.jpg"  
        with open(image_path, "wb") as f:
            f.write(uploaded_file.read())

        st.write("L'image a été téléchargée avec succès ! Son chemin est :", image_path)

        data = {
            "image_path": image_path,
            "parameters": {"candidate_labels": split_phrase(class_label)}
        }

        response = query(data) 
        st.write("Réponse de l'API:", response)

def app4():
    st.title('Image to text')
    st.write('Ceci est l\'application pour la conversion d\'image en texte. Donnes moi une image, que je te traduise ce que m\'exprime ton image')

    def get_gemini_response(input_prompt, image):
        model = genai.GenerativeModel('gemini-pro-vision')
        response = model.generate_content([input_prompt, image[0]])
        return response.text

    def input_image_setup(uploaded_file):
        if uploaded_file is not None:
            bytes_data = uploaded_file.getvalue()
            image_parts = [{'mime_type': uploaded_file.type,
                            'data': bytes_data}]
            return image_parts
        else:
            raise FileNotFoundError('No File Uploaded')

    st.header('SM_Image_to_text')
    uploaded_file = st.file_uploader('Choisissez une image.', type=['jpg', 'jpeg', 'png'])
    if uploaded_file is not None:
        image = Image.open(uploaded_file)
        st.image(image, caption="Fichier téléchargé", use_column_width=True)
    submit = st.button('Dites-moi à quoi correspond cette image')
    input_prompt = """
    une photographie de
    """
    if submit:
        image_data = input_image_setup(uploaded_file)
        response = get_gemini_response(input_prompt, image_data)
        st.subheader('La réponse est')
        st.write(response)

# Définition de la page d'accueil
def accueil():
    st.title('Page d\'accueil')
    st.write('Bienvenue sur SM ❤️ Apps !')
    st.write('Découvrez nos applications intelligentes conçues pour réinventer votre façon d\'interagir avec la technologie. Que vous soyez curieux d\'explorer un chatbot intelligent, fasciné par la magie de la conversion texte en discours, intrigué par la puissance de la classification d\'images , ou captivé par la transformation d\'images en texte, vous trouverez ici une expérience unique et enrichissante. Préparez-vous à être ébloui par la créativité de SM❤️_Apps. Plongez dans l\'aventure dès maintenant !".')
    st.write('Choisissez une application dans le menu déroulant à votre gauche.')

def home():
    # Liste des applications disponibles
    apps = {
        'Accueil': accueil,
        'Chatbot Intelligent': app1,
        'Text to Speech': app2,
        'Zero Shot Image': app3,
        'Image to Text': app4
    }
    
    # Création du selectbox pour choisir l'application
    selected_app = st.sidebar.selectbox('Sélectionnez une application :', list(apps.keys()), key="select_app")

    apps[selected_app]()

home()