Python智能对话机器人实现
前言:看了许多大佬的博客,感觉做一个人工智能对话机器人其实不难。当然,从底层开始自己做是不可能的,那得自己研究语音识别算法,神经网络建立模型等等,要掌握一大堆超级高深的数学知识底蕴。今天,我做的只是裁缝,将调用各种API,各种第三库,将这一件衣服给缝的漂漂亮亮的。好了,请看我的!目录需求说明思路分析前期准备具体实现测试项目评价反思需求说明用Pyhton做一个机器人,就像小爱同学,天猫精灵一...
前言:看了许多大佬的博客,感觉做一个人工智能对话机器人其实不难。当然,从底层开始自己做是不可能的,那得自己研究语音识别算法,神经网络建立模型等等,要掌握一大堆超级高深的数学知识底蕴。今天,我做的只是裁缝,将调用各种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
版权声明:本文为博主原创文章,转载请附上博文链接!
更多推荐
所有评论(0)