digitalixsa_transcription / components /fonctions_transcription.py
David_A
deploiement de l'application
a7029db
raw
history blame
11.8 kB
# 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