我想实现一个可以在一个人后面重复某个单词的功能。例如:“说娃娃。”可以使用任何其他词来代替娃娃。重点是让助手准确地重复“doll”这个词
我想用 vosk 模块来实现这个。 我该怎么做呢?
import json
import vosk
import pyaudio
MODEL_PATH = "vosk-model-small-en-us-0.15" # 替换为你的 Vosk 模型路径
WORD_TO_DETECT = "doll" # 替换为你想让助手重复的词语
# 检查模型是否存在
if not os.path.exists(MODEL_PATH):
raise ValueError(f"Vosk model not found at path: {MODEL_PATH}")
# 设置 Vosk recognizer
model = vosk.Model(MODEL_PATH)
recognizer = vosk.KaldiRecognizer(model, 16000)
# 初始化 PyAudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
stream.start_stream()
print(f"正在监听单词: '{WORD_TO_DETECT}'...")
while True:
data = stream.read(4000)
if len(data) == 0:
break
if recognizer.AcceptWaveform(data):
result = recognizer.Result()
result_dict = json.loads(result)
if "text" in result_dict:
text = result_dict["text"]
words = text.lower().split()
if WORD_TO_DETECT in words:
print(f"检测到单词: '{WORD_TO_DETECT}'")
# 在这里添加你想让助手执行的操作,例如:
# print(f"你说: '{WORD_TO_DETECT}'")
代码解释:
- 导入必要的库 :
-
vosk
用于语音识别。 -
pyaudio
用于音频输入。 -
json
用于解析识别结果。 -
设置模型路径和目标词 :
-
MODEL_PATH
应指向你下载的 Vosk 模型。 -
WORD_TO_DETECT
是你想要检测的词语。 -
初始化 Vosk recognizer :
- 加载 Vosk 模型。
-
创建一个 KaldiRecognizer 实例。
-
初始化 PyAudio :
- 创建一个 PyAudio 实例。
-
打开一个音频流,用于从麦克风获取音频数据。
-
开始监听 :
- 进入一个无限循环,持续监听音频输入。
- 读取音频流的数据块。
-
将数据块传递给 recognizer 进行识别。
-
处理识别结果 :
-
如果 recognizer 返回结果,则使用
json.loads
将其解析为字典。 - 检查字典中是否存在 "text" 键。
- 如果存在,则提取识别到的文本,将其转换为小写,并分割成单词列表。
- 检查目标词是否在单词列表中。
- 如果找到目标词,则打印一条消息,并执行你想要的操作。
使用方法:
-
确保你已经安装了必要的库:
vosk
,pyaudio
。 -
下载与你的系统架构相匹配的 Vosk 模型,并将
MODEL_PATH
变量更新为模型的路径。 -
将
WORD_TO_DETECT
变量替换为你想要检测的词语。 - 运行 Python 脚本。
- 脚本将开始监听你的语音,并在检测到目标词时打印一条消息。
注意:
- 你需要根据你的音频输入设备调整 PyAudio 参数。
- Vosk 模型的准确性取决于模型的质量和你的音频输入质量。
- 你可以根据自己的需要修改代码,添加更多功能,例如播放音频、控制其他设备等。