Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline | |
import edge_tts | |
import numpy as np | |
# بارگذاری مدل تبدیل گفتار به متن (Whisper small برای فارسی) | |
stt = pipeline("automatic-speech-recognition", model="openai/whisper-small") | |
# بارگذاری مدل چتبات (GPT2 تنظیمشده برای فارسی) | |
chatbot = pipeline("text-generation", model="HooshvareLab/gpt2-fa") | |
# تابع تبدیل متن به گفتار با استفاده از edge-tts | |
def tts(text, voice="fa-IR-FaridNeural"): | |
communicate = edge_tts.Communicate(text, voice) | |
audio_data = b"".join([chunk["data"] for chunk in communicate.stream() if chunk["type"] == "audio"]) | |
audio_array = np.frombuffer(audio_data, dtype=np.int16) | |
sample_rate = 24000 # طبق مستندات edge-tts | |
return sample_rate, audio_array | |
# تابع اصلی: خط لوله صوتی به صوتی | |
def audio_to_audio(audio_input): | |
sample_rate_in, data_in = audio_input | |
audio = {"array": data_in, "sampling_rate": sample_rate_in} | |
# مرحله 1: تبدیل گفتار به متن | |
text = stt(audio)["text"] | |
# مرحله 2: تولید پاسخ چتبات | |
response = chatbot(text, max_length=50, num_return_sequences=1)[0]["generated_text"] | |
# مرحله 3: تبدیل متن به گفتار | |
sample_rate_out, data_out = tts(response) | |
return (sample_rate_out, data_out) | |
# رابط کاربری Gradio | |
demo = gr.Interface( | |
fn=audio_to_audio, | |
inputs=gr.Audio(source="microphone", type="numpy"), | |
outputs=gr.Audio(type="numpy"), | |
title="چتبات صوتی فارسی", | |
description="به فارسی صحبت کنید و برنامه به فارسی پاسخ میدهد." | |
) | |
# اجرای برنامه | |
demo.launch() |