File size: 6,980 Bytes
b9de932 f7440f5 b9de932 f7440f5 b9de932 f7440f5 b9de932 f7440f5 b9de932 f7440f5 b9de932 f7440f5 b9de932 fd154f2 f7440f5 b9de932 f7440f5 b9de932 f7440f5 b9de932 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a b9de932 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a f7440f5 ac4b38a b9de932 f7440f5 b9de932 878a227 f3dc8dc b9de932 878a227 b9de932 878a227 f3dc8dc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
#!/usr/bin/env python3
"""
Application principale pour Hugging Face Space
"""
import gradio as gr
import os
import tempfile
from pathlib import Path
import sys
import traceback
# Ajouter le dossier courant au path
sys.path.append(os.path.dirname(__file__))
# Importer les modules nécessaires
try:
from transcribe_audio import transcribe_file, load_whisper_model, get_audio_files
from analyze_bob_hf import analyze_files_hf
print("✅ Modules importés avec succès")
MODULES_AVAILABLE = True
except Exception as e:
print(f"❌ Erreur d'import: {e}")
traceback.print_exc()
MODULES_AVAILABLE = False
def process_audio_file(audio_file):
"""Traite un fichier audio et retourne les résultats"""
try:
# Créer des dossiers temporaires
with tempfile.TemporaryDirectory() as temp_dir:
temp_path = Path(temp_dir)
input_dir = temp_path / "input"
output_dir = temp_path / "output"
transcriptions_dir = output_dir / "transcriptions"
input_dir.mkdir(parents=True, exist_ok=True)
output_dir.mkdir(parents=True, exist_ok=True)
transcriptions_dir.mkdir(parents=True, exist_ok=True)
print(f"📁 Dossiers créés: input={input_dir}, output={output_dir}")
# Copier le fichier audio
audio_path = input_dir / os.path.basename(audio_file)
import shutil
shutil.copy2(audio_file, audio_path)
print(f"📁 Fichier audio copié: {audio_path}")
# Configurer les variables d'environnement
os.environ["BOB_INPUT_DIR"] = str(input_dir)
os.environ["BOB_TRANSCRIPTIONS_DIR"] = str(transcriptions_dir)
os.environ["BOB_OUTPUT_FILE"] = str(output_dir / "resume_bob.txt")
os.environ["WHISPER_MODEL"] = "small" # Modèle léger pour le Space
os.environ["HF_MODEL"] = "google/gemma-3-4b-pt" # Gemma 3 4B FORCÉ
print("🔄 Début de la transcription...")
# Transcription
model = load_whisper_model("small")
success = transcribe_file(model, audio_path, transcriptions_dir)
if not success:
return "❌ Erreur de transcription", "❌ Erreur de transcription"
print("✅ Transcription terminée")
# Vérifier les fichiers de transcription
transcription_files = list(transcriptions_dir.glob("*_transcription.txt"))
print(f"📁 Fichiers de transcription trouvés: {len(transcription_files)}")
if not transcription_files:
return "✅ Transcription terminée", "❌ Aucun fichier de transcription généré"
# Lire et afficher la transcription
with open(transcription_files[0], 'r', encoding='utf-8') as f:
transcription_content = f.read()
print(f"📝 Transcription lue ({len(transcription_content)} caractères)")
print("🤖 Début de l'analyse...")
# Vérifier le contenu des dossiers avant analyse
print(f"🔍 Dossiers avant analyse:")
print(f" Input: {list(input_dir.iterdir())}")
print(f" Transcriptions: {list(transcriptions_dir.iterdir())}")
print(f" Output: {list(output_dir.iterdir())}")
# Analyse avec vérification étape par étape
try:
print("🔄 Appel de analyze_files_hf...")
result = analyze_files_hf(
transcriptions_dir=transcriptions_dir,
input_dir=input_dir,
output_file=output_dir / "resume_bob.txt",
log_fn=print
)
print(f"📊 Résultat de analyze_files_hf: {result}")
# Vérifier le contenu des dossiers APRÈS analyse
print(f"🔍 Dossiers après analyse:")
print(f" Output: {list(output_dir.iterdir())}")
# Vérifier si le fichier de résultat existe
resume_path = output_dir / "resume_bob.txt"
print(f"🔍 Recherche fichier: {resume_path}")
print(f"📁 Fichier existe: {resume_path.exists()}")
if resume_path.exists():
with open(resume_path, 'r', encoding='utf-8') as f:
resume_content = f.read()
print("✅ Fichier de résultat trouvé et lu")
else:
resume_content = f"❌ Fichier de résultat non trouvé\nChemin attendu: {resume_path}"
print("❌ Fichier de résultat non trouvé")
# Liste détaillée de tous les fichiers
print("📄 Contenu détaillé:")
for root, dirs, files in os.walk(temp_path):
for file in files:
full_path = os.path.join(root, file)
print(f" {full_path}")
return transcription_content, resume_content
except Exception as analyze_error:
error_details = f"❌ Erreur pendant l'analyse:\n{str(analyze_error)}\n\nTraceback:\n{traceback.format_exc()}"
print(error_details)
return transcription_content, error_details
except Exception as e:
error_msg = f"❌ Erreur générale:\n{str(e)}\n\nTraceback:\n{traceback.format_exc()}"
print(error_msg)
return error_msg, error_msg
# Interface Gradio
with gr.Blocks(title="BOB Processor") as demo:
gr.Markdown("# 🎵 BOB Processor")
gr.Markdown("### Transcription et analyse automatique de fichiers audio")
with gr.Row():
with gr.Column():
audio_input = gr.Audio(
label="🎤 Fichier audio à traiter",
type="filepath"
)
process_btn = gr.Button("▶️ Traiter le fichier")
with gr.Column():
transcription_output = gr.Textbox(
label="📝 Transcription",
lines=10
)
resume_output = gr.Textbox(
label="📋 Résumé analysé",
lines=10
)
process_btn.click(
process_audio_file,
inputs=[audio_input],
outputs=[transcription_output, resume_output],
show_progress=True, # Afficher la barre de progression
queue=True # Activer la queue pour éviter timeout
)
if __name__ == "__main__":
demo.launch(
max_threads=1, # Un seul thread pour éviter surcharge
show_error=True # Afficher les erreurs détaillées
)
|