|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
st.title("Mon Application de Reconnaissance d'Images et d'Analyse de Sentiments") |
|
st.sidebar.title("Options") |
|
|
|
|
|
options = st.sidebar.radio("Choisissez une fonctionnalité:", ['Reconnaissance d\'Images', 'Analyse de Sentiments']) |
|
|
|
|
|
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) |
|
|
|
|
|
st.write("Classifying...") |
|
labels = classify_image(filtered_image) |
|
for label in labels: |
|
st.write(f"{label[1]} ({label[2]*100:.2f}%)") |
|
|
|
|
|
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) |
|
|
|
|
|
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) |
|
|