import streamlit as st from dotenv import load_dotenv load_dotenv() import os import google.generativeai as genai import os from googletrans import Translator # import google.generativeai as genai # Commentez cette ligne si inutile pour text-to-speech from PIL import Image from gtts import gTTS # Bibliothèque pour la synthèse vocale import google.generativeai as genai import requests import base64 import io import pandas as pd st.set_page_config(layout="wide") st.sidebar.image('logo.png',width=300) st.set_option('deprecation.showPyplotGlobalUse', False) def main(): menu =['Chatbot','Text-to-speech','Zero-shot-image-classification','Image-to-text'] choice = st.sidebar.selectbox('Select Menu',menu) if choice == 'Chatbot': genai.configure(api_key=os.getenv('GOOGLE_API_KEY')) model=genai.GenerativeModel('gemini-pro') chat= model.start_chat(history=[]) st.title('Chatbot Intelligent') st.write("
", unsafe_allow_html=True) def get_gemini_response(question): response=chat.send_message(question,stream=True) return response # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [] # Display chat messages from history on app rerun for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # React to user input if prompt := st.chat_input("Quoi de neuf?"): # Display user message in chat message container st.chat_message("user").markdown(prompt) # Add user message to chat history st.session_state.messages.append({"role": "user", "content": prompt}) response = get_gemini_response(prompt) # Display assistant response in chat message container with st.chat_message("assistant"): for chunk in response: st.write(chunk.text) #st.markdown(response) # Add assistant response to chat history st.session_state.messages.append({"role": "assistant", "content":chunk.text }) if choice == 'Text-to-speech': genai.configure(api_key=os.getenv('GOOGLE_API_KEY')) st.header('Transformez votre Texte en Espagnol avec Audio') st.write("
", unsafe_allow_html=True) def get_text_to_speech(texte): # Traduction du texte en espagnol texte_espagnol = traduire_texte(texte) # Configuration de la langue et de la vitesse (optionnel) tts = gTTS(text=texte_espagnol, lang='es', slow=False) # Enregistrement du fichier audio tts.save("output.mp3") # Lire le fichier audio dans Streamlit (nécessite des bibliothèques supplémentaires) st.audio("output.mp3") def traduire_texte(texte): traducteur = Translator() traduction = traducteur.translate(texte, dest="es") return traduction.text # CSS personnalisé pour le bouton avec un fond vert custom_css = """ """ # Affichage du CSS personnalisé st.markdown(custom_css, unsafe_allow_html=True) def input_text_setup(): text = st.text_area("Entrez le texte à convertir en parole :", height=200,placeholder="Veuillez entre votre text a traduire...") submit_button = st.button("Soumettre") # Ajout du bouton de soumission return text, submit_button # Section pour la conversion text-to-speech # Afficher le champ de texte et le bouton de soumission text_to_convert, submit_button = input_text_setup() if submit_button: if text_to_convert: texte_traduit = traduire_texte(text_to_convert) st.success("Texte converti en parole espagnole avec sucess.") get_text_to_speech(texte_traduit) # Section pour l'analyse d'images (peut rester commentée si non utilisée) else: st.warning("Veuillez entrer du texte avant de soumettre.") if choice == 'Zero-shot-image-classification': st.title("CLIP Image Classification") API_URL = "https://api-inference.huggingface.co/models/openai/clip-vit-large-patch14" hugging_face_token = os.getenv('API_TOKEN') def query(data): img_bytes = io.BytesIO(data["image_bytes"]) payload = { "parameters": data["parameters"], "inputs": base64.b64encode(img_bytes.read()).decode("utf-8") } headers = {"Authorization": f"Bearer {hugging_face_token}"} response = requests.post(API_URL, headers=headers, json=payload) return response.json() custom_css = """ """ # Affichage du CSS personnalisé st.markdown(custom_css, unsafe_allow_html=True) uploaded_image = st.file_uploader("Upload Image", type=["jpg", "jpeg", "png"]) if uploaded_image is not None: st.image(uploaded_image, caption="Uploaded Image", use_column_width=True) st.title("Entre les Labels (obligatoire)") candidate_labels = st.text_input("Entrez les étiquettes séparées par des virgules",placeholder='Veullez entrer les classes separé par des virgules. ex: chat, chien, souris ...') parameters = {"candidate_labels": candidate_labels.split(",")} if st.button("Classifier"): if candidate_labels.strip() == "": st.warning("Veuillez entrer au moins une étiquette. Au-delà de deux étiquettes, veuillez vous assurer de les séparer par des virgules et des espaces.") else: parameters = {"candidate_labels": candidate_labels.split(",")} result = query({"image_bytes": uploaded_image.read(), "parameters": parameters}) if result: # Début du tableau st.title("Predicted Labels:") # Création d'une liste pour stocker les labels et scores labels = [] scores = [] for prediction in result: label = prediction["label"] score = prediction["score"] labels.append(label) scores.append(score) # Création d'un DataFrame avec les labels et les scores df = pd.DataFrame({ 'Label': labels, 'Score': scores, }) # Affichage du DataFrame avec une largeur ajustée st.dataframe(df, width=600) else: st.write("No labels predicted.") if choice == 'Image-to-text': genai.configure(api_key=os.getenv('GOOGLE_API_KEY')) custom_css = """ """ st.markdown(custom_css, unsafe_allow_html=True) 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('Description d une image') st.write("
", unsafe_allow_html=True) uploaded_file = st.file_uploader('Choose an image.',type=['jpg','jpeg','png']) if uploaded_file is not None: image=Image.open(uploaded_file) st.image(image,caption="uploaded_file",use_column_width=True) st.write("
", unsafe_allow_html=True) submit=st.button('Decrire') input_prompt=""" Decrire l'image """ if submit: if uploaded_file is not None: image_data = input_image_setup(uploaded_file) response = get_gemini_response(input_prompt,image_data) st.subheader('La description de l\'image est : ') st.markdown( f"
{response}
", unsafe_allow_html=True ) else: st.error("Veuillez entrer une image en entrée") if __name__ == '__main__': main() #https://huggingface.co/spaces/DJONG-WANG/projet_tutore