|
import gradio as gr |
|
import csv |
|
import os |
|
from pydub import AudioSegment |
|
from pydub.playback import play |
|
from rapidfuzz import process |
|
|
|
DATASET = "dataset.csv" |
|
|
|
def cargar_dataset(): |
|
with open(DATASET, newline='', encoding='utf-8') as f: |
|
reader = csv.DictReader(f) |
|
return [{"path": row["path"], "text": row["text"].lower().strip()} for row in reader] |
|
|
|
dataset = cargar_dataset() |
|
|
|
def buscar_audio(texto): |
|
texto = texto.lower().strip() |
|
frases = [d["text"] for d in dataset] |
|
|
|
match = process.extractOne(texto, frases, score_cutoff=30) |
|
|
|
if not match: |
|
return None, "❌ No encontré coincidencias en tus clips grabados." |
|
|
|
mejor_texto = match[0] |
|
ruta = next((d["path"] for d in dataset if d["text"] == mejor_texto), None) |
|
|
|
if ruta and os.path.exists(ruta): |
|
return ruta, f"🎧 Clip encontrado: {ruta}" |
|
else: |
|
return None, "⚠️ Algo falló encontrando el archivo de audio." |
|
|
|
def demo_func(texto): |
|
ruta, mensaje = buscar_audio(texto) |
|
return (ruta if ruta else None), mensaje |
|
|
|
demo = gr.Interface( |
|
fn=demo_func, |
|
inputs=gr.Textbox(label="Escribe una frase similar a una grabada"), |
|
outputs=[gr.Audio(label="Clip de voz"), gr.Textbox(label="Resultado")], |
|
title="🐽 Voz Kuchiyuya Real", |
|
description="Este demo busca y reproduce tu grabación más parecida al texto ingresado." |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|