rick commited on
Commit
d5e8387
·
unverified ·
1 Parent(s): dacaa94

bug fixed now... not done...

Browse files
Files changed (1) hide show
  1. pages/main.py +32 -61
pages/main.py CHANGED
@@ -94,10 +94,9 @@ def read_file(file_name: str) -> str:
94
 
95
 
96
 
97
- def split_audio(audio_file: str,
98
- max_size_mb: int = 25) -> List[str]:
99
  """
100
- Divise un fichier audio en segments de taille maximale spécifiée et retourne les chemins des segments.
101
 
102
  Args:
103
  audio_file (str): Chemin vers le fichier audio.
@@ -109,10 +108,7 @@ def split_audio(audio_file: str,
109
  try:
110
  audio = AudioSegment.from_wav(audio_file)
111
  duration_ms = len(audio)
112
- segment_duration_ms = int(
113
- (max_size_mb * 1024 * 1024 * 8) /
114
- (audio.frame_rate * audio.sample_width * audio.channels)
115
- )
116
 
117
  segments = []
118
  with tempfile.TemporaryDirectory() as temp_dir:
@@ -123,39 +119,34 @@ def split_audio(audio_file: str,
123
  segment.export(temp_segment_path, format="wav")
124
  segments.append(temp_segment_path)
125
 
126
-
127
- # Start of Selection
128
- # Traiter les segments ici
129
- language = st.session_state.get('target_language', 'en') # Définir la variable
130
- transcriptions = []
131
- for segment_path in segments:
132
- try:
133
- with open(segment_path, "rb") as audio_segment:
134
- transcript = client.audio.transcriptions.create(
135
- model="whisper-1",
136
- file=audio_segment,
137
- # Start of Selection
138
- language=language,
139
- response_format="text"
140
- )
141
- transcriptions.append(transcript.text)
142
- except Exception as e:
143
- print(f"Erreur lors de la transcription du segment {segment_path} : {e}")
144
- finally:
145
- os.remove(segment_path) # Supprime le segment après traitement
146
- # Fin du traitement des segments et suppression automatique du répertoire temporaire
147
-
148
  return segments
149
- except IOError as e:
150
- print(f"Erreur lors de la lecture ou de l'écriture du fichier audio : {e}")
151
- return []
152
- except ValueError as e:
153
- print(f"Erreur de valeur lors du traitement de l'audio : {e}")
154
- return []
155
  except Exception as e:
156
- print(f"Une erreur inattendue s'est produite : {e}")
157
  return []
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
  def transcribe_audio(audio_file: Union[str, IO], language: Optional[str] = None) -> str:
161
  """
@@ -172,13 +163,8 @@ def transcribe_audio(audio_file: Union[str, IO], language: Optional[str] = None)
172
 
173
  try:
174
  with st.status("Transcription de l'audio en cours...") as status:
175
- # Si audio_file est une chaîne, on l'ouvre comme un fichier
176
- if isinstance(audio_file, str):
177
- file_size_mb = os.path.getsize(audio_file) / (1024 * 1024)
178
- audio_file_path = audio_file
179
- else:
180
- file_size_mb = os.path.getsize(audio_file.name) / (1024 * 1024)
181
- audio_file_path = audio_file.name
182
 
183
  if file_size_mb > max_size_mb:
184
  status.update(label="Découpage de l'audio en segments...")
@@ -186,30 +172,15 @@ def transcribe_audio(audio_file: Union[str, IO], language: Optional[str] = None)
186
  full_transcript = ""
187
  for i, segment in enumerate(segments):
188
  status.update(label=f"Transcription du segment {i+1}/{len(segments)}...")
189
- with open(segment, "rb") as audio_segment:
190
- transcript = client.audio.transcriptions.create(
191
- model="whisper-1",
192
- file=audio_segment,
193
- language=language,
194
- response_format="text"
195
- )
196
- full_transcript += f"{transcript} "
197
  status.update(label="Transcription terminée", state="complete")
