Spaces:
Runtime error
Runtime error
jwphantom
commited on
Commit
•
ea62a8d
1
Parent(s):
3457b59
first commit
Browse files- app.py +232 -77
- requirements.txt +15 -0
app.py
CHANGED
@@ -1,48 +1,73 @@
|
|
1 |
import streamlit as st
|
2 |
from streamlit_option_menu import option_menu
|
|
|
3 |
from dataclasses import dataclass
|
4 |
|
5 |
import google.generativeai as genai
|
6 |
-
from gtts import gTTS
|
7 |
-
from io import BytesIO
|
8 |
|
9 |
from langdetect import detect
|
10 |
import pycountry
|
11 |
from deep_translator import GoogleTranslator
|
12 |
|
13 |
-
import torchaudio
|
14 |
-
|
15 |
-
from transformers import VitsModel, AutoTokenizer, pipeline
|
16 |
-
import torch
|
17 |
-
|
18 |
-
import scipy.io.wavfile
|
19 |
-
import numpy as np
|
20 |
|
21 |
import base64
|
22 |
|
23 |
from PIL import Image
|
24 |
|
|
|
25 |
|
26 |
-
|
27 |
-
|
28 |
|
|
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
|
|
|
|
34 |
|
35 |
# Configuration de la page
|
36 |
-
st.set_page_config(page_title="Application
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
# Options Menu
|
39 |
with st.sidebar:
|
40 |
menu = option_menu(
|
41 |
"Onyx AI",
|
42 |
-
["Acceuil", "
|
43 |
icons=["play-btn", "info-circle"],
|
44 |
menu_icon="intersect",
|
45 |
default_index=0,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
)
|
47 |
|
48 |
|
@@ -50,12 +75,12 @@ with st.sidebar:
|
|
50 |
if menu == "Acceuil":
|
51 |
# Header
|
52 |
|
53 |
-
# Contenu de la navbar avec des icônes appropriées
|
54 |
selected = option_menu(
|
55 |
menu_title=None, # Aucun titre pour le menu
|
56 |
options=[
|
57 |
"Chatbot",
|
58 |
-
"
|
59 |
"Classification",
|
60 |
"Image to text",
|
61 |
],
|
@@ -68,6 +93,16 @@ if menu == "Acceuil":
|
|
68 |
menu_icon="cast", # Icône du menu
|
69 |
default_index=0, # Option par défaut
|
70 |
orientation="horizontal",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
) # Orientation du menu
|
72 |
|
73 |
# Affichage du contenu basé sur le choix de la navbar avec st.markdown pour une meilleure intégration
|
@@ -78,14 +113,13 @@ if menu == "Acceuil":
|
|
78 |
"""
|
79 |
<div class='content'>
|
80 |
<h1>Chatbot intelligent</h1>
|
81 |
-
<p>Bienvenue dans la section Chatbot intelligent.</p>
|
82 |
</div>
|
|
|
|
|
83 |
""",
|
84 |
unsafe_allow_html=True,
|
85 |
)
|
86 |
|
87 |
-
genai.configure(api_key="AIzaSyDQ9e-O5oWqo-toEZN19y4zzp9A61oZpTU")
|
88 |
-
|
89 |
model = genai.GenerativeModel("gemini-pro")
|
90 |
|
91 |
@dataclass
|
@@ -120,19 +154,23 @@ if menu == "Acceuil":
|
|
120 |
)
|
121 |
st.chat_message(ASSISTANT).write(response)
|
122 |
|
123 |
-
elif selected == "
|
124 |
|
125 |
# Affichage du titre et du message de bienvenue
|
126 |
st.markdown(
|
127 |
"""
|
128 |
<div class='content'>
|
129 |
<h1>Text to speech</h1>
|
130 |
-
<p>Bienvenue dans la section Text to speech en espagnol.</p>
|
131 |
</div>
|
|
|
|
|
|
|
132 |
""",
|
133 |
unsafe_allow_html=True,
|
134 |
)
|
135 |
|
|
|
|
|
136 |
@dataclass
|
137 |
class Message:
|
138 |
actor: str
|
@@ -150,6 +188,10 @@ if menu == "Acceuil":
|
|
150 |
)
|
151 |
]
|
152 |
|
|
|
|
|
|
|
|
|
153 |
# msg: Message
|
154 |
for msg in st.session_state[MESSAGES]:
|
155 |
st.chat_message(msg.actor).write(msg.payload)
|
@@ -167,40 +209,37 @@ if menu == "Acceuil":
|
|
167 |
translated = GoogleTranslator(source="auto", target="es").translate(prompt)
|
168 |
|
169 |
st.chat_message(ASSISTANT).write(
|
170 |
-
f"Langue détecté {lang_name} \n \n {translated
|
171 |
)
|
172 |
|
173 |
-
|
174 |
-
|
175 |
-
# Créer un buffer en mémoire
|
176 |
-
buffer = BytesIO()
|
177 |
|
178 |
-
|
179 |
-
output = model(**inputs).waveform
|
180 |
|
181 |
-
|
182 |
-
torchaudio.save(
|
183 |
-
buffer,
|
184 |
-
src=output,
|
185 |
-
sample_rate=model.config.sampling_rate,
|
186 |
-
format="wav", # Spécifiez explicitement le format si nécessaire
|
187 |
-
)
|
188 |
-
|
189 |
-
buffer.seek(0)
|
190 |
-
|
191 |
-
st.chat_message(ASSISTANT).audio(data=buffer, format="audio/wav")
|
192 |
|
193 |
elif selected == "Classification":
|
194 |
st.markdown(
|
195 |
"""
|
196 |
<div class='content'>
|
197 |
<h1>Zero shot image classification</h1>
|
198 |
-
<p>Découvrez la classification d'images avec zéro exemple.</p>
|
199 |
</div>
|
|
|
|
|
|
|
200 |
""",
|
201 |
unsafe_allow_html=True,
|
202 |
)
|
203 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
@dataclass
|
205 |
class Message:
|
206 |
actor: str
|
@@ -209,37 +248,53 @@ if menu == "Acceuil":
|
|
209 |
USER = "user"
|
210 |
ASSISTANT = "ai"
|
211 |
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
labels = labels.split(",")
|
216 |
-
|
217 |
-
labels_for_classification = labels
|
218 |
-
scores = classifier_zero_shot_classification(
|
219 |
-
image_to_classify, candidate_labels=labels_for_classification
|
220 |
)
|
221 |
|
222 |
-
return f"The highest score is {scores[0]['score']:.3f} for the label {scores[0]['label']}"
|
223 |
-
|
224 |
# Interface utilisateur pour l'entrée de l'image et du libellé
|
225 |
uploaded_image = st.file_uploader(
|
226 |
"Upload an image", type=["jpg", "png", "jpeg"]
|
227 |
)
|
228 |
|
229 |
-
|
|
|
|
|
|
|
|
|
230 |
|
231 |
# Bouton pour envoyer l'image et le libellé
|
232 |
-
if
|
233 |
if uploaded_image is not None and label:
|
234 |
# Lire et stocker l'image temporairement
|
235 |
image = Image.open(uploaded_image)
|
236 |
|
|
|
|
|
237 |
st.chat_message(USER).image(image)
|
238 |
|
239 |
-
st.chat_message(ASSISTANT).text(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
|
241 |
-
|
242 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
|
244 |
else:
|
245 |
st.write("Please upload an image and enter a label.")
|
@@ -247,39 +302,139 @@ if menu == "Acceuil":
|
|
247 |
elif selected == "Image to text":
|
248 |
st.markdown(
|
249 |
"""
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
|
|
|
|
254 |
""",
|
255 |
unsafe_allow_html=True,
|
256 |
)
|
257 |
|
|
|
258 |
|
259 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
|
261 |
# Lorsque "About" est sélectionné, afficher le contenu À propos dans le corps principal
|
262 |
st.markdown(
|
263 |
"""
|
264 |
# À propos de cette application
|
265 |
-
|
266 |
-
Cette application
|
267 |
-
|
268 |
## Créateur
|
269 |
-
|
270 |
- [James Olongo](https://jamesolongo.vercel.app/)
|
271 |
-
|
272 |
## Technologies utilisées
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
""",
|
284 |
unsafe_allow_html=True,
|
285 |
)
|
|
|
1 |
import streamlit as st
|
2 |
from streamlit_option_menu import option_menu
|
3 |
+
|
4 |
from dataclasses import dataclass
|
5 |
|
6 |
import google.generativeai as genai
|
|
|
|
|
7 |
|
8 |
from langdetect import detect
|
9 |
import pycountry
|
10 |
from deep_translator import GoogleTranslator
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
import base64
|
14 |
|
15 |
from PIL import Image
|
16 |
|
17 |
+
import requests
|
18 |
|
19 |
+
from dotenv import load_dotenv
|
20 |
+
import os
|
21 |
|
22 |
+
# Charger les variables d'environnement
|
23 |
+
load_dotenv()
|
24 |
|
25 |
+
HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY")
|
26 |
+
GOOGLE_GENAI_API_KEY = os.getenv("GOOGLE_GENAI_API_KEY")
|
27 |
+
|
28 |
+
headers = {"Authorization": f"Bearer {HUGGINGFACE_API_KEY}"}
|
29 |
+
|
30 |
+
genai.configure(api_key=GOOGLE_GENAI_API_KEY)
|
31 |
|
32 |
# Configuration de la page
|
33 |
+
st.set_page_config(page_title="Application IA", layout="wide")
|
34 |
+
|
35 |
+
|
36 |
+
st.markdown(
|
37 |
+
"""
|
38 |
+
<style>
|
39 |
+
.content{
|
40 |
+
border-radius: 8px;
|
41 |
+
box-shadow: 0 1px 3px rgba(65,65,65,.492);
|
42 |
+
background: #fbfafa;
|
43 |
+
padding : 0 10px 0 20px
|
44 |
+
}
|
45 |
+
.stChatMessage .markdown-text-container {
|
46 |
+
word-wrap: break-word;
|
47 |
+
}
|
48 |
+
</style>
|
49 |
+
""",
|
50 |
+
unsafe_allow_html=True,
|
51 |
+
)
|
52 |
|
53 |
# Options Menu
|
54 |
with st.sidebar:
|
55 |
menu = option_menu(
|
56 |
"Onyx AI",
|
57 |
+
["Acceuil", "Documentation"],
|
58 |
icons=["play-btn", "info-circle"],
|
59 |
menu_icon="intersect",
|
60 |
default_index=0,
|
61 |
+
styles={
|
62 |
+
"icon": {"color": "#374151", "font-size": "17px"},
|
63 |
+
"nav-link": {
|
64 |
+
"font-size": "17px",
|
65 |
+
"text-align": "left",
|
66 |
+
"margin": "0px",
|
67 |
+
"--hover-color": "#eee",
|
68 |
+
},
|
69 |
+
"nav-link-selected": {"background-color": "#519ba7"},
|
70 |
+
},
|
71 |
)
|
72 |
|
73 |
|
|
|
75 |
if menu == "Acceuil":
|
76 |
# Header
|
77 |
|
78 |
+
# # Contenu de la navbar avec des icônes appropriées
|
79 |
selected = option_menu(
|
80 |
menu_title=None, # Aucun titre pour le menu
|
81 |
options=[
|
82 |
"Chatbot",
|
83 |
+
"TextToSpeech",
|
84 |
"Classification",
|
85 |
"Image to text",
|
86 |
],
|
|
|
93 |
menu_icon="cast", # Icône du menu
|
94 |
default_index=0, # Option par défaut
|
95 |
orientation="horizontal",
|
96 |
+
styles={
|
97 |
+
"container": {"background-color": "#fafafa"},
|
98 |
+
"icon": {"color": "#374151", "font-size": "17px"},
|
99 |
+
"nav-link": {
|
100 |
+
"font-size": "17px",
|
101 |
+
"text-align": "left",
|
102 |
+
"--hover-color": "#eee",
|
103 |
+
},
|
104 |
+
"nav-link-selected": {"background-color": "#519ba7"},
|
105 |
+
},
|
106 |
) # Orientation du menu
|
107 |
|
108 |
# Affichage du contenu basé sur le choix de la navbar avec st.markdown pour une meilleure intégration
|
|
|
113 |
"""
|
114 |
<div class='content'>
|
115 |
<h1>Chatbot intelligent</h1>
|
|
|
116 |
</div>
|
117 |
+
<br/>
|
118 |
+
<p>Bienvenue dans la section Chatbot intelligent.</p>
|
119 |
""",
|
120 |
unsafe_allow_html=True,
|
121 |
)
|
122 |
|
|
|
|
|
123 |
model = genai.GenerativeModel("gemini-pro")
|
124 |
|
125 |
@dataclass
|
|
|
154 |
)
|
155 |
st.chat_message(ASSISTANT).write(response)
|
156 |
|
157 |
+
elif selected == "TextToSpeech":
|
158 |
|
159 |
# Affichage du titre et du message de bienvenue
|
160 |
st.markdown(
|
161 |
"""
|
162 |
<div class='content'>
|
163 |
<h1>Text to speech</h1>
|
|
|
164 |
</div>
|
165 |
+
<br/>
|
166 |
+
<p>Bienvenue dans la section Text to speech en espagnol.</p>
|
167 |
+
|
168 |
""",
|
169 |
unsafe_allow_html=True,
|
170 |
)
|
171 |
|
172 |
+
API_URL = "https://api-inference.huggingface.co/models/facebook/mms-tts-spa"
|
173 |
+
|
174 |
@dataclass
|
175 |
class Message:
|
176 |
actor: str
|
|
|
188 |
)
|
189 |
]
|
190 |
|
191 |
+
def query(payload):
|
192 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
193 |
+
return response.content
|
194 |
+
|
195 |
# msg: Message
|
196 |
for msg in st.session_state[MESSAGES]:
|
197 |
st.chat_message(msg.actor).write(msg.payload)
|
|
|
209 |
translated = GoogleTranslator(source="auto", target="es").translate(prompt)
|
210 |
|
211 |
st.chat_message(ASSISTANT).write(
|
212 |
+
f"Langue détecté {lang_name} \n \n {translated} \n \n Génération de l'audio ..."
|
213 |
)
|
214 |
|
215 |
+
parameters = {"inputs": translated}
|
|
|
|
|
|
|
216 |
|
217 |
+
audio = query(parameters)
|
|
|
218 |
|
219 |
+
st.chat_message(ASSISTANT).audio(data=audio)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
|
221 |
elif selected == "Classification":
|
222 |
st.markdown(
|
223 |
"""
|
224 |
<div class='content'>
|
225 |
<h1>Zero shot image classification</h1>
|
|
|
226 |
</div>
|
227 |
+
<br/>
|
228 |
+
<p>Découvrez la classification d'images avec zerp shot.</p>
|
229 |
+
|
230 |
""",
|
231 |
unsafe_allow_html=True,
|
232 |
)
|
233 |
|
234 |
+
API_URL = "https://api-inference.huggingface.co/models/openai/clip-vit-large-patch14-336"
|
235 |
+
|
236 |
+
def query(image_bytes, parameters):
|
237 |
+
# Encode the image bytes in base64
|
238 |
+
encoded_image = base64.b64encode(image_bytes).decode("utf-8")
|
239 |
+
payload = {"parameters": parameters, "inputs": encoded_image}
|
240 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
241 |
+
return response.json()
|
242 |
+
|
243 |
@dataclass
|
244 |
class Message:
|
245 |
actor: str
|
|
|
248 |
USER = "user"
|
249 |
ASSISTANT = "ai"
|
250 |
|
251 |
+
if "default_label" not in st.session_state:
|
252 |
+
st.session_state["default_label"] = (
|
253 |
+
"voiture,ananas,pastèque,tomate,bouteille"
|
|
|
|
|
|
|
|
|
|
|
254 |
)
|
255 |
|
|
|
|
|
256 |
# Interface utilisateur pour l'entrée de l'image et du libellé
|
257 |
uploaded_image = st.file_uploader(
|
258 |
"Upload an image", type=["jpg", "png", "jpeg"]
|
259 |
)
|
260 |
|
261 |
+
st.markdown(
|
262 |
+
"Veuillez entrer les labels séparés par des virgules (exemple : voiture,ananas,pastèque,tomate,bouteille):"
|
263 |
+
)
|
264 |
+
|
265 |
+
label = st.chat_input("Entrez le label séparé des virgules")
|
266 |
|
267 |
# Bouton pour envoyer l'image et le libellé
|
268 |
+
if label:
|
269 |
if uploaded_image is not None and label:
|
270 |
# Lire et stocker l'image temporairement
|
271 |
image = Image.open(uploaded_image)
|
272 |
|
273 |
+
image_bytes = uploaded_image.getvalue()
|
274 |
+
|
275 |
st.chat_message(USER).image(image)
|
276 |
|
277 |
+
st.chat_message(ASSISTANT).text("Classification en cours...")
|
278 |
+
|
279 |
+
convert_label_to_english = GoogleTranslator(
|
280 |
+
source="auto", target="en"
|
281 |
+
).translate(label)
|
282 |
+
|
283 |
+
labels = convert_label_to_english.split(
|
284 |
+
","
|
285 |
+
) # Splitting the input label string into a list
|
286 |
+
|
287 |
+
print(labels)
|
288 |
|
289 |
+
parameters = {"candidate_labels": labels}
|
290 |
+
|
291 |
+
response = query(image_bytes, parameters)
|
292 |
+
|
293 |
+
translated = GoogleTranslator(source="auto", target="fr").translate(
|
294 |
+
f"The highest score is {response[0]['score']:.3f} for the label {response[0]['label']}"
|
295 |
+
)
|
296 |
+
|
297 |
+
st.chat_message(ASSISTANT).text(translated)
|
298 |
|
299 |
else:
|
300 |
st.write("Please upload an image and enter a label.")
|
|
|
302 |
elif selected == "Image to text":
|
303 |
st.markdown(
|
304 |
"""
|
305 |
+
<div class='content'>
|
306 |
+
<h1>Image to text</h1>
|
307 |
+
</div>
|
308 |
+
<br/>
|
309 |
+
<p>Convertissez des images en texte grâce à notre outil.</p>
|
310 |
+
|
311 |
""",
|
312 |
unsafe_allow_html=True,
|
313 |
)
|
314 |
|
315 |
+
model_pro_vision = genai.GenerativeModel("gemini-pro-vision")
|
316 |
|
317 |
+
@dataclass
|
318 |
+
class Message:
|
319 |
+
actor: str
|
320 |
+
payload: str
|
321 |
+
|
322 |
+
USER = "user"
|
323 |
+
ASSISTANT = "ai"
|
324 |
+
|
325 |
+
# Interface utilisateur pour l'entrée de l'image et du libellé
|
326 |
+
uploaded_image_ImgTText = st.file_uploader(
|
327 |
+
"Upload an image", type=["jpg", "png", "jpeg"]
|
328 |
+
)
|
329 |
+
|
330 |
+
# Bouton pour envoyer l'image et le libellé
|
331 |
+
if st.button("Send"):
|
332 |
+
if uploaded_image_ImgTText is not None:
|
333 |
+
# Lire et stocker l'image temporairement
|
334 |
+
image = Image.open(uploaded_image_ImgTText)
|
335 |
+
|
336 |
+
st.chat_message(USER).image(image)
|
337 |
+
|
338 |
+
st.chat_message(ASSISTANT).text("Génération en cours...")
|
339 |
+
|
340 |
+
response = model_pro_vision.generate_content(
|
341 |
+
["Write a short description of the image", image],
|
342 |
+
stream=True,
|
343 |
+
)
|
344 |
+
|
345 |
+
response.resolve()
|
346 |
+
|
347 |
+
print(response.text)
|
348 |
+
|
349 |
+
translated = GoogleTranslator(source="auto", target="fr").translate(
|
350 |
+
response.text
|
351 |
+
)
|
352 |
+
|
353 |
+
st.chat_message(ASSISTANT).text(translated)
|
354 |
+
|
355 |
+
else:
|
356 |
+
st.write("Please upload an image and enter a label.")
|
357 |
+
|
358 |
+
|
359 |
+
elif menu == "Documentation":
|
360 |
|
361 |
# Lorsque "About" est sélectionné, afficher le contenu À propos dans le corps principal
|
362 |
st.markdown(
|
363 |
"""
|
364 |
# À propos de cette application
|
365 |
+
|
366 |
+
Cette application Streamlit démontre l'utilisation avancée de l'intelligence artificielle pour fournir une variété de services, y compris un chatbot intelligent, la conversion de texte en parole, la classification d'images sans exemples préalables, et la conversion d'images en texte. Cette application est un exemple de comment les technologies de pointe peuvent être intégrées dans des applications web modernes.
|
367 |
+
|
368 |
## Créateur
|
369 |
+
|
370 |
- [James Olongo](https://jamesolongo.vercel.app/)
|
371 |
+
|
372 |
## Technologies utilisées
|
373 |
+
|
374 |
+
- **Streamlit**: Un framework pour la création rapide d'applications web pour la science des données et le machine learning.
|
375 |
+
- **PyTorch & Transformers**: Utilisés pour les opérations de traitement du langage naturel et de génération de texte.
|
376 |
+
- **torchaudio & gTTS**: Pour la génération de parole et le traitement audio.
|
377 |
+
- **Langdetect & Pycountry**: Pour la détection de la langue et le traitement basé sur la langue.
|
378 |
+
- **Deep Translator**: Un puissant outil de traduction, utilisé en remplacement de Googletrans.
|
379 |
+
- **Google Generative AI**: Pour le chatbot intelligent, utilisant le modèle "gemini-pro" pour générer des réponses textuelles.
|
380 |
+
- **VITS**: Un modèle de synthèse vocale de pointe de Facebook pour la conversion de texte en parole en espagnol.
|
381 |
+
- **OpenAI CLIP**: Pour la classification d'images sans exemples, utilisant le modèle "clip-vit-large-patch14-336" pour la classification d'image en zero-shot.
|
382 |
+
|
383 |
+
## Détails des Applications
|
384 |
+
|
385 |
+
### Chatbot Intelligent
|
386 |
+
Utilise le modèle "gemini-pro" de Google Generative AI pour répondre aux requêtes des utilisateurs. Ce modèle est capable de comprendre et de générer des réponses à une grande variété de questions.
|
387 |
+
```python
|
388 |
+
import google.generativeai as genai
|
389 |
+
|
390 |
+
genai.configure(api_key="API_KEY")
|
391 |
+
|
392 |
+
model = genai.GenerativeModel("gemini-pro")
|
393 |
+
|
394 |
+
generate = model.generate_content("Comment déclarer une variable python")
|
395 |
+
|
396 |
+
response = generate.text
|
397 |
+
|
398 |
+
```
|
399 |
+
|
400 |
+
|
401 |
+
### Texte en Parole
|
402 |
+
Emploie le modèle "facebook/mms-tts-spa" pour convertir du texte en parole en espagnol, démontrant la capacité de transformer le texte en un fichier audio naturel.
|
403 |
+
```python
|
404 |
+
model = VitsModel.from_pretrained("facebook/mms-tts-spa")
|
405 |
+
|
406 |
+
tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-spa")
|
407 |
+
|
408 |
+
inputs = tokenizer(translated, return_tensors="pt")
|
409 |
+
|
410 |
+
with torch.no_grad():
|
411 |
+
output = model(**inputs).waveform
|
412 |
+
```
|
413 |
+
|
414 |
+
|
415 |
+
### Zero shot image classification
|
416 |
+
Utilise le modèle "openai/clip-vit-large-patch14-336" d'OpenAI pour classifier des images sans exemples préalables, illustrant comment une IA peut comprendre et catégoriser le contenu visuel.
|
417 |
+
```python
|
418 |
+
|
419 |
+
|
420 |
+
model_name_zero_shot_classification = "openai/clip-vit-large-patch14-336"
|
421 |
|
422 |
+
classifier_zero_shot_classification = pipeline(
|
423 |
+
"zero-shot-image-classification", model=model_name_zero_shot_classification
|
424 |
+
)
|
425 |
+
|
426 |
+
scores = classifier_zero_shot_classification(
|
427 |
+
image_to_classify, candidate_labels="YOUR_LABEL"
|
428 |
+
)
|
429 |
+
|
430 |
+
print f"The highest score is {scores[0]['score']:.3f} for the label {scores[0]['label']}"
|
431 |
+
|
432 |
+
```
|
433 |
+
|
434 |
+
### Conversion d'Images en Texte
|
435 |
+
|
436 |
+
|
437 |
+
|
438 |
""",
|
439 |
unsafe_allow_html=True,
|
440 |
)
|
requirements.txt
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
altair==5.2.0
|
2 |
annotated-types==0.6.0
|
|
|
3 |
attrs==23.2.0
|
4 |
beautifulsoup4==4.12.3
|
5 |
blinker==1.7.0
|
@@ -8,7 +9,9 @@ certifi==2024.2.2
|
|
8 |
chardet==3.0.4
|
9 |
charset-normalizer==3.3.2
|
10 |
click==8.1.7
|
|
|
11 |
deep-translator==1.11.4
|
|
|
12 |
filelock==3.13.1
|
13 |
fsspec==2024.2.0
|
14 |
gitdb==4.0.11
|
@@ -31,6 +34,8 @@ httpx==0.13.3
|
|
31 |
huggingface-hub==0.21.4
|
32 |
hyperframe==5.2.0
|
33 |
idna==2.10
|
|
|
|
|
34 |
Jinja2==3.1.3
|
35 |
jsonschema==4.21.1
|
36 |
jsonschema-specifications==2023.12.1
|
@@ -38,15 +43,21 @@ langcodes==3.3.0
|
|
38 |
langdetect==1.0.9
|
39 |
markdown-it-py==3.0.0
|
40 |
MarkupSafe==2.1.5
|
|
|
41 |
mdurl==0.1.2
|
42 |
mpmath==1.3.0
|
43 |
networkx==3.2.1
|
44 |
numpy==1.26.4
|
45 |
packaging==23.2
|
46 |
pandas==2.2.1
|
|
|
|
|
47 |
pillow==10.2.0
|
|
|
48 |
proto-plus==1.23.0
|
49 |
protobuf==4.25.3
|
|
|
|
|
50 |
pyarrow==15.0.1
|
51 |
pyasn1==0.5.1
|
52 |
pyasn1-modules==0.3.0
|
@@ -56,6 +67,7 @@ pydantic_core==2.16.3
|
|
56 |
pydeck==0.8.1b0
|
57 |
Pygments==2.17.2
|
58 |
python-dateutil==2.9.0.post0
|
|
|
59 |
pytz==2024.1
|
60 |
PyYAML==6.0.1
|
61 |
referencing==0.33.0
|
@@ -71,6 +83,7 @@ six==1.16.0
|
|
71 |
smmap==5.0.1
|
72 |
sniffio==1.3.1
|
73 |
soupsieve==2.5
|
|
|
74 |
streamlit==1.32.0
|
75 |
streamlit-option-menu==0.3.12
|
76 |
sympy==1.12
|
@@ -82,7 +95,9 @@ torch==2.2.1
|
|
82 |
torchaudio==2.2.1
|
83 |
tornado==6.4
|
84 |
tqdm==4.66.2
|
|
|
85 |
transformers==4.38.2
|
86 |
typing_extensions==4.10.0
|
87 |
tzdata==2024.1
|
88 |
urllib3==2.2.1
|
|
|
|
1 |
altair==5.2.0
|
2 |
annotated-types==0.6.0
|
3 |
+
asttokens==2.4.1
|
4 |
attrs==23.2.0
|
5 |
beautifulsoup4==4.12.3
|
6 |
blinker==1.7.0
|
|
|
9 |
chardet==3.0.4
|
10 |
charset-normalizer==3.3.2
|
11 |
click==8.1.7
|
12 |
+
decorator==5.1.1
|
13 |
deep-translator==1.11.4
|
14 |
+
executing==2.0.1
|
15 |
filelock==3.13.1
|
16 |
fsspec==2024.2.0
|
17 |
gitdb==4.0.11
|
|
|
34 |
huggingface-hub==0.21.4
|
35 |
hyperframe==5.2.0
|
36 |
idna==2.10
|
37 |
+
ipython==8.22.2
|
38 |
+
jedi==0.19.1
|
39 |
Jinja2==3.1.3
|
40 |
jsonschema==4.21.1
|
41 |
jsonschema-specifications==2023.12.1
|
|
|
43 |
langdetect==1.0.9
|
44 |
markdown-it-py==3.0.0
|
45 |
MarkupSafe==2.1.5
|
46 |
+
matplotlib-inline==0.1.6
|
47 |
mdurl==0.1.2
|
48 |
mpmath==1.3.0
|
49 |
networkx==3.2.1
|
50 |
numpy==1.26.4
|
51 |
packaging==23.2
|
52 |
pandas==2.2.1
|
53 |
+
parso==0.8.3
|
54 |
+
pexpect==4.9.0
|
55 |
pillow==10.2.0
|
56 |
+
prompt-toolkit==3.0.43
|
57 |
proto-plus==1.23.0
|
58 |
protobuf==4.25.3
|
59 |
+
ptyprocess==0.7.0
|
60 |
+
pure-eval==0.2.2
|
61 |
pyarrow==15.0.1
|
62 |
pyasn1==0.5.1
|
63 |
pyasn1-modules==0.3.0
|
|
|
67 |
pydeck==0.8.1b0
|
68 |
Pygments==2.17.2
|
69 |
python-dateutil==2.9.0.post0
|
70 |
+
python-dotenv==1.0.1
|
71 |
pytz==2024.1
|
72 |
PyYAML==6.0.1
|
73 |
referencing==0.33.0
|
|
|
83 |
smmap==5.0.1
|
84 |
sniffio==1.3.1
|
85 |
soupsieve==2.5
|
86 |
+
stack-data==0.6.3
|
87 |
streamlit==1.32.0
|
88 |
streamlit-option-menu==0.3.12
|
89 |
sympy==1.12
|
|
|
95 |
torchaudio==2.2.1
|
96 |
tornado==6.4
|
97 |
tqdm==4.66.2
|
98 |
+
traitlets==5.14.2
|
99 |
transformers==4.38.2
|
100 |
typing_extensions==4.10.0
|
101 |
tzdata==2024.1
|
102 |
urllib3==2.2.1
|
103 |
+
wcwidth==0.2.13
|