1.FFMPEG - https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg w6hk #转格式的软件
2.baidu-aip - pip install baidu-aip #百度aij模块
3.图灵网站创建机器人
4.百度云管理中心 https://console.bce.baidu.com
项目目录:
1.baidu_ai.py文件中的内容
from aip import AipSpeech,AipNlp from uuid import uuid4 import requests import os """ 你的 APPID AK SK """ APP_ID = \'15674271\' API_KEY = \'XkV3bWa9stbsFfXvHDqzWIR2\' SECRET_KEY = \'nIMmNTRSx2u76azSNfz9TTEclnDGmbgh\' #实例化语音合成客户端对象 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) #实例化自然语言处理客户端对象 nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) #图灵配置 dic = { "reqType":0, "perception": { "inputText": { "text": "" } }, "userInfo": { "apiKey": "e237357df4dd405f9b2dddd22320837a", "userId": "123123" } } #图灵返回的答案函数 def go_tuling(Q): #设置问题 dic["perception"]["inputText"]["text"] = Q #得到答案的json字符串 res = requests.post("http://openapi.tuling123.com/openapi/api/v2",json=dic) #把答案反序列化成字典 res_dic = res.json() #获取到答案字符串 print(res_dic.get("results")[0]["values"]["text"]) #返回答案 return res_dic.get("results")[0]["values"]["text"] #自然语言处理的函数 def my_nlp_func(text): #当text的内容与"你的名字是什么"的相似度大于58%时返回 if nlp_client.simnet("你的名字是什么",text).get("score") >= 0.58: return "我的名字叫银王八" # 当text的内容与"你今年多大了"的相似度大于58%时返回 if nlp_client.simnet("你今年多大了",text).get("score") >= 0.58: return "我今年10岁了" #当text内容都不是以上问题时返回 return go_tuling(text) # 语音合成函数 def text2audio(answer): #合成回答文件 result = client.synthesis(answer, \'zh\', 1, { \'vol\': 5, "spd": 4, "pit": 9, "per": 4 }) #随机生成文件名 res_file_name = f"{uuid4()}.mp3" #如果返回的数据不是字典,写入文件 if not isinstance(result, dict): with open(\'./chat/\'+res_file_name, \'wb\') as f: f.write(result) #返回合成完答案文件返回文件名 return res_file_name # 开始语音识别函数 def audio2text(filePath): # 读取文件 os.system(f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm") with open(f"{filePath}.pcm", \'rb\') as fp: res = client.asr(fp.read(), \'pcm\', 16000, { \'dev_pid\': 1537, }) #把语音文件转换成字典res返回 return res \'\'\' res 的数据结构 // 成功返回 { "err_no": 0, "err_msg": "success.", "corpus_no": "15984125203285346378", "sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D", "result": ["北京天气"] } // 失败返回 { "err_no": 2000, "err_msg": "data empty.", "sn": null } \'\'\'