国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python開發(fā)語(yǔ)音聊天機(jī)器人

原文:https://blog.csdn.net/weixin_44638960/article/details/96979347

Python開發(fā)語(yǔ)音聊天機(jī)器人

知識(shí)儲(chǔ)備:(語(yǔ)音識(shí)別,語(yǔ)音讀取,人工智能)

百度AI的連接地址:https://ai.baidu.com/

1、百度AI語(yǔ)音識(shí)別技術(shù):百度語(yǔ)音識(shí)別通過 REST API 的方式給開發(fā)者提供一個(gè)通用的 HTTP 接口。上傳需要完整的錄音文件,錄音時(shí)長(zhǎng)不超過60s。對(duì)于任意操作系統(tǒng),任意編程語(yǔ)言,只要可以對(duì)百度語(yǔ)音服務(wù)器發(fā)起http請(qǐng)求的,均可以使用此接口。

首先我們學(xué)習(xí)百度給的語(yǔ)音識(shí)別demo:https://ai.baidu.com/docs#/ASR-Online-Python-SDK/top

第一步安裝python sdk:執(zhí)行 pip install baidu-aip 命令。(PyCharm直接在File-Setting中搜索baidu-aip導(dǎo)入即可)

第二步新建AipSpeech:AipSpeech是語(yǔ)音識(shí)別的Python SDK客戶端,為使用語(yǔ)音識(shí)別的開發(fā)人員提供了一系列的交互方法。

新建AipSpeech代碼如下:(APP_ID,API_KEY,SECRET_KEY均在創(chuàng)建應(yīng)用時(shí)都會(huì)給出)

 
  1. from aip import AipSpeech

  2.  
  3. ''' 你的 APPID AK SK '''

  4. APP_ID = '你的 App ID'

  5. API_KEY = '你的 Api Key'

  6. SECRET_KEY = '你的 Secret Key'

  7.  
  8. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

第三步對(duì)語(yǔ)音文件進(jìn)行識(shí)別:client.asr('speech','format’,'rate’,'dev_pid'),speech為建立包含語(yǔ)音內(nèi)容的Buffer對(duì)象, 語(yǔ)音文件的格式,pcm 或者 wav 或者 amr。不區(qū)分大小寫;format為音頻文件格式,pcm 或者 wav 或者 amr。不區(qū)分大小寫。推薦pcm文件;rate為采樣率,16000,固定值;dev_pid為輸入法模型(默認(rèn)1537),下圖為dev_pid的取樣表。

dev_pid語(yǔ)言模型是否有標(biāo)點(diǎn)備注
1536普通話(支持簡(jiǎn)單的英文識(shí)別)搜索模型無(wú)標(biāo)點(diǎn)支持自定義詞庫(kù)
1537普通話(純中文識(shí)別)輸入法模型有標(biāo)點(diǎn)支持自定義詞庫(kù)
1737英語(yǔ) 有標(biāo)點(diǎn)不支持自定義詞庫(kù)
1637粵語(yǔ) 有標(biāo)點(diǎn)不支持自定義詞庫(kù)
1837四川話 有標(biāo)點(diǎn)不支持自定義詞庫(kù)
1936普通話遠(yuǎn)場(chǎng)遠(yuǎn)場(chǎng)模型有標(biāo)點(diǎn)不支持

語(yǔ)音識(shí)別代碼如下:

 
  1. # 讀取文件

  2. def get_file_content(filePath):

  3. with open(filePath, 'rb') as fp:

  4. return fp.read()

  5.  
  6. # 識(shí)別本地文件

  7. client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {'dev_pid': 1536})

語(yǔ)音識(shí)別 返回?cái)?shù)據(jù)參數(shù)詳情:client.asr()返回的是一個(gè)字典類型。(下表為返回字典對(duì)應(yīng)鍵的名稱與作用)

參數(shù)類型是否一定輸出描述
err_noint錯(cuò)誤碼(0為返回成功)
err_msgint錯(cuò)誤碼描述
snint語(yǔ)音數(shù)據(jù)唯一標(biāo)識(shí),系統(tǒng)內(nèi)部產(chǎn)生,用于 debug
resultint識(shí)別結(jié)果數(shù)組,提供1-5 個(gè)候選結(jié)果,string 類型為識(shí)別的字符串, utf-8 編碼

返回成功與失敗樣例:(result為錄音文件的識(shí)別內(nèi)容,用戶可通過此鍵來獲取)

