如何构建可读取isVHSopen网站状态的Google Voice语音应用?
嘿,我来帮你搞定这个简易语音应用的搭建!咱们把需求拆成几个核心环节,一步步实现就行。
整体实现流程
这个应用的核心逻辑很清晰,拆解下来就是三步:
- 监听用户的语音触发短语(比如“IsVHSOpen”)
- 调用指定接口获取VHS门的状态数据
- 将获取到的状态转为语音播报出来
技术选型建议
根据需求的简易性,推荐用Python来快速实现,搭配几个轻量库:
- 语音识别:用
SpeechRecognition库,支持麦克风输入和多种识别引擎(Google的免费引擎足够用) - HTTP请求:用
requests库调用接口获取数据 - 语音播报:用
pyttsx3(离线播报,不需要联网)或者gTTS(在线生成语音文件再播放)
核心代码示例
下面是一个基础的实现版本,你可以直接参考修改:
1. 安装依赖库
先把需要的库装一下:
pip install SpeechRecognition requests pyttsx3 pyaudio
(注:pyaudio是麦克风输入的依赖,Windows/macOS/Linux安装方式可能略有不同,比如Linux可以先运行apt-get install portaudio19-dev再装)
2. 完整代码实现
import speech_recognition as sr import requests import pyttsx3 # 初始化语音识别器和播报引擎 recognizer = sr.Recognizer() engine = pyttsx3.init() # 自定义触发短语(可以添加多个,比如["IsVHSOpen", "Check VHS Door"]) TRIGGER_PHRASES = ["IsVHSOpen"] # 状态接口地址 STATUS_API_URL = "https://api.vanhack.ca/s/vhs/data/door.json" def get_vhs_status(): """调用接口获取VHS门的状态""" try: response = requests.get(STATUS_API_URL) response.raise_for_status() data = response.json() # 假设接口返回的状态字段是"status",比如值为"open"或"closed" return data.get("status", "unknown") except Exception as e: print(f"获取状态失败: {e}") return "error" def speak(text): """语音播报文本内容""" engine.say(text) engine.runAndWait() def listen_for_trigger(): """监听麦克风输入,检测触发短语""" with sr.Microphone() as source: print("等待你的触发指令...") recognizer.adjust_for_ambient_noise(source) # 消除环境噪音 audio = recognizer.listen(source) try: # 用Google语音识别转文本 command = recognizer.recognize_google(audio).strip() print(f"识别到指令: {command}") # 检查是否匹配触发短语(忽略大小写) if any(phrase.lower() in command.lower() for phrase in TRIGGER_PHRASES): speak("正在查询VHS门状态...") status = get_vhs_status() if status == "open": speak("VHS门目前是打开状态") elif status == "closed": speak("VHS门目前是关闭状态") else: speak(f"无法获取状态,返回值为{status}") else: speak("未识别到触发指令,请再说一遍") except sr.UnknownValueError: speak("抱歉,我没听清你说的话") except sr.RequestError: speak("抱歉,语音识别服务暂时不可用") if __name__ == "__main__": while True: listen_for_trigger()
关于权限的说明
你提到网站托管在GitHub且有开发权限,不过咱们这个应用只是调用公开的状态接口,不需要修改GitHub上的仓库内容。如果之后需要调整接口返回字段或者部署相关服务,再用你的仓库权限去修改即可,当前实现完全依赖公开接口就能运行。
扩展建议
- 可以自定义更多触发短语,比如把
TRIGGER_PHRASES改成更口语化的表达,比如"Is VHS open?" - 如果需要在线部署,可以把后端逻辑放到Flask/FastAPI服务里,搭配前端Web Speech API实现网页端语音交互
- 可以添加状态缓存,避免短时间内频繁调用接口
内容的提问来源于stack exchange,提问作者Salil Jakhadie
相关产品推荐
相关产品推荐

