人工智能 - 語音合成,語音識別,語音聊天機器人算法
現成的AI算法平臺http://ai.baidu.com/json
根據百度大佬提供的文檔,做出如下小栗子:
1.下載api
pip install baidu-aip
2.代碼函數
from aip import AipSpeech """ 你的 APPID AK SK 控制檯 -> 百度語音-> 建立或管理應用 """ APP_ID = '15837844' API_KEY = '411VNGbuZVbDNZU78LqTzfsV' SECRET_KEY = '84AnwR2NARGMqnC6WFnzqQL9WWdWh5bW' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 實例化 def text2audio(text): """一些參數的配置,詳見文檔""" result = client.synthesis(text, 'zh', 1, { 'vol': 5, 'per': 4, 'spd': 4, 'pit': 7, }) # 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼 if not isinstance(result, dict): print(result) with open('audio.mp3', 'wb') as f: f.write(result)
1.下載 ffmpeg 用於將語音文件轉換爲pcm格式post
連接: https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHgui
密碼: w6hk人工智能
3.代碼spa
from aip import AipSpeech import os """ 你的 APPID AK SK """ APP_ID = '15837844' API_KEY = '411VNGbuZVbDNZU78LqTzfsV' SECRET_KEY = '84AnwR2NARGMqnC6WFnzqQL9WWdWh5bW' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 讀取文件 def get_file_content(filePath): os.system(f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm") # 使用ffmpeg轉換格式 with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 識別本地文件 res = client.asr(get_file_content('wyn.wav'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res.get("result")[0]) # if res.get("result")[0] == "你叫什麼名字": # text2audio("我叫銀王八")
1.爲了更快捷的開發, 咱們能夠調用福林機器人的APIcode
在福林機器人裏自定義機器人部分功能.
2.代碼
from aip import AipSpeech from aip import AipNlp # 天然語言處理,詞義類似度 import os """ 你的 APPID AK SK """ APP_ID = '15837844' API_KEY = '411VNGbuZVbDNZU78LqTzfsV' SECRET_KEY = '84AnwR2NARGMqnC6WFnzqQL9WWdWh5bW' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) # 實例化詞義類似度對象 """查詢文件""" def get_file_content(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: return fp.read() """識別本地文件""" res = client.asr(get_file_content('jgxh.wma'), 'pcm', 16000, { 'dev_pid': 1536, }) text = res.get("result")[0] """福林機器人智能回答函數""" import requests def to_tuling(text, uid): data = { "perception": { "inputText": { "text": "北京" } }, "userInfo": { "apiKey": "a4c4a668c9f94d0c928544f95a3c44fb", "userId": "123" } } data["perception"]["inputText"]["text"] = text data["userInfo"]["userId"] = uid res = requests.post("http://openapi.tuling123.com/openapi/api/v2", json=data) # print(res.content) res_json = res.json() text = res_json.get("results")[0].get("values").get("text") print(text) return text """語音類似度判斷函數""" def my_nlp(text): if nlp_client.simnet(text, "你叫什麼名字").get("score") >= 0.75: A = "我叫如花" return A if nlp_client.simnet(text, "你今年幾歲了").get("score") >= 0.75: A = "我今年999歲了" return A A = to_tuling(text, "open123") # 若是不符合自定義條件,那麼調用福林機器人API return A """開始執行""" A = my_nlp(text) result = client.synthesis(A, 'zh', 1, { 'vol': 5, 'per': 4, 'spd': 4, 'pit': 7, }) # 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼 if not isinstance(result, dict): # print(result) with open('audio.mp3', 'wb') as f: f.write(result) """自動執行audio.mp3, 打開軟件爲默認打開軟件""" os.system('audio.mp3')