錯(cuò)誤類型:由err_no可以推斷出錯(cuò)誤類型

錯(cuò)誤碼用戶輸入/服務(wù)端含義一般解決方法
3300用戶輸入錯(cuò)誤輸入?yún)?shù)不正確請(qǐng)仔細(xì)核對(duì)文檔及參照demo,核對(duì)輸入?yún)?shù)
3301用戶輸入錯(cuò)誤音頻質(zhì)量過差請(qǐng)上傳清晰的音頻
3302用戶輸入錯(cuò)誤鑒權(quán)失敗token字段校驗(yàn)失敗。請(qǐng)使用正確的API_KEY 和 SECRET_KEY生成。或QPS、調(diào)用量超出限額?;蛞纛l采樣率不正確(可嘗試更換為16k采樣率)。
3303服務(wù)端問題語(yǔ)音服務(wù)器后端問題請(qǐng)將api返回結(jié)果反饋至論壇或者QQ群
3304用戶請(qǐng)求超限用戶的請(qǐng)求QPS超限請(qǐng)降低識(shí)別api請(qǐng)求頻率 (qps以appId計(jì)算,移動(dòng)端如果共用則累計(jì))
3305用戶請(qǐng)求超限用戶的日pv(日請(qǐng)求量)超限請(qǐng)“申請(qǐng)?zhí)岣吲漕~”,如果暫未通過,請(qǐng)降低日請(qǐng)求量
3307服務(wù)端問題語(yǔ)音服務(wù)器后端識(shí)別出錯(cuò)問題目前請(qǐng)確保16000的采樣率音頻時(shí)長(zhǎng)低于30s。如果仍有問題,請(qǐng)將api返回結(jié)果反饋至論壇或者QQ群
3308用戶輸入錯(cuò)誤音頻過長(zhǎng)音頻時(shí)長(zhǎng)不超過60s,請(qǐng)將音頻時(shí)長(zhǎng)截取為60s以下
3309用戶輸入錯(cuò)誤音頻數(shù)據(jù)問題服務(wù)端無(wú)法將音頻轉(zhuǎn)為pcm格式,可能是長(zhǎng)度問題,音頻格式問題等。 請(qǐng)將輸入的音頻時(shí)長(zhǎng)截取為60s以下,并核對(duì)下音頻的編碼,是否是16K, 16bits,單聲道。
3310用戶輸入錯(cuò)誤輸入的音頻文件過大語(yǔ)音文件共有3種輸入方式: json 里的speech 參數(shù)(base64后); 直接post 二進(jìn)制數(shù)據(jù),及callback參數(shù)里url。 分別對(duì)應(yīng)三種情況:json超過10M;直接post的語(yǔ)音文件超過10M;callback里回調(diào)url的音頻文件超過10M
3311用戶輸入錯(cuò)誤采樣率rate參數(shù)不在選項(xiàng)里目前rate參數(shù)僅提供16000,填寫4000即會(huì)有此錯(cuò)誤
3312用戶輸入錯(cuò)誤音頻格式format參數(shù)不在選項(xiàng)里目前格式僅僅支持pcm,wav或amr,如填寫mp3即會(huì)有此錯(cuò)誤

 2、語(yǔ)音讀取(目的:將用戶所講內(nèi)容打印至客戶端):

PyAudio的應(yīng)用和使用,此第三方庫(kù)可以進(jìn)行錄音,播放,生成wav文件等等。

第一步安裝PyAudio:PyCharm直接在File-Setting中搜索PyAudio導(dǎo)入,同導(dǎo)入百度AI類似。

第二步實(shí)現(xiàn)對(duì)于音頻文件的錄制(wave庫(kù)和PyAudio庫(kù)的使用):

音頻文件的錄制:

 
  1. from pyaudio import PyAudio,paInt16

  2. import wave,time

  3. def SaveVoice():

  4. pa=PyAudio()

  5. wf=wave.open(r'T.wav','wb')#打開wave文件

  6. wf.setnchannels(1)#配置聲道數(shù)

  7. wf.setsampwidth(2)# 采樣寬度2bytes

  8. wf.setframerate(16000)#采樣率

  9. stream=pa.open(format=paInt16,channels=wf.getnchannels(),rate=wf.getframerate(),input=True,frames_per_buffer=1024) #打開一個(gè)stream

  10. buff=[]#存儲(chǔ)聲音信息

  11. start=time.time()#開始運(yùn)行時(shí)間戳

  12. print('say:')

  13. while time.time()<start+6:#錄制6秒

  14. buff.append(stream.read(wf.getframerate()))

  15. stream.close()#關(guān)閉stream

  16. pa.terminate()

  17. wf.writeframes(b''.join(buff))

  18. wf.close()#關(guān)閉wave

