Qwen-speech / app.py
Sakalti's picture
Update app.py
9099ec6 verified
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from gtts import gTTS
# Qwenモデルの読み込み
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
# モデルがテキストを生成する関数
def generate_text(prompt, max_length, temperature, top_p):
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(
**inputs,
max_length=max_length,
temperature=temperature,
top_p=top_p,
do_sample=True
)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_text
# テキストを音声に変換する関数
def text_to_speech(text):
tts = gTTS(text=text, lang='ja')
file_path = "output.mp3"
tts.save(file_path)
return file_path
# モデルの出力と音声変換を組み合わせた関数
def generate_and_speak(prompt, max_length, temperature, top_p):
generated_text = generate_text(prompt, max_length, temperature, top_p)
speech_file = text_to_speech(generated_text)
return generated_text, speech_file
# Gradioインターフェースの作成
with gr.Blocks() as demo:
# 入力欄(プロンプト、長さ、温度、Top-p)
prompt = gr.Textbox(label="プロンプトを入力してください")
max_length = gr.Slider(10, 1000, value=400, step=10, label="最大長")
temperature = gr.Slider(0.1, 1.0, value=0.7, step=0.1, label="生成温度")
top_p = gr.Slider(0.0, 1.0, value=0.95, step=0.05, label="Top-p")
# 出力欄(生成されたテキストと音声ファイル)
generated_text_output = gr.Textbox(label="生成されたテキスト")
audio_output = gr.Audio(label="生成された音声")
# ボタン(生成ボタンとクリアボタン)
generate_button = gr.Button("生成")
clear_button = gr.Button("クリア")
# ボタンが押されたときのアクション
generate_button.click(generate_and_speak,
inputs=[prompt, max_length, temperature, top_p],
outputs=[generated_text_output, audio_output])
# クリアボタンの機能
clear_button.click(lambda: ("", None), None, [prompt, generated_text_output, audio_output])
# インターフェースの起動
demo.launch()