题目看起来高大上,但其实这只是假象。关键是要理清思路和流程,掌握了这个之后,整个项目基本就简化成了“傻瓜”项目,对编程能力的要求较低。
思路及流程
一定要搞清这个流程,不要被绕晕。
完整代码
其中,第2步的百度AI语音识别API参数、第3步的图灵机器人参数必须修改成自己各自账号的,其他参数若想修改的话,先去百度AI开放平台和图灵机器人官网阅读技术文档。
from aip import AipSpeech
import requests
import json
import speech_recognition as sr
import 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"
# 将语音转文本STT
def 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_text
except KeyError:
print("KeyError")
speaker.Speak("我没有听清楚,请再说一遍...")
# 3、与机器人对话:调用的是图灵机器人
# 图灵机器人的API_KEY、API_URL配置
turing_api_key = "你自己机器人的apikey"
api_url = "http://openapi.tuling123.com/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_words
response2 = 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 result
while True:
my_record()
request1 = listen()
response = Turing(request1)
# 4、回复文本转成回复音频输出,回复问题
speaker.Speak(response)
成果演示视频
和自己写的AI机器人聊天之渐渐超出剧本,演变成两小学鸡吵架两小儿辩日,吵不过AI只能自己气到语塞。
自制搞笑贺岁片|《我,机器人2之两小儿辩日》
心得
- 细节!细节!细节!细节决定成败。古人诚不欺我也。这段代码我搞了好多天,一直运行出问题,一直找不到bug,我当时心情崩溃到心想:我和这个智障机器人必须先疯一个。最后的最后,发现问题居然出现在一个参数名的拼写上!是一个小写i和大写I的微小细节!这个教训也一定程度上反应了复制粘贴的重要性(bushi)。单就在这个API调用上,百度和图灵机器人官网都给了具体详细的API调用代码,我们可以先复制粘贴下来先运行一遍看能不能成功,然后再在理解代码的基础上做自己个性化的修改。
- API调用虽说在AI领域里,但实际对编程技术的要求并不高,适合用来在外行人面前装装B,或者过年过节的在亲戚家人面前当成个节目表演表演(狗头)。
- 不要有畏难心理。比如,工作室布置这个作业下来,我在真正开始着手做这个东西之前,心里想的都是:什么?我才接触编程一年多,你就要我整一个这个玩意儿出来?你也太抬举我了吧…这根本是无法完成的任务啊…但在deadline前一周,我不得不硬着头皮上的时候,我才发现,就这?就这?所以,相信自己!年轻人,不要讲武德,冲就完事儿了,憋整天质疑自己,想这些没用的东西,束手束脚的,走不远。