或者使用第三方庫(kù)SpeechRecognition :pip install SpeechRecognition即可

 
  1. def my_record(rate=16000):

  2. r = sr.Recognizer()

  3. with sr.Microphone(sample_rate=rate) as source:

  4. print('please say something')

  5. audio = r.listen(source)#讀入聲音信息

  6.  
  7. with open('T.wav', 'wb') as f:

  8. f.write(audio.get_wav_data())#得到wave信息寫入音頻文件

  9. print('錄音完成!')

3、構(gòu)建一個(gè)機(jī)器人(圖靈機(jī)器):連接http://www.turingapi.com/

申請(qǐng)一個(gè)賬號(hào)即可免費(fèi)創(chuàng)建屬于自己的機(jī)器人(可在官網(wǎng)上對(duì)其屬性進(jìn)行設(shè)置),普通注冊(cè)用戶一天可以免費(fèi)調(diào)用100次。

使用說明:1、編碼方式UTF-8;2、接口地址:http://openapi.tuling123.com/openapi/api/v2

3、請(qǐng)求方式:http post;4、參數(shù)格式:json格式;(具體屬性的參數(shù)說明詳見下表)

 
  1. {

  2. 'reqType':0,#數(shù)據(jù)類型為整型,用于區(qū)分傳入的數(shù)據(jù)類型,0-文本(默認(rèn))、1-圖片、2-音頻

  3. 'perception': {#必填項(xiàng),用戶輸入的數(shù)據(jù)

  4. 'inputText': {#非必填項(xiàng),用于保存文本信息

  5. 'text': ''#string類型,必填項(xiàng),文本內(nèi)容

  6. },

  7. 'inputImage': {#非必填項(xiàng),用于保存圖片信息

  8. 'url': 'imageUrl'#string類型,必填項(xiàng),圖片地址

  9. },

  10. 'selfInfo': {#非必填項(xiàng),用于識(shí)別用戶信息

  11. 'location': {

  12. 'city': '',

  13. 'province': '',

  14. 'street': ''

  15. }

  16. }

  17. },

  18. 'userInfo': {#必填項(xiàng),識(shí)別用戶信息

  19. 'apiKey': '',#此處為圖靈機(jī)器人的apiKey

  20. 'userId': ''

  21. }

  22. }

參數(shù)說明

參數(shù)類型是否必須取值范圍說明
reqTypeintN-輸入類型:0-文本(默認(rèn))、1-圖片、2-音頻
perception-Y-輸入信息
userInfo-Y-用戶參數(shù)

perception

參數(shù)類型是否必須取值范圍說明
inputText-N-文本信息
inputImage-N-圖片信息
inputMedia-N-音頻信息
selfInfo-N-客戶端屬性

