# pip install streamlit | |
import streamlit as st | |
import soundfile as sf | |
import json | |
import datetime | |
from datetime import datetime as date | |
from datetime import timedelta as td | |
import math | |
import pandas as pd | |
import plotly.express as px | |
# # Chargement du fichier des utilisateurs | |
# with open("users_info.json", 'r') as file: | |
# dict_user = json.load(file) | |
# # Logo de la page | |
# my_logo = logo.add_logo(logo_path="logo-digitalix.png", width=100, height=100) | |
# st.image(my_logo) | |
# # Titre de la page | |
# st.title("TRANSCRIPTION AUDIO AUTOMATIQUE DIGITALIX") | |
# st.write("# Bienvenue! 👋") | |
# st.markdown( | |
# """ | |
# Transcrivez facilement vos fichiers audio en texte avec notre application. | |
# Il vous suffit de télécharger votre fichier audio et nous nous occupons du reste | |
# """ | |
# ) | |
# # Check authentication | |
# authenticate.set_st_state_vars() | |
# # Add login/logout buttons | |
# if st.session_state["authenticated"]: | |
# authenticate.button_logout() | |
# else: | |
# authenticate.button_login() | |
# # user info | |
# auth_code = st.session_state["auth_code"] | |
# user_info = st.session_state["user_info"] | |
# maintenant = datetime.datetime.now() | |
# username = user_info['username'] | |
# user_pool_name = 'transcription_streamlit' | |
# # add user to users_dict and group free | |
# if user_info['username'] not in dict_user.keys(): | |
# dict_user[user_info['username']] = {"email": user_info['email'], | |
# "durees_audio_sec":[], | |
# "date_inscription":str(maintenant), | |
# "dates_transcription":[], | |
# "abonnement":1} | |
# #group_name = 'utilisateurs_gratuits' | |
# # get user pool id | |
# #user_pool_id = authenticate.get_user_pool_id(user_pool_name) | |
# #print("User Pool ID:", user_pool_id) | |
# #authenticate.add_user_to_group(user_pool_id, username, group_name) | |
# # Calcul annee-mois de trascription | |
# Year = maintenant.year | |
# Month = maintenant.month | |
# Year_Month = str(Year) + '_' + str(Month).zfill(2) | |
# #Definition quota utilisation | |
# quota_20H = 1000 | |
# # Pour des groupes d'utilisateurs | |
# if (st.session_state["authenticated"] and "utilisateurs_sidwaya" in st.session_state["user_cognito_groups"]): | |
# #print("Code authentification:",auth_code) | |
# #print("information utilisateur:",user_info) | |
# st.write( | |
# """ | |
# ## Comment faire la transcription? | |
# - Sélectionner votre fichier audio à transcrire (dans la partie "charger l'audio", appuyer sur "Browse files", | |
# choisir l'audio et attendre son chargement sur le site) | |
# - Cliquer sur le bouton "Transcrire l'audio à gauche de la page" | |
# - Attender que la transcription automatique soit effectuée | |
# - Consultez le texte transcrit à l'écran et télécharger-le si nécessaire | |
# - Formats de fichiers audio pris en charge : MP3,WAV,M4A. | |
# ### Confidentialité : | |
# Nous comprenons l'importance de la confidentialité de vos données. | |
# Votre fichier audio est utilisé uniquement pour la transcription et est supprimé de nos serveurs après le processus de transcription | |
# Amuser-vous!""" | |
# ) | |
def graphique_utilisation(data, username, annee_mois): | |
# Copie des données | |
dict_user = data | |
# Transformation en dataframe | |
df_user = pd.DataFrame(dict_user).T.reset_index() | |
df_user.rename(columns={"index":"usernames"},inplace = True) | |
# Separation des lignes de listes en plusieurs lignes pour les colonees duree_audio_sec et dates_transcription | |
df_duree = df_user.drop(['dates_transcription'],axis=1) | |
df_duree = df_duree.explode('durees_audio_sec') | |
df_duree = df_duree.reset_index(drop=True) | |
df_transcription = df_user.drop(['durees_audio_sec'],axis=1) | |
df_transcription = df_transcription.explode('dates_transcription') | |
df_transcription = df_transcription.reset_index(drop=True) | |
# Regroupement des dataframes | |
df_user = df_duree.copy() | |
df_user["dates_transcription"] = df_transcription["dates_transcription"] | |
df_user['date_inscription'] = pd.to_datetime(df_user['date_inscription'],format = "%Y-%m-%d %H:%M:%S.%f") | |
df_user['dates_transcription'] = pd.to_datetime(df_user['dates_transcription'],format = "%Y-%m-%d %H:%M:%S.%f") | |
# Calcul annee-mois de trascription | |
df_user['Year'] = df_user['dates_transcription'].dt.year | |
df_user['Month'] = df_user['dates_transcription'].dt.month | |
df_user['Year_Month'] = df_user['Year'].astype(str) + '_' + df_user['Month'].astype(str).str.zfill(2) | |
# Selection utilisateur et mois d'utilisation | |
a =df_user[(df_user["usernames"] == username) & (df_user["Year_Month"] == annee_mois)] | |
a["Consommation_heures"] = a["durees_audio_sec"].cumsum() | |
a["Consommation_heures"] = a["Consommation_heures"].values / 3600 | |
#print(a["Consommation_heures"]) | |
fig = px.line(a, x='dates_transcription', y='Consommation_heures') | |
# Ajouter la limite de temps 20H = 72000 s | |
fig.add_shape(type="line", | |
x0=fig['data'][0]['x'][0], | |
x1=fig['data'][0]['x'][-1], | |
y0=20, | |
y1=20, | |
line=dict(color='red', width=2, dash='dash')) | |
# Afficher la légende de la limite SEUIL DE 20H = 72000 secondes | |
fig.add_annotation(x=fig['data'][0]['x'][-1], | |
y=20, | |
text="SEUIL DE 20H", | |
showarrow=False, | |
font=dict(color="red"), | |
xshift=-40, # Shift the label to the left | |
yshift=20) # Shift the label downwards | |
# Afficher la figure interactive | |
# fig.show() | |
# Calcul temps total de transcription en secondes du mois | |
temps = a["durees_audio_sec"].sum() | |
return fig,temps | |
def transcript(dict_user,username,user_group, audio_file,maintenant,Year_Month,quota_20H,model): | |
# Calcul consommation utilisateur | |
figure , consommation = graphique_utilisation(dict_user, username, Year_Month) | |
if audio_file is not None: | |
st.sidebar.header("Ecouter le fichier audio") | |
st.sidebar.audio(audio_file) | |
### Utilisateur SIDWAYA | |
if user_group == "utilisateurs_sidwaya": | |
date_inscription = dict_user[username]['date_inscription'] | |
format = "%Y-%m-%d %H:%M:%S.%f" | |
datetime_obj = date.strptime(date_inscription, format) | |
# Calculate the difference between the two dates | |
difference = maintenant - datetime_obj | |
# print(type(difference)) | |
# Compare if the difference is less than or equal to one year | |
one_year = td(days=365) | |
is_one_year_before = difference <= one_year | |
if (is_one_year_before): | |
if consommation > quota_20H: | |
st.text("Quota de transcription audio du mois dépassé") | |
text_transcript = "" | |
#audio_name = "" | |
else : | |
### Durée de l'audio ### | |
# Charger le fichier audio et obtenir les informations | |
infos_audio = sf.info(audio_file.name) | |
# Extraire la durée en secondes | |
duree_audio_sec = infos_audio.duration | |
# Afficher la durée | |
print(f'Durée audio : {duree_audio_sec} secondes') | |
# Mise à jour info utilisateurs | |
dict_user[username]["durees_audio_sec"].append(duree_audio_sec) | |
dict_user[username]["dates_transcription"].append(str(maintenant)) | |
with open('users_info.json', 'w') as f: | |
json.dump(dict_user, f) | |
st.sidebar.success("Audio en cours de transcription") | |
audio_name = audio_file.name | |
transcription = model.transcribe(audio_name) | |
st.sidebar.success("Transcription terminée") | |
st.balloons() | |
text_transcript = transcription["text"] | |
st.markdown(text_transcript) | |
# Ajout boutton de téléchargement | |
st.download_button('Télécharger la transcription', text_transcript) | |
# Streamlit widgets automatically run the script from top to bottom. Since | |
# this button is not connected to any other logic, it just causes a plain | |
# rerun. | |
# st.button("Re-run") | |
# if st.sidebar.button("Enregistrer un audio") : | |
# audio_bytes = audio_recorder() | |
# if st.sidebar.button("Transcrire l'audio"): | |
# if audio_bytes is not None: | |
# st.sidebar.success("Audio en cours de transcription") | |
# transcription = model.transcribe(audio_bytes) | |
# st.sidebar.success("Transcription terminée") | |
# st.balloons() | |
# text_transcript = transcription["text"] | |
# st.markdown(text_transcript) | |
# # Ajout boutton de téléchargement | |
# st.download_button('Télécharger la transcription', text_transcript) | |
# # Streamlit widgets automatically run the script from top to bottom. Since | |
# # this button is not connected to any other logic, it just causes a plain | |
# # rerun. | |
# # st.button("Re-run") | |
# else: | |
# st.sidebar.error("Erreur : Charger un fichier audio") | |
# st.sidebar.header("Ecouter le fichier audio") | |
# st.sidebar.audio(audio_bytes) | |
### Utilisateurs gratuits et VIP #### | |
if ((user_group == "utilisateurs_vip") or (user_group == "utilisateurs_gratuits")): | |
if consommation > quota_20H: | |
st.text("Quota gratuit dépassé,veuillez contactez l'administrateur pour vous abonner") | |
text_transcript = "" | |
#audio_name = "" | |
else : | |
### Durée de l'audio ### | |
# Charger le fichier audio et obtenir les informations | |
infos_audio = sf.info(audio_file.name) | |
# Extraire la durée en secondes | |
duree_audio_sec = infos_audio.duration | |
# Afficher la durée | |
print(f'Durée audio : {duree_audio_sec} secondes') | |
# Mise à jour info utilisateurs | |
dict_user[username]["durees_audio_sec"].append(duree_audio_sec) | |
dict_user[username]["dates_transcription"].append(str(maintenant)) | |
with open('users_info.json', 'w') as f: | |
json.dump(dict_user, f) | |
st.sidebar.success("Audio en cours de transcription") | |
audio_name = audio_file.name | |
transcription = model.transcribe(audio_name) | |
st.sidebar.success("Transcription terminée") | |
st.balloons() | |
text_transcript = transcription["text"] | |
st.markdown(text_transcript) | |
# Ajout boutton de téléchargement | |
st.download_button('Télécharger la transcription', text_transcript) | |
# Streamlit widgets automatically run the script from top to bottom. Since | |
# this button is not connected to any other logic, it just causes a plain | |
# rerun. | |
# st.button("Re-run") | |
else: | |
st.sidebar.error("Erreur : Charger un fichier audio") | |
text_transcript = "" | |
#audio_name = "" | |
return text_transcript | |