File size: 4,122 Bytes
b9de932
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""
Application principale pour Hugging Face Space
"""

import gradio as gr
import os
import tempfile
from pathlib import Path
import sys

# 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")
except Exception as e:
    print(f"❌ Erreur d'import: {e}")

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)
            
            # Copier le fichier audio
            audio_path = input_dir / os.path.basename(audio_file)
            import shutil
            shutil.copy2(audio_file, 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
            
            # Transcription
            print("🔄 Transcription en cours...")
            model = load_whisper_model("small")
            success = transcribe_file(model, audio_path, transcriptions_dir)
            
            if not success:
                return "❌ Erreur de transcription", ""
            
            # Analyse
            print("🤖 Analyse en cours...")
            result = analyze_files_hf(
                transcriptions_dir=transcriptions_dir,
                input_dir=input_dir,
                output_file=output_dir / "resume_bob.txt",
                log_fn=print
            )
            
            # Lire les résultats
            resume_path = output_dir / "resume_bob.txt"
            if resume_path.exists():
                with open(resume_path, 'r', encoding='utf-8') as f:
                    resume_content = f.read()
            else:
                resume_content = "❌ Fichier de résultat non trouvé"
            
            # Lire la transcription
            transcription_files = list(transcriptions_dir.glob("*.txt"))
            if transcription_files:
                with open(transcription_files[0], 'r', encoding='utf-8') as f:
                    transcription_content = f.read()
            else:
                transcription_content = "❌ Transcription non trouvée"
            
            return transcription_content, resume_content
            
    except Exception as e:
        return f"❌ Erreur: {str(e)}", f"❌ Erreur: {str(e)}"

# 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]
    )

if __name__ == "__main__":
    demo.launch()