题目看起来高大上,但其实这只是假象。关键是要理清思路和流程,掌握了这个之后,整个项目基本就简化成了“傻瓜”项目,对编程能力的要求较低。
思路及流程
一定要搞清这个流程,不要被绕晕。
完整代码
其中,第2步的百度AI语音识别API参数、第3步的图灵机器人参数必须修改成自己各自账号的,其他参数若想修改的话,先去百度AI开放平台和图灵机器人官网阅读技术文档。
from aip import AipSpeechimport requestsimport jsonimport speech_recognition as srimport win32com.client# 1、人类说出问题,生成问题音频speaker = win32com.client.Dispatch("SAPI.SpVoice")def my_record(rate=16000):r = sr.Recognizer()with sr.Microphone(sample_rate=rate) as source:print("please say something")audio = r.listen(source)with open("voices.wav", "wb") as f:f.write(audio.get_wav_data())# 2、问题音频文件转成问题文本# 导入我们需要的模块,然后将音频文件发送出去,返回文本# 百度语音识别API配置参数APP_ID = '你自己的AppID'API_KEY = '你自己的API Key'SECRET_KEY = '你自己的Secret Key'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)path = "voices.wav"# 将语音转文本STTdef listen():with open(path, 'rb') as fp:voices = fp.read()try:result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537, }) # 'dev_pid'参数1537是识别普通话,也可以设置成其他语言,详情见 百度AI开放平台result_text = result["result"][0]print("you said: " + result_text)return result_textexcept KeyError:print("KeyError")speaker.Speak("我没有听清楚,请再说一遍...")# 3、与机器人对话:调用的是图灵机器人# 图灵机器人的API_KEY、API_URL配置turing_api_key = "你自己机器人的apikey"api_url = "/openapi/api/v2" # 图灵机器人api网址headers = {'Content-Type': 'application/json;charset=UTF-8'}# 图灵机器人回复def Turing(text_words=""):req = {"reqType": 0,"perception": {"inputText": {"text": text_words},"selfInfo": {"location": {"city": "扬州", # 必须有的参数"province": "可有可无的参数","street": "可有可无的参数"}}},"userInfo": {"apiKey": turing_api_key, # 你的图灵机器人apiKey"userId": "Stephanie" # 用户唯一标识(随便填,非密钥)}}req["perception"]["inputText"]["text"] = text_wordsresponse2 = requests.request("post", api_url, json=req, headers=headers)response_dict = json.loads(response2.text)result = response_dict["results"][0]["values"]["text"]print("AI Robot said:" + result)return resultwhile True:my_record()request1 = listen()response = Turing(request1)# 4、回复文本转成回复音频输出,回复问题speaker.Speak(response)
成果演示视频
和自己写的AI机器人聊天之渐渐超出剧本,演变成两小学鸡吵架两小儿辩日,吵不过AI只能自己气到语塞。
自制搞笑贺岁片|《我,机器人2之两小儿辩日》