File size: 2,679 Bytes
1b4137e
ed87615
56e1e3f
4220be5
56e1e3f
a6d49c7
69b32e0
 
4220be5
69b32e0
56e1e3f
 
 
69b32e0
4220be5
1b4137e
4220be5
56e1e3f
 
 
4220be5
 
 
 
a6d49c7
120d1ea
 
 
 
 
 
 
a6d49c7
120d1ea
a6d49c7
 
2c0a3d0
 
 
 
 
 
 
 
a6d49c7
120d1ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import subprocess
import os
import librosa
from transformers import WhisperProcessor, WhisperForConditionalGeneration
from spellchecker import SpellChecker  # Usaremos pyspellchecker
from docx import Document

# Funci贸n para extraer audio de video
def extract_audio(video_path, audio_path):
    command = f"ffmpeg -i '{video_path}' -ar 16000 -ac 1 -c:a pcm_s16le '{audio_path}' -y"
    subprocess.run(command, shell=True, check=True)
    return audio_path

# Funci贸n para transcribir el audio usando Whisper
def transcribe_audio(audio_path):
    # Cargar el procesador y modelo de Whisper
    processor = WhisperProcessor.from_pretrained("openai/whisper-base")
    model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-base")
    
    # Cargar el archivo de audio usando librosa
    audio_input, _ = librosa.load(audio_path, sr=16000)
    
    # Preprocesar el audio para el modelo
    inputs = processor(audio_input, return_tensors="pt", sampling_rate=16000)
    
    # Realizar la transcripci贸n
    result = model.generate(**inputs)
    transcription = processor.decode(result[0], skip_special_tokens=True)
    
    return transcription

# Funci贸n para corregir el texto transcrito con pyspellchecker
def correct_text(text):
    spell = SpellChecker(language='es')  # Usamos espa帽ol para la correcci贸n
    words = text.split()  # Separar el texto en palabras
    corrected_words = []

    for word in words:
        corrected = spell.correction(word)
        if corrected is None:  # Si no se encuentra correcci贸n, dejamos la palabra original
            corrected = word
        corrected_words.append(corrected)

    corrected_text = " ".join(corrected_words)  # Volver a unir las palabras
    return corrected_text

# Funci贸n principal que procesa el video
def process_video(video_file):
    video_path = video_file.name
    audio_path = os.path.splitext(video_path)[0] + '.wav'
    
    # Extraer el audio del video
    extract_audio(video_path, audio_path)
    
    # Transcribir el audio
    transcribed_text = transcribe_audio(audio_path)
    
    # Corregir la transcripci贸n
    corrected_text = correct_text(transcribed_text)
    
    # Crear un documento Word con la transcripci贸n corregida
    doc = Document()
    doc.add_paragraph(corrected_text)
    doc_path = "transcription.docx"
    doc.save(doc_path)
    
    return corrected_text, doc_path

# Interfaz de Gradio
demo = gr.Interface(
    fn=process_video,
    inputs=gr.File(label="Sube un archivo de video"),
    outputs=[
        gr.Textbox(label="Texto transcrito y corregido"),
        gr.File(label="Descargar transcripci贸n Word")
    ]
)

demo.launch()