前言:看了许多大佬的博客,感觉做一个人工智能对话机器人其实不难。当然,从底层开始自己做是不可能的,那得自己研究语音识别算法,神经网络建立模型等等,要掌握一大堆超级高深的数学知识底蕴。今天,我做的只是裁缝,将调用各种API,各种第三库,将这一件衣服给缝的漂漂亮亮的。好了,请看我的!
用Pyhton做一个机器人,就像小爱同学,天猫精灵一样智能。可以对话,算术,百科,聊天,当然不能像小爱同学一样语音控制操作硬件,咱们只是从纯软件角度进行实现。
准备好 python 编译器 ,第三方库有 speech_recognition,baidu-aip,requests、json,pyttsx3 . 其中baidu-aip 需要去 https://ai.baidu.com/ 获取secret key,key,appID 三者才能使用baidu-aip 。百度的技术确实牛。
1-2:录音,使用 speech_recognition 包
2-3:百度API 导入模块:pip install baidu_aip
3-4:图灵API 导入requests、json模块
4-5:STT 模块pyttsx3,S它会将文字转为语音
5-6:播放
将我们的声音转换成音频文件,要求请看百度API文档,如下图:
使用speech_recognition包进行录音:
import speech_recognition as sr
# Use SpeechRecognition to record 使用语音识别包录制音频
def my_record():
rate = 16000 #录音参数必须满足 16k 采样率
r = sr.Recognizer() #实例化一个识别器r
with sr.Microphone(sample_rate=rate) as source: # 打开麦克风 句柄 source
print("please say something")
audio = r.listen(source) #通过麦克风进行录音
with open("voices/myvoices.wav", "wb") as f: #设置文件名,类型
f.write(audio.get_wav_data()) #将录音数据转换成wav格式写入文件
print("录音完成!")
my_record()
如果有看不懂speech_recognition 的用法或注释或者代码的,请移步官方教程学习speech_recognition 官方文档
我们已经在上面获取到了音频文件,那要怎么把音频文件转化为文字呢?在这里,我们就需要调用百度的语音识别API接口,同时我们需要安装这个接口包,导入模块:pip install baidu_aip。导入我们需要的模块名,然后将音频文件发送给出去,返回文字。https://ai.baidu.com/docs#/ASR-Online-Python-SDK/b3e9a8da 详细请看技术文档!
懒得看,看下面截图也行:
# 音频文件转文字:采用百度的语音识别python-SDK
# 百度语音识别API配置参数
from aip import AipSpeech
APP_ID = '16847874'
API_KEY = '6XATdS1rGo2NV27jHGemaada'
SECRET_KEY = '0SINmEBfvotQXl1itzrMcwedaxuBaw4h'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
path = 'voices/myvoices.wav'
# 将语音转文本STT
def listen():
# 读取录音文件
with open(path, 'rb') as fp:
voices = fp.read()
try:
# 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场
result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537, })
result_text = result["result"][0]
print("you said: " + result_text)
return result_text
except KeyError:
print("KeyError")
上一步我们已经成功将我们的声音转化为文字了,然后我们再调用图灵机器人的API接口,做自动应答。图灵机器人对中文的识别准确率高达90%,是目前中文语境下智能度最高的机器人。有很多在Python中使用图灵机器人API的博客,但都是1.0版本,本博客介绍的是在Python中使用图灵机器人API v2.0的方法,1.0版本的调用方式已失效。接口文档如下:
https://www.kancloud.cn/turing/www-tuling123-com/718227
# 与机器人对话:调用的是图灵机器人
import requests
import json
# 图灵机器人的API_KEY、API_URL
turing_api_key = "75854c5f9e6d4be"
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": "cheney007" # 用户唯一标识(随便填, 非密钥)
}
}
req["perception"]["inputText"]["text"] = text_words #给json串赋值
response = requests.request("post", api_url, json=req, headers=headers) #向接口网站发送请求
response_dict = json.loads(response.text)
result = response_dict["results"][0]["values"]["text"] #得到接口的回复进行解析
print("AI Robot said: " + result)
return result
们得到了图灵机器人的回复之后,就需要把结果转化为语音输出,从而实现语音交互。在python中我们如何将文字转为语音并输出呢?这里就需要用到另一个模块pyttsx3,它会将文字转为语音。
import pyttsx3
def speak(workText):
# 初始化语音
engine = pyttsx3.init() # 初始化语音库
# 设置语速
rate = engine.getProperty('rate')
engine.setProperty('rate', rate - 50)
# 输出语音
engine.say(workText) # 合成语音
engine.runAndWait()
import recognizer #录音
import baidu #录音转文字
import turing #文字得到回复
import speak #回复的文字转语音
while(True):
recognizer.my_record()
text=baidu.listen()
respondText=turing.Turing(text)
print(respondText)
speak.Speak(respondText)
通过该博客使我学到了不少东西,虽然代码不是自己一行一行写出来的,但是确实跟着作者一步步去实现,去弄懂每一行代码,去查官方文档等等。最重要的不是记住这些代码,而是学会如何解决问题,如何去实现,如何去查找资料文档,如何借助第三方API,等等。这些经验对我个人来说应该是非常宝贵的,终生受益!再次感谢原作者。下面是原作者博客,如作者不希望我二次翻译原文,侵删!
感谢原创作者:
作者:夜空骑士
来源:CSDN
原文:https://blog.csdn.net/NIeson2012/article/details/96476878
版权声明:本文为博主原创文章,转载请附上博文链接!