# 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