198
  return full_transcript.strip()
199
  else:
200
  status.update(label="Transcription de l'audio...")
201
- with open(audio_file_path, "rb") as audio_file:
202
- transcript = client.audio.transcriptions.create(
203
- model="whisper-1",
204
- file=audio_file,
205
- language=language,
206
- response_format="text"
207
- )
208
  status.update(label="Transcription terminée", state="complete")
209
  return transcript
210
- except IOError as e:
211
- st.error(f"Erreur d'entrée/sortie lors de la transcription : {e}")
212
- return ""
213
  except Exception as e:
214
  st.error(f"Erreur lors de la transcription : {e}")
215
  return ""
 
94
 
95
 
96
 
97
+ def split_audio(audio_file: str, max_size_mb: int = 25) -> List[str]:
 
98
  """
99
+ Divise un fichier audio en segments de taille maximale spécifiée.
100
 
101
  Args:
102
  audio_file (str): Chemin vers le fichier audio.
 
108
  try:
109
  audio = AudioSegment.from_wav(audio_file)
110
  duration_ms = len(audio)
111
+ segment_duration_ms = int((max_size_mb * 1024 * 1024 * 8) / (audio.frame_rate * audio.sample_width * audio.channels))
 
 
 
112
 
113
  segments = []
114
  with tempfile.TemporaryDirectory() as temp_dir:
 
119
  segment.export(temp_segment_path, format="wav")
120
  segments.append(temp_segment_path)
121
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  return segments
 
 
 
 
 
 
123
  except Exception as e:
124
+ print(f"Erreur lors du découpage de l'audio : {e}")
125
  return []
126
 
127
+ def transcribe_segment(segment_path: str, language: Optional[str] = None) -> str:
128
+ """
129
+ Transcrit un segment audio en texte.
130
+
131
+ Args:
132
+ segment_path (str): Chemin vers le segment audio.
133
+ language (Optional[str]): La langue de l'audio.
134
+
135
+ Returns:
136
+ str: Le texte transcrit.
137
+ """
138
+ try:
139
+ with open(segment_path, "rb") as audio_segment:
140
+ transcript = client.audio.transcriptions.create(
141
+ model="whisper-1",
142
+ file=audio_segment,
143
+ language=language, # semble que language soit mal formatter au format ISO6391
144
+ response_format="text"
145
+ )
146
+ return transcript
147
+ except Exception as e:
148
+ print(f"Erreur lors de la transcription du segment {segment_path} : {e}")
149
+ return ""
150
 
151
  def transcribe_audio(audio_file: Union[str, IO], language: Optional[str] = None) -> str:
152
  """
 
163
 
164
  try:
165
  with st.status("Transcription de l'audio en cours...") as status:
166
+ audio_file_path = audio_file if isinstance(audio_file, str) else audio_file.name
167
+ file_size_mb = os.path.getsize(audio_file_path) / (1024 * 1024)
 
 
 
 
 
168
 
169
  if file_size_mb > max_size_mb:
170
  status.update(label="Découpage de l'audio en segments...")
 
172
  full_transcript = ""
173
  for i, segment in enumerate(segments):
174
  status.update(label=f"Transcription du segment {i+1}/{len(segments)}...")
175
+ transcript = transcribe_segment(segment, language)
176
+ full_transcript += f"{transcript} "
 
 
 
 
 
 
177
  status.update(label="Transcription terminée", state="complete")
178
  return full_transcript.strip()
179
  else:
180
  status.update(label="Transcription de l'audio...")
181
+ transcript = transcribe_segment(audio_file_path, language)
 
 
 
 
 
 
182
  status.update(label="Transcription terminée", state="complete")
183
  return transcript
 
 
 
184
  except Exception as e:
185
  st.error(f"Erreur lors de la transcription : {e}")
186
  return ""