Spaces:
Paused
Paused
Commit
·
e6563d5
1
Parent(s):
de7a637
add files upload feature
Browse files- pages/main.py +98 -53
pages/main.py
CHANGED
|
@@ -17,7 +17,7 @@ from typing import Tuple
|
|
| 17 |
from typing import Union
|
| 18 |
from io import BytesIO
|
| 19 |
from copy import deepcopy
|
| 20 |
-
|
| 21 |
|
| 22 |
# Third-party libraries
|
| 23 |
import requests
|
|
@@ -57,6 +57,13 @@ from core.core import init_process_mode
|
|
| 57 |
from core.moderation import api_moderation_openai_text
|
| 58 |
from core.audio_isolation import isolate_audio
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
def save_attachment(attachment):
|
| 62 |
"""Sauvegarde la pièce jointe et retourne le chemin."""
|
|
@@ -267,6 +274,18 @@ def recorder_released():
|
|
| 267 |
def main_page():
|
| 268 |
"""Page principale de l'application."""
|
| 269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 270 |
# Initialisation des variables d'état de session
|
| 271 |
if "ui_loaded" not in st.session_state:
|
| 272 |
st.session_state["ui_loaded"] = False
|
|
@@ -364,66 +383,92 @@ def main_page():
|
|
| 364 |
get_translation("entrez_message")
|
| 365 |
)
|
| 366 |
|
| 367 |
-
def uploaded_files__on_change():
|
| 368 |
-
if st.session_state.uploaded_files is not None:
|
| 369 |
-
st.session_state.edited_texts = {}
|
| 370 |
-
st.session_state.audio_files = []
|
| 371 |
-
for uploaded_file in st.session_state.uploaded_files:
|
| 372 |
-
with st.container(border=True):
|
| 373 |
-
bytes_data = uploaded_file.read()
|
| 374 |
-
file_name = uploaded_file.name
|
| 375 |
-
filetype = os.path.splitext(uploaded_file.name)[1].lstrip('.')
|
| 376 |
-
if filetype in ["txt"]:
|
| 377 |
-
st.write("**filename:**", uploaded_file.name)
|
| 378 |
-
st.write("**filetype:**", filetype)
|
| 379 |
-
file_content = bytes_data.decode()
|
| 380 |
-
with st.expander("View file content"):
|
| 381 |
-
edited_text = st.text_area(f"Edit text - {file_name}", value=file_content, key=file_name)
|
| 382 |
-
st.session_state.edited_texts[file_name] = edited_text
|
| 383 |
-
elif filetype in ["wav", "mp3"]:
|
| 384 |
-
st.write(f"**Filename:** {file_name}")
|
| 385 |
-
audio = AudioSegment.from_file(io.BytesIO(bytes_data))
|
| 386 |
-
st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
|
| 387 |
-
st.audio(bytes_data, format=f"audio/{filetype}", autoplay=False)
|
| 388 |
-
st.session_state.audio_files.append(audio)
|
| 389 |
-
|
| 390 |
-
if len(st.session_state.uploaded_files) > 0:
|
| 391 |
-
filetypes_uploaded_list = [ os.path.splitext(uploaded_file.name)[1].lstrip('.') for uploaded_file in st.session_state.uploaded_files ]
|
| 392 |
-
if st.button("Submit All"):
|
| 393 |
-
if ("txt" in filetypes_uploaded_list):
|
| 394 |
-
# Concaténer les textes modifiés pour le traitement
|
| 395 |
-
concatenated_text = "\n".join(st.session_state.edited_texts.values())
|
| 396 |
-
st.write("Processing concatenated text...")
|
| 397 |
-
# Ajoutez ici le code pour traiter le texte concaténé
|
| 398 |
-
st.write(concatenated_text)
|
| 399 |
-
if ( "wav" in filetypes_uploaded_list or "mp3" in filetypes_uploaded_list ):
|
| 400 |
-
# Concaténer les fichiers audio pour le traitement
|
| 401 |
-
concatenated_audio = sum(st.session_state.audio_files)
|
| 402 |
-
audio_buffer = io.BytesIO()
|
| 403 |
-
concatenated_audio.export(audio_buffer, format="wav")
|
| 404 |
-
st.write("Processing concatenated audio...")
|
| 405 |
-
st.audio(audio_buffer.getvalue(), format="audio/wav", autoplay=False)
|
| 406 |
-
|
| 407 |
|
| 408 |
# Interface utilisateur pour l'upload de fichiers
|
| 409 |
st.session_state.uploaded_files = st.file_uploader(
|
| 410 |
"Choose files to upload",
|
| 411 |
accept_multiple_files=True,
|
| 412 |
type=CHAT_FILES_UPLOAD_ALLOWED_TYPES,
|
| 413 |
-
key="chat_files_upload"
|
| 414 |
-
on_change=uploaded_files__on_change
|
| 415 |
)
|
| 416 |
-
|
| 417 |
-
# Dictionnaire pour stocker le contenu modifié des fichiers
|
| 418 |
-
if 'edited_texts' not in st.session_state:
|
| 419 |
-
st.session_state.edited_texts = {}
|
| 420 |
-
|
| 421 |
-
# Liste pour stocker les fichiers audio
|
| 422 |
-
if 'audio_files' not in st.session_state:
|
| 423 |
-
st.session_state.audio_files = []
|
| 424 |
-
|
| 425 |
-
|
| 426 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 427 |
|
| 428 |
|
| 429 |
# Interface utilisateur pour l'enregistrement audio
|
|
|
|
| 17 |
from typing import Union
|
| 18 |
from io import BytesIO
|
| 19 |
from copy import deepcopy
|
| 20 |
+
import hashlib
|
| 21 |
|
| 22 |
# Third-party libraries
|
| 23 |
import requests
|
|
|
|
| 57 |
from core.moderation import api_moderation_openai_text
|
| 58 |
from core.audio_isolation import isolate_audio
|
| 59 |
|
| 60 |
+
def hash_file(file):
|
| 61 |
+
hasher = hashlib.md5()
|
| 62 |
+
buf = file.read()
|
| 63 |
+
hasher.update(buf)
|
| 64 |
+
file.seek(0)
|
| 65 |
+
return hasher.hexdigest()
|
| 66 |
+
|
| 67 |
|
| 68 |
def save_attachment(attachment):
|
| 69 |
"""Sauvegarde la pièce jointe et retourne le chemin."""
|
|
|
|
| 274 |
def main_page():
|
| 275 |
"""Page principale de l'application."""
|
| 276 |
|
| 277 |
+
# Dictionnaire pour stocker les fichiers modifiés
|
| 278 |
+
if 'changed_uploaded_files' not in st.session_state:
|
| 279 |
+
st.session_state.changed_uploaded_files = {}
|
| 280 |
+
|
| 281 |
+
# Dictionnaire pour stocker le contenu modifié des fichiers
|
| 282 |
+
if 'edited_texts' not in st.session_state:
|
| 283 |
+
st.session_state.edited_texts = {}
|
| 284 |
+
|
| 285 |
+
# Liste pour stocker les fichiers audio
|
| 286 |
+
if 'audio_files' not in st.session_state:
|
| 287 |
+
st.session_state.audio_files = []
|
| 288 |
+
|
| 289 |
# Initialisation des variables d'état de session
|
| 290 |
if "ui_loaded" not in st.session_state:
|
| 291 |
st.session_state["ui_loaded"] = False
|
|
|
|
| 383 |
get_translation("entrez_message")
|
| 384 |
)
|
| 385 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 386 |
|
| 387 |
# Interface utilisateur pour l'upload de fichiers
|
| 388 |
st.session_state.uploaded_files = st.file_uploader(
|
| 389 |
"Choose files to upload",
|
| 390 |
accept_multiple_files=True,
|
| 391 |
type=CHAT_FILES_UPLOAD_ALLOWED_TYPES,
|
| 392 |
+
key="chat_files_upload"
|
|
|
|
| 393 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 394 |
|
| 395 |
+
if st.session_state.uploaded_files is not None:
|
| 396 |
+
new_uploaded_files_hashes = []
|
| 397 |
+
for file in st.session_state.uploaded_files:
|
| 398 |
+
uploaded_file_hash = hash_file(file)
|
| 399 |
+
new_uploaded_files_hashes.append(uploaded_file_hash)
|
| 400 |
+
if uploaded_file_hash not in st.session_state.changed_uploaded_files.keys():
|
| 401 |
+
uploaded_file_name = file.name
|
| 402 |
+
uploaded_file_type = os.path.splitext(file.name)[1].lstrip('.')
|
| 403 |
+
st.session_state.changed_uploaded_files[uploaded_file_hash] = {
|
| 404 |
+
"name": uploaded_file_name,
|
| 405 |
+
"type": uploaded_file_type,
|
| 406 |
+
"bytes_data": file.read()
|
| 407 |
+
}
|
| 408 |
+
changed_uploaded_files = {}
|
| 409 |
+
for file_hash in st.session_state.changed_uploaded_files.keys():
|
| 410 |
+
if file_hash in new_uploaded_files_hashes:
|
| 411 |
+
changed_uploaded_files[file_hash] = st.session_state.changed_uploaded_files[file_hash]
|
| 412 |
+
st.session_state.changed_uploaded_files = changed_uploaded_files
|
| 413 |
+
|
| 414 |
+
for key, value in st.session_state.changed_uploaded_files.items():
|
| 415 |
+
with st.container(border=True):
|
| 416 |
+
if value["type"] in ["txt"]:
|
| 417 |
+
st.write(f"**filename:** {value['name']}")
|
| 418 |
+
|
| 419 |
+
#st.session_state.edited_texts = {}
|
| 420 |
+
#st.session_state.audio_files = []
|
| 421 |
+
#for uploaded_file in st.session_state.uploaded_files:
|
| 422 |
+
# with st.container(border=True):
|
| 423 |
+
# bytes_data = uploaded_file.read()
|
| 424 |
+
# file_name = uploaded_file.name
|
| 425 |
+
# filetype = os.path.splitext(uploaded_file.name)[1].lstrip('.')
|
| 426 |
+
# if filetype in ["txt"]:
|
| 427 |
+
# st.write("**filename:**", uploaded_file.name)
|
| 428 |
+
# st.write("**filetype:**", filetype)
|
| 429 |
+
# file_content = bytes_data.decode()
|
| 430 |
+
#with st.expander("View file content"):
|
| 431 |
+
# edited_text = st.text_area(f"Edit text - {file_name}", value=file_content, key=file_name)
|
| 432 |
+
# st.session_state.edited_texts[file_name] = edited_text
|
| 433 |
+
#elif filetype in ["wav", "mp3"]:
|
| 434 |
+
# st.write(f"**Filename:** {file_name}")
|
| 435 |
+
# audio = AudioSegment.from_file(io.BytesIO(bytes_data))
|
| 436 |
+
# st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
|
| 437 |
+
# st.audio(bytes_data, format=f"audio/{filetype}", autoplay=False)
|
| 438 |
+
# st.session_state.audio_files.append(audio)
|
| 439 |
+
|
| 440 |
+
|
| 441 |
+
# Afficher et modifier le contenu de chaque fichier texte
|
| 442 |
+
#for file_name, edited_text in st.session_state.edited_texts.items():
|
| 443 |
+
# with st.container():
|
| 444 |
+
# st.write(f"**Filename:** {file_name}")
|
| 445 |
+
# with st.expander("View and edit file content"):
|
| 446 |
+
# edited_text = st.text_area(f"Edit text - {file_name}", value=edited_text, key=file_name)
|
| 447 |
+
# st.session_state.edited_texts[file_name] = edited_text
|
| 448 |
+
|
| 449 |
+
# Afficher les fichiers audio
|
| 450 |
+
#for audio in st.session_state.audio_files:
|
| 451 |
+
# with st.container():
|
| 452 |
+
# st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
|
| 453 |
+
# audio_buffer = io.BytesIO()
|
| 454 |
+
# audio.export(audio_buffer, format="wav")
|
| 455 |
+
# st.audio(audio_buffer.getvalue(), format="audio/wav", autoplay=False)
|
| 456 |
+
|
| 457 |
+
# Concaténer les textes modifiés pour le traitement
|
| 458 |
+
#if st.button("Submit All Texts"):
|
| 459 |
+
# concatenated_text = "\n".join(st.session_state.edited_texts.values())
|
| 460 |
+
# st.write("Processing concatenated text...")
|
| 461 |
+
# # Ajoutez ici le code pour traiter le texte concaténé
|
| 462 |
+
# st.write(concatenated_text)
|
| 463 |
+
|
| 464 |
+
# Concaténer les fichiers audio pour le traitement
|
| 465 |
+
#if st.button("Submit All Audios"):
|
| 466 |
+
## if st.session_state.audio_files:
|
| 467 |
+
# concatenated_audio = sum(st.session_state.audio_files)
|
| 468 |
+
# audio_buffer = io.BytesIO()
|
| 469 |
+
# concatenated_audio.export(audio_buffer, format="mp3")
|
| 470 |
+
# st.write("Processing concatenated audio...")
|
| 471 |
+
# st.audio(audio_buffer.getvalue(), format="audio/mp3", autoplay=False)
|
| 472 |
|
| 473 |
|
| 474 |
# Interface utilisateur pour l'enregistrement audio
|