rick commited on
Commit
ee77673
·
unverified ·
1 Parent(s): b69c517

update demorrha

Browse files
Files changed (1) hide show
  1. app.py +42 -8
app.py CHANGED
@@ -4,6 +4,8 @@ from os import getenv
4
  from audiorecorder import audiorecorder
5
  import tempfile
6
  import base64
 
 
7
 
8
  # Configuration du client OpenAI avec la clé API
9
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
@@ -19,19 +21,48 @@ def lire_fichier(nom_fichier):
19
  except Exception as e:
20
  return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}"
21
 
22
- # Fonction pour transcrire l'audio en texte
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  def transcribe_audio(audio_file, language=None):
24
- with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
25
- audio_file.export(temp_audio.name, format="wav")
26
-
27
- with open(temp_audio.name, "rb") as audio_file:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  transcript = client.audio.transcriptions.create(
29
  model="whisper-1",
30
  file=audio_file,
31
  language=language
32
  )
33
-
34
- return transcript.text
35
 
36
  # Fonction pour détecter la langue d'un texte donné
37
  def language_detection(input_text, temperature=0.01):
@@ -190,7 +221,10 @@ def main():
190
 
191
  # Traitement de l'entrée audio de l'utilisateur
192
  if len(audio) > 0:
193
- transcription = transcribe_audio(audio, language=st.session_state.language_detected)
 
 
 
194
  if None == st.session_state.language_detected:
195
  st.session_state.language_detected = language_detection(input_text=transcription, temperature=0.01)
196
  st.write(f"Langue détectée : {st.session_state.language_detected}")
 
4
  from audiorecorder import audiorecorder
5
  import tempfile
6
  import base64
7
+ from pydub import AudioSegment
8
+ import os
9
 
10
  # Configuration du client OpenAI avec la clé API
11
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
 
21
  except Exception as e:
22
  return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}"
23
 
24
+ # Fonction pour diviser un fichier audio en segments de 25 Mo ou moins
25
+ def split_audio(audio_file, max_size_mb=25):
26
+ audio = AudioSegment.from_wav(audio_file)
27
+ duration_ms = len(audio)
28
+ segment_duration_ms = int((max_size_mb * 1024 * 1024 * 8) / (audio.frame_rate * audio.sample_width * audio.channels))
29
+
30
+ segments = []
31
+ for start in range(0, duration_ms, segment_duration_ms):
32
+ end = min(start + segment_duration_ms, duration_ms)
33
+ segment = audio[start:end]
34
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_segment:
35
+ segment.export(temp_segment.name, format="wav")
36
+ segments.append(temp_segment.name)
37
+
38
+ return segments
39
+
40
+ # Fonction modifiée pour transcrire l'audio en texte
41
  def transcribe_audio(audio_file, language=None):
42
+ max_size_mb = 25
43
+ file_size_mb = os.path.getsize(audio_file.name) / (1024 * 1024)
44
+
45
+ if file_size_mb > max_size_mb:
46
+ segments = split_audio(audio_file.name, max_size_mb)
47
+ full_transcript = ""
48
+ for segment in segments:
49
+ with open(segment, "rb") as audio_segment:
50
+ transcript = client.audio.transcriptions.create(
51
+ model="whisper-1",
52
+ file=audio_segment,
53
+ language=language
54
+ )
55
+ full_transcript += transcript.text + " "
56
+ os.unlink(segment) # Supprimer le fichier temporaire
57
+ return full_transcript.strip()
58
+ else:
59
+ with open(audio_file.name, "rb") as audio_file:
60
  transcript = client.audio.transcriptions.create(
61
  model="whisper-1",
62
  file=audio_file,
63
  language=language
64
  )
65
+ return transcript.text
 
66
 
67
  # Fonction pour détecter la langue d'un texte donné
68
  def language_detection(input_text, temperature=0.01):
 
221
 
222
  # Traitement de l'entrée audio de l'utilisateur
223
  if len(audio) > 0:
224
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
225
+ audio.export(temp_audio.name, format="wav")
226
+ transcription = transcribe_audio(temp_audio, language=st.session_state.language_detected)
227
+ os.unlink(temp_audio.name) # Supprimer le fichier temporaire
228
  if None == st.session_state.language_detected:
229
  st.session_state.language_detected = language_detection(input_text=transcription, temperature=0.01)
230
  st.write(f"Langue détectée : {st.session_state.language_detected}")