人工智能 - 語音合成,語音識別,語音聊天機器人
現成的AI算法平台http://ai.baidu.com/
語音合成
根據百度大佬提供的文檔,作出以下小栗子:
1.下載
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格式
鏈接: https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg
密碼: w6hk
- pip pip install baidu-aip
3.代碼
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.為了更快捷的開發, 我們可以調用福林機器人的API
在福林機器人里自定義機器人部分功能.
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')