File size: 1,801 Bytes
25681f6
7fc6e29
 
 
1b41e6d
7fc6e29
 
25681f6
7fc6e29
 
25681f6
7fc6e29
 
 
 
 
 
 
37a2817
7fc6e29
 
 
 
 
 
 
7877a4f
7fc6e29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b41e6d
7fc6e29
 
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
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()