预备资料:
1.FFmpeg:
链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg
密码:w6hk
安装baidu-aip
2.baidu-aip:
pip install baidu-aip
此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径
目前市面上主流的AI技术提供公司有很多,比如百度,阿里,腾讯,主做语音的科大讯飞,做只能问答的图灵机器人等等
这些公司投入了很大一部分财力物力人力将底层封装,提供应用接口给我们,尤其是百度,完全免费的接口
基础入门
1首先进入控制台,注册一个百度的账号(百度账号通用)
2开通一下我们百度AI开放平台的授权
3然后找到已开通服务中的百度语音
走到这里,想必已经知道咱们要从语音入手了,语音识别和语音合成
4打开百度语音,进入语音应用管理界面,创建一个新的应用
5创建语音应用App
就可以创建应用了,回到应用列表我们可以看到已创建的应用了
这里面有三个值 AppID , API Key , Secret Key 记住可以从这里面看到 , 在之后我们会用到
好了 百度语音的应用已经创建完成了 接下来 我会用Python 代码作为实例进行应用
1安装百度的人工智能SDK:
首先咱们要 pip install baidu-aip 安装一个百度人工智能开放平台的Python SDK实在是太方便了
语音合成
技术上,代码上任何的疑惑,都可以从官方文档中得到答案
baidu-aip Python SDK 语音合成技术文档 : https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top
新建AipSpeech
AipSpeech是语音合成的Python SDK客户端,为使用语音合成的开发人员提供了一系列的交互方法。
参考如下代码新建一个AipSpeech:
常量APP_ID
在百度云控制台中创建,常量API_KEY
与SECRET_KEY
是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
这是与百度进行一次加密校验 , 认证你是合法用户 合法的应用
AipSpeech 是百度语音的客户端 认证成功之后,客户端将被开启,这里的client 就是已经开启的百度语音的客户端了
语音合成举例
举例,要把一段文字合成为语音文件: result = client.synthesis('你好百度123', 'zh', 1, { 'vol': 5, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('auido.mp3', 'wb') as f: f.write(result)
举例
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16818907' API_KEY = '7Th2yeY2B0V1d6PNWjwCj5GG' SECRET_KEY = 'DmeQhdwFeclKCdunwWDdASpwfnxmEskf' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('好好学习,不做咸鱼 啦啦啦', 'zh', 1, { 'vol': 5, "spd": 5, "pit": 6, "per": 1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('audio.mp3', 'wb') as f: f.write(result)
语音识别
哎,每次到这里,我都默默无语泪两行,声音这个东西格式太多样化了,如果要想让百度的SDK识别咱们的音频文件,就要想办法转变成百度SDK可以识别的格式PCM
目前DragonFire已知可以实现自动化转换格式并且屡试不爽的工具 : FFmpeg 这个工具的下载地址是 : 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk
配置环境变量 。。。。。
举例
import os from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16818907' API_KEY = '7Th2yeY2B0V1d6PNWjwCj5GG' SECRET_KEY = 'DmeQhdwFeclKCdunwWDdASpwfnxmEskf' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # # 读取文件 # def get_file_content(filePath): # with open(filePath, 'rb') as fp: # return fp.read()
# 文件格式转化 进行函数封装 读取文件 #添加环境变量后,记得重启python def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res=client.asr(get_file_content('111.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res) print(res.get("result")[0])
{'corpus_no': '6714172644029622849', 'err_msg': 'success.', 'err_no': 0, 'result': ['看看现在有网没有'], 'sn': '367226486731563265138'} 看看现在有网没有
具体参数参照百度AI 语音合成
一问一答
import os from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16818907' API_KEY = '7Th2yeY2B0V1d6PNWjwCj5GG' SECRET_KEY = 'DmeQhdwFeclKCdunwWDdASpwfnxmEskf' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) #添加环境变量后,记得重启python def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res=client.asr(get_file_content('111.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res.get("result")[0]) Q=res.get("result")[0] A="伤心,我听不懂" if Q=="你叫什么名字": A="我是 三刀流 索罗" result = client.synthesis(A, 'zh', 1, { 'vol': 5, "spd": 5, "per": 1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('Answer.mp3', 'wb') as f: f.write(result)
NLP
from aip import AipNlp """ 你的 APPID AK SK """ APP_ID = '16821793' API_KEY = '260SCsM76USZBUFYdMLT6hvT' SECRET_KEY = 'wDzQ55CBfR97jeAEsrfhLId1usI0P06m' # 注意 导入应用中 加上短文本相似度 NLP_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) res = NLP_client.simnet("你叫什么名字","你的名字是什么") print(res) print(res.get("score"))
语音 与短文本相似度
import os from aip import AipSpeech, AipNlp """ 你的 APPID AK SK """ APP_ID = '16821793' API_KEY = '260SCsM76USZBUFYdMLT6hvT' SECRET_KEY = 'wDzQ55CBfR97jeAEsrfhLId1usI0P06m' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) NLP_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) # 添加环境变量后,记得重启python def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('111.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res.get("result")[0]) Q = res.get("result")[0] sim = NLP_client.simnet(Q, "告诉我,你的名字").get("score") print(sim) A = "伤心,我听不懂" if sim >= 0.58: A = "我是 三刀流 索罗" result = client.synthesis(A, 'zh', 1, { 'vol': 5, "spd": 5, "per": 1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('Answer.mp3', 'wb') as f: f.write(result)
图灵机器人 的创建 文档 参考官方
import requests # 请求参数 data = { "perception": { "inputText": { "text": "今天天气怎么样" } }, "userInfo": { "apiKey": "c2f49e25e2c441aa83765740c470b660", "userId": "123" } } res=requests.post("http://openapi.tuling123.com/openapi/api/v2",json=data) res_dict=res.json() print(res_dict) print(res_dict.get("results")[0].get("values").get("text"))
函数版 图灵
import requests # 请求参数 def go_tl(Q): data = { "perception": { "inputText": { "text":Q } }, "userInfo": { # 自己创建的图灵机器人的apikey "apiKey": "c2f49e25e2c441aa83765740c470b660", "userId": "123" } } # API 接口地址 res=requests.post("http://openapi.tuling123.com/openapi/api/v2",json=data) res_dict=res.json() return res_dict.get("results")[0].get("values").get("text")
import os from aip import AipSpeech, AipNlp from tuling import go_tl """ 你的 APPID AK SK """ APP_ID = '16821793' API_KEY = '260SCsM76USZBUFYdMLT6hvT' SECRET_KEY = 'wDzQ55CBfR97jeAEsrfhLId1usI0P06m' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) NLP_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) # 添加环境变量后,记得重启python def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('222.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res.get("result")[0]) Q = res.get("result")[0] sim = NLP_client.simnet(Q, "告诉我,你的名字").get("score") print(sim) A = "伤心,我听不懂" if sim >= 0.58: A = "我是 三刀流 索罗" else: A=go_tl(Q) result = client.synthesis(A, 'zh', 1, { 'vol': 5, "spd": 5, "per": 1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('Answer.mp3', 'wb') as f: f.write(result)