注意:輸入?yún)?shù)必須包含inputText或inputImage或inputMedia!(必須有一個(gè)存在

inputText

參數(shù)類型是否必須取值范圍說明
textStringY1-128字符直接輸入文本

inputImage

參數(shù)類型是否必須取值范圍說明
urlStringY 圖片地址

inputMedia

參數(shù)類型是否必須取值范圍說明
urlStringY 音頻地址

selfInfo

參數(shù)類型是否必須取值范圍說明
location-N-地理位置信息

location

參數(shù)類型是否必須取值范圍說明
cityStringY-所在城市
provinceStringN-省份
streetStringN-街道

userInfo

參數(shù)類型是否必須取值范圍說明
apiKeyStringY32位機(jī)器人標(biāo)識(shí)
userIdStringY長(zhǎng)度小于等于32位用戶唯一標(biāo)識(shí)
groupIdStringN長(zhǎng)度小于等于64位群聊唯一標(biāo)識(shí)
userIdNameStringN長(zhǎng)度小于等于64位群內(nèi)用戶昵稱

 返回成功與失敗的示例:

失敗樣例:(只返回錯(cuò)誤提示類型)

 
  1. {#返回失敗信息

  2. 'intent':

  3. {

  4. 'code':5000#錯(cuò)誤碼,0表示上傳成功。

  5. }

  6. }

  7. 異常碼 說明

  8. 5000 無(wú)解析結(jié)果

  9. 6000 暫不支持該功能

  10. 4000 請(qǐng)求參數(shù)格式錯(cuò)誤

  11. 4001 加密方式錯(cuò)誤

  12. 4002 無(wú)功能權(quán)限

  13. 4003 該apikey沒有可用請(qǐng)求次數(shù)

  14. 4005 無(wú)功能權(quán)限

  15. 4007 apikey不合法

  16. 4100 userid獲取失敗

  17. 4200 上傳格式錯(cuò)誤

  18. 4300 批量操作超過限制

  19. 4400 沒有上傳合法userid

  20. 4500 userid申請(qǐng)個(gè)數(shù)超過限制

  21. 4600 輸入內(nèi)容為空

  22. 4602 輸入文本內(nèi)容超長(zhǎng)(上限150)

  23. 7002 上傳信息失敗

  24. 8008 服務(wù)器錯(cuò)誤

  25. 0 上傳成功

 成功樣例:以詢問酒店為例

 
  1. {

  2. 'intent': {#用于表示請(qǐng)求意圖

  3. 'code': 10005,

  4. 'intentName': '',

  5. 'actionName': '',

  6. 'parameters': {

  7. 'nearby_place': '酒店'

  8. }

  9. },

  10. 'results': [#輸出結(jié)果集合

  11. {

  12. 'groupType': 1,

  13. 'resultType': 'url',

  14. 'values': {

  15. 'url': 'http://m.elong.com/hotel/0101/nlist/#indate=2016-12-10&outdate=2016-12-11&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF'

  16. }

  17. },

  18. {

  19. 'groupType': 1,

  20. 'resultType': 'text',

  21. 'values': {#輸出值

  22. 'text': '親,已幫你找到相關(guān)酒店信息'#機(jī)器反饋信息

  23. }

  24. }

  25. ]

  26. }

參數(shù)說明

參數(shù)類型是否必須取值范圍說明
intent-Y-請(qǐng)求意圖
results-N-輸出結(jié)果集

intent

參數(shù)類型是否包含取值范圍說明
codeintY-輸出功能code
intentNameStringN-意圖名稱
actionNameStringN-意圖動(dòng)作名稱
parametersMapN-功能相關(guān)參數(shù)

results

參數(shù)類型是否包含取值范圍說明
resultTypeStringY文本(text);連接(url);音頻(voice);視頻(video);圖片(image);圖文(news)輸出類型
values-Y-輸出值
groupTypeintY-'組’編號(hào):0為獨(dú)立輸出,大于0時(shí)可能包含同組相關(guān)內(nèi)容 (如:音頻與文本為一組時(shí)說明內(nèi)容一致)

 通過requests庫(kù)的post方法將json數(shù)據(jù)和編碼格式UTF-8(import requests)

 
  1. import requests#導(dǎo)入requests庫(kù),多用于網(wǎng)絡(luò)爬蟲

  2. import json#導(dǎo)入json庫(kù)

  3. TulingUrl='http://openapi.tuling123.com/openapi/api/v2'

  4. turing_api_key = '你申請(qǐng)的圖靈機(jī)器人id'

  5. def RobotSpeak(usersay='你好'):#默認(rèn)為對(duì)話你好

  6. robot={

  7. 'perception': {

  8. 'inputText': {

  9. 'text': usersay#用戶詢問內(nèi)容

  10. }

  11. },

  12. 'userInfo': {

  13. 'apiKey': turing_api_key ,

  14. 'userId': 'Dudu'#識(shí)別用戶可隨機(jī)書寫

  15. }

  16. }

  17. response=json.loads(requests.post(TulingUrl,None,robot,headers={'Content-Type':'charset=UTF-8'}).text)

  18. print(response)

  19. if __name__=='__main__':

  20. RobotSpeak('你叫什么名字')

到此位置我們基本可以實(shí)現(xiàn)簡(jiǎn)單的人機(jī)交互功能,即用戶說一句話機(jī)器給出相應(yīng)的答復(fù),但僅僅是文字的輸入輸出似乎滿足不了我們的需求,我們可以在此基礎(chǔ)上擴(kuò)展新的功能,比如讓機(jī)器將反饋的信息以語(yǔ)音的形式得以呈現(xiàn)。

進(jìn)階部分(語(yǔ)音輸出反饋信息):

Python給我們提供了一個(gè)第三方庫(kù)pyttsx,可以實(shí)現(xiàn)文字轉(zhuǎn)換語(yǔ)音的基本功能。

 
  1. import pyttsx3#導(dǎo)入第三方庫(kù)

  2. engine=pyttsx3.init()#初始化engine

  3. rate = engine.getProperty('rate')

  4. engine.setProperty('rate', rate-66)#設(shè)置語(yǔ)速

  5. engine.say('要說的內(nèi)容')

  6. engine.runAndWait()#沒有此句無(wú)聲音

完整聊天機(jī)器人(代碼):

 
  1. from aip import AipSpeech

  2. from pyaudio import PyAudio,paInt16

  3. import requests,json,wave,time,pyttsx3

  4. #百度AI,配置信息

  5. APP_ID = ''#百度ai應(yīng)用id

  6. API_KEY = ''#百度ai應(yīng)用的鍵值

  7. SECRET_KEY = ''

  8. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

  9. #圖靈機(jī)器,配置信息

  10. TulingUrl='http://openapi.tuling123.com/openapi/api/v2'

  11. turing_api_key = ''#圖靈機(jī)器人api_key

  12.  
  13. # 讀取文件

  14. def get_file_content(filePath):

  15. with open(filePath, 'rb') as fp:

  16. return fp.read()

  17.  
  18. #用戶語(yǔ)音輸入

  19. def SaveVoice():

  20. pa=PyAudio()

  21. wf=wave.open(r'T.wav','wb')#打開wave文件

  22. wf.setnchannels(1)#配置聲道數(shù)

  23. wf.setsampwidth(2)# 采樣寬度2bytes

  24. wf.setframerate(16000)#采樣率

  25. stream=pa.open(format=paInt16,channels=wf.getnchannels(),rate=wf.getframerate(),input=True,frames_per_buffer=1024) #打開一個(gè)stream

  26. buff=[]#存儲(chǔ)聲音信息

  27. start=time.time()#開始運(yùn)行時(shí)間戳

  28. print('用戶說:')

  29. while time.time()<start+6:#錄制6秒

  30. buff.append(stream.read(wf.getframerate()))

  31. stream.close()#關(guān)閉stream

  32. pa.terminate()

  33. wf.writeframes(b''.join(buff))

  34. wf.close()#關(guān)閉wave

  35.  
  36. #接受機(jī)器人響應(yīng)

  37. def RobotSpeakText(usersay='你好'):

  38. robot={

  39. 'perception': {

  40. 'inputText': {

  41. 'text': usersay

  42. }

  43. },

  44. 'userInfo': {

  45. 'apiKey': turing_api_key ,

  46. 'userId': 'Dudu'

  47. }

  48. }

  49. response=json.loads(requests.post(TulingUrl,None,robot,headers={'Content-Type':'charset=UTF-8'}).text)

  50. return str(response['results'][0]['values']['text'])

  51.  
  52. #語(yǔ)音發(fā)聲

  53. def RobotVoice(robotsay='我沒聽清,你在說一遍'):

  54. engine=pyttsx3.init()

  55. rate=engine.getProperty('rate')

  56. engine.setProperty('rate',rate-66)

  57. engine.say(robotsay)

  58. engine.runAndWait()

  59.  
  60. #主函數(shù)

  61. def main():

  62. while True:

  63. try:

  64. SaveVoice()

  65. result = client.asr(get_file_content('T.wav'), 'wav', 16000, {'dev_pid': 1536}) # 識(shí)別本地文件

  66. usersay=result['result'][0]

  67. print(usersay)

  68. robotsay=RobotSpeakText(usersay)

  69. print('小嘟嘟說:')

  70. print(robotsay)

  71. RobotVoice(robotsay)

  72. except:#異常處理

  73. break

  74.  
  75. if __name__=='__main__':

  76. main()

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python調(diào)用百度語(yǔ)音識(shí)別REST API
pyaudio:基于pyaudio利用Python編程從電腦端錄制音頻保存到指定文件夾+將錄音上傳服務(wù)器+錄音進(jìn)行識(shí)別并轉(zhuǎn)為文本保存
Python實(shí)現(xiàn)電腦錄音(含音頻基礎(chǔ)知識(shí)講解)
Python人工智能之路 - 第三篇 : PyAudio 實(shí)現(xiàn)錄音 自動(dòng)化交互實(shí)現(xiàn)問答
Python調(diào)用百度API實(shí)現(xiàn)語(yǔ)音識(shí)別(二)
python通過調(diào)用百度api實(shí)現(xiàn)語(yǔ)音識(shí)別(超詳細(xì))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服