import streamlit as st from transformers import pipeline import matplotlib.pyplot as plt from PIL import Image, ImageFilter import numpy as np from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input, decode_predictions from tensorflow.keras.preprocessing.image import img_to_array # Chargement du modèle d'analyse de sentiments et de reconnaissance d'images sentiment_pipeline = pipeline("sentiment-analysis") image_model = MobileNetV2(weights='imagenet') def plot_sentiment(sentiment): """ Dessine un graphique en camembert pour l'analyse de sentiments. """ labels = ['Positive', 'Negative'] sizes = [sentiment['score'], 1 - sentiment['score']] colors = ['#ff9999','#66b3ff'] fig, ax = plt.subplots() ax.pie(sizes, colors=colors, labels=labels, autopct='%1.1f%%', startangle=90) ax.axis('equal') return fig def classify_image(image): """ Classifie l'image et retourne les prédictions. """ image = image.resize((224, 224)) image = img_to_array(image) image = np.expand_dims(image, axis=0) image = preprocess_input(image) preds = image_model.predict(image) return decode_predictions(preds, top=3)[0] def apply_filters(image): """ Applique des filtres à l'image et retourne l'image filtrée. """ filter = st.sidebar.selectbox("Sélectionnez un filtre", ["Original", "Flou", "Contours", "Accentuation"]) if filter == "Flou": return image.filter(ImageFilter.BLUR) elif filter == "Contours": return image.filter(ImageFilter.CONTOUR) elif filter == "Accentuation": return image.filter(ImageFilter.EDGE_ENHANCE) return image # Configuration de l'application st.title("Mon Application de Reconnaissance d'Images et d'Analyse de Sentiments") st.sidebar.title("Options") # Barre de navigation options = st.sidebar.radio("Choisissez une fonctionnalité:", ['Reconnaissance d\'Images', 'Analyse de Sentiments']) # Reconnaissance d'images if options == 'Reconnaissance d\'Images': uploaded_file = st.file_uploader("Téléchargez une image...", type=["jpg", "png", "jpeg"]) if uploaded_file is not None: image = Image.open(uploaded_file) filtered_image = apply_filters(image) st.image(filtered_image, caption='Image téléchargée', use_column_width=True) # Classification de l'image st.write("Classifying...") labels = classify_image(filtered_image) for label in labels: st.write(f"{label[1]} ({label[2]*100:.2f}%)") # Analyse de sentiments basée sur les étiquettes de l'image sentiments = [sentiment_pipeline(label[1])[0] for label in labels] for sentiment in sentiments: st.write(f"Sentiment pour '{sentiment['label']}' : {sentiment['score']:.2f}") fig = plot_sentiment(sentiment) st.pyplot(fig) # Analyse de sentiments elif options == 'Analyse de Sentiments': user_input = st.text_area("Entrez le texte à analyser", "Tapez ici...") if st.button("Analyser"): result = sentiment_pipeline(user_input)[0] st.write(f"Sentiment: {result['label']}, Score: {result['score']:.2f}") fig = plot_sentiment(result) st.pyplot(fig)