sungo-ganpare commited on
Commit
1873d1e
·
1 Parent(s): af69235

音声ファイル処理の結果をユーザー指定の形式に合わせてJSON形式で返却するように変更。セグメント内の単語情報を含める処理を追加。

Browse files
Files changed (1) hide show
  1. app.py +40 -17
app.py CHANGED
@@ -297,23 +297,46 @@ def process_audio_file(audio_filepath: str) -> dict: # Gradioから渡される
297
  # transcribe_audio_core内でエラー通知はされているはず
298
  return {"error": "Transcription failed. Check logs and messages for details."}
299
 
300
- # 結果をJSON形式で返却
301
- result = {
302
- "segments": [
303
- {
304
- "start": float(seg[0]),
305
- "end": float(seg[1]),
306
- "text": seg[2]
307
- } for seg in vis_data
308
- ],
309
- "words": [
310
- {
311
- "start": float(word[0]),
312
- "end": float(word[1]),
313
- "word": word[2]
314
- } for word in word_vis_data
315
- ]
316
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
 
318
  return result
319
 
 
297
  # transcribe_audio_core内でエラー通知はされているはず
298
  return {"error": "Transcription failed. Check logs and messages for details."}
299
 
300
+ # 結果をJSON形式で返却 (ユーザー指定の形式に合わせる)
301
+ output_segments = []
302
+ word_idx = 0
303
+ for seg_data in vis_data:
304
+ s_start_time = float(seg_data[0])
305
+ s_end_time = float(seg_data[1])
306
+ s_text = seg_data[2]
307
+ segment_words_list: List[dict] = []
308
+
309
+ if word_vis_data: # word_vis_data が存在する場合のみ処理
310
+ temp_current_word_idx = word_idx
311
+ while temp_current_word_idx < len(word_vis_data):
312
+ w_data = word_vis_data[temp_current_word_idx]
313
+ w_start_time = float(w_data[0])
314
+ w_end_time = float(w_data[1])
315
+
316
+ # 単語がセグメントの範囲内にあるかチェック (多少の誤差を許容)
317
+ if w_start_time >= s_start_time and w_end_time <= s_end_time + 0.1:
318
+ segment_words_list.append({
319
+ "start": w_start_time,
320
+ "end": w_end_time,
321
+ "word": w_data[2]
322
+ })
323
+ temp_current_word_idx += 1
324
+ elif w_start_time < s_start_time: # 単語がセグメントより前に開始している場合はスキップ
325
+ temp_current_word_idx += 1
326
+ elif w_start_time > s_end_time: # 単語がセグメントより後に開始している場合はループを抜ける
327
+ break
328
+ else: # その他のケース (ほぼありえないが念のため)
329
+ temp_current_word_idx += 1
330
+ word_idx = temp_current_word_idx
331
+
332
+ output_segments.append({
333
+ "start": s_start_time,
334
+ "end": s_end_time,
335
+ "text": s_text,
336
+ "words": segment_words_list
337
+ })
338
+
339
+ result = {"segments": output_segments}
340
 
341
  return result
342