用python tkinter 实现一个语音转文字的可交互界面
时间: 2024-05-14 07:18:17 浏览: 160
要实现语音转文字的可交互界面,需要用到Python的音频处理库和图形用户界面库。以下是一个基本的实现,使用了pyaudio库来录制音频,并使用SpeechRecognition库将录制的音频转换为文本。
首先,需要安装pyaudio库和SpeechRecognition库,可以使用以下命令安装:
```python
pip install pyaudio
pip install SpeechRecognition
```
接下来是代码实现:
```python
import tkinter as tk
import speech_recognition as sr
import threading
import time
import pyaudio
class SpeechToText:
def __init__(self, root):
self.root = root
self.root.title("语音转文字")
self.root.geometry("400x200")
# 创建录音按钮
self.record_button = tk.Button(self.root, text="录音", command=self.record)
self.record_button.pack(pady=20)
# 创建文本框
self.text_box = tk.Text(self.root, height=5)
self.text_box.pack()
# 创建状态标签
self.status_label = tk.Label(self.root, text="请开始录音")
self.status_label.pack(pady=10)
def record(self):
self.status_label.config(text="正在录音...")
self.record_button.config(state="disabled")
# 开始录音
self.audio = pyaudio.PyAudio()
self.stream = self.audio.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=1024)
self.frames = []
self.is_recording = True
# 创建线程进行录音
self.record_thread = threading.Thread(target=self.record_audio)
self.record_thread.start()
def record_audio(self):
while self.is_recording:
data = self.stream.read(1024)
self.frames.append(data)
def stop_record(self):
self.status_label.config(text="正在转换...")
self.is_recording = False
# 停止录音
self.stream.stop_stream()
self.stream.close()
self.audio.terminate()
# 将录制的音频转换为文本
self.r = sr.Recognizer()
self.audio_data = sr.AudioData(b''.join(self.frames), 2, 44100)
try:
self.text = self.r.recognize_google(self.audio_data, language='zh-CN')
except sr.UnknownValueError:
self.text = "语音无法识别"
except sr.RequestError as e:
self.text = "无法连接到Google Speech Recognition服务:{0}".format(e)
# 更新文本框和状态标签
self.text_box.delete(1.0, tk.END)
self.text_box.insert(tk.END, self.text)
self.status_label.config(text="请开始录音")
self.record_button.config(state="normal")
def exit(self):
self.is_recording = False
self.root.destroy()
if __name__ == "__main__":
root = tk.Tk()
app = SpeechToText(root)
root.protocol("WM_DELETE_WINDOW", app.exit)
root.mainloop()
```
通过运行上述代码,将会打开一个窗口,其中包含一个“录音”按钮、一个文本框和一个状态标签。点击“录音”按钮即可开始录音,录音完成后将会自动将录制的音频转换为文本并显示在文本框中。
阅读全文