Python?實現(xiàn)簡單智能聊天機器人
簡要說明:
最近兩天需要做一個python的小程序, 就是實現(xiàn)人與智能機器人(智能對話接口)的對話功能,目前剛剛測試了一下可以實現(xiàn), 就是能夠實現(xiàn)個人與機器的智能對話(語音交流)。
總體的思路:
大家可以設想一下, 如果要實現(xiàn)人與機器的智能對話, 肯定要有以下幾個步驟:
- 計算機接收用戶的語音輸入
- 將用戶輸入的語音輸入轉化為文本信息
- 調用智能對話接口, 發(fā)送請求文本信息, 獲取接口返回的智能回答文本信息
- 將回答文本信息轉化為語音格式輸出
這里可以安裝很多現(xiàn)成的庫函數(shù), 輔助我們系統(tǒng)的實現(xiàn)。
需要準備的環(huán)境
以下是需要安裝的一些python依賴包
- pip install pyaudio 安裝pyaudio依賴包, 用于錄音、生成wav文件
- pip install baidu-aip 安裝百度AI的sdk, 調用語音技術接口將音頻識別為文本數(shù)據(jù)返回
- pip install pyttsx3 安裝pyttsx3依賴包, 將文本信息以音頻的格式播放出來
接下來我會逐步實現(xiàn)以上每個功能,最后再組合起來。
接收用戶的語音輸入,并將其存為音頻文件
import time import wave from pyaudio import PyAudio, paInt16 framerate = 16000 # 采樣率 num_samples = 2000 # 采樣點 channels = 1 # 聲道 sampwidth = 2 # 采樣寬度2bytes FILEPATH = '../voices/myvoices.wav' #該文件目錄要存在 #用于接收用戶的語音輸入, 并生成wav音頻文件(wav、pcm、mp3的區(qū)別可詳情百度) class Speak(): #將音頻數(shù)據(jù)保存到wav文件之中 def save_wave_file(self, filepath, data): wf = wave.open(filepath, 'wb') wf.setnchannels(channels) wf.setsampwidth(sampwidth) wf.setframerate(framerate) wf.writeframes(b''.join(data)) wf.close() # 進行語音錄制工作 def my_record(self): pa = PyAudio() # 打開一個新的音頻stream stream = pa.open(format=paInt16, channels=channels, rate=framerate, input=True, frames_per_buffer=num_samples) my_buf = [] # 存放錄音數(shù)據(jù) t = time.time() print('正在講話...') while time.time() < t + 5: # 設置錄音時間(秒) # 循環(huán)read,每次read 2000frames string_audio_data = stream.read(num_samples) my_buf.append(string_audio_data) print('講話結束') self.save_wave_file(FILEPATH, my_buf) #保存下錄音數(shù)據(jù) ????????stream.close()
調用百度AI接口, 識別音頻文件并以文本信息返回
之前使用過好幾次百度AI的接口,我的畢業(yè)設計<在線課堂學生異常行為與分析>也是使用到了百度的智能平臺,個人調試的話有很多免費產(chǎn)品,總體來說百度在人工智能領域做得還是相當不錯的。
在調用百度AI接口之前,需要首先進入百度AI開放平臺,搜索語音識別。
點擊立即使用,沒有賬號的話可以先創(chuàng)建一個賬號,然后領取免費的資源使用
我之前已經(jīng)創(chuàng)建1個了, 假設再次點擊創(chuàng)建
系統(tǒng)會自動勾選上語音識別接口,直接創(chuàng)建應用即可,之后會有 AppID、 API Key、Secret Key, 之后調用百度接口直接調用即可。
可以查看接口文檔,進行具體的接口操作
前奏準備好, 便可以直接調用接口進行語音識別
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '25990397' API_KEY = 'iS91n0uEOujkMIlsOTLxiVOc' SECRET_KEY = '' #此處填寫自己的密鑰 """調用接口, 調用BaiDu AI 接口進行錄音、語音識別""" client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) class ReadWav(): # 讀取文件 def get_file_content(self, filePath): with open(filePath, 'rb') as fp: return fp.read() def predict(self): # 調用百度AI的接口, 識別本地文件 return client.asr(self.get_file_content('../voices/myvoices.wav'), 'wav', 16000, { 'dev_pid': 1537, }) readWav = ReadWav() #實例化方法 print(readWav.predict())??????#調用識別方法,?并輸出
執(zhí)行結果 ( 音頻文件存的錄音是: 你叫什么名字呀?)
{'corpus_no': '7087884083428433929', 'err_msg': 'success.', 'err_no': 0, 'result': ['你叫什么名字呀?'], 'sn': '255158586831650276613'}
請求智能機器人, 發(fā)送文本信息, 返回智能聊天內容
之前我們老師推薦我使用圖靈機器人的智能聊天,后來發(fā)現(xiàn)認證一直無法通過,且需要付費。
后來發(fā)現(xiàn)了一個免費、無需注冊、只需要發(fā)送get請求就可實現(xiàn)聊天的青云客智能機器人,直接調用接口即可。
代碼如下:
def talkWithRobot(msg): url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg)) html = requests.get(url) return html.json()["content"] print(talkWithRobot("你好呀!"))
輸出:
喲~ 都好都好
將回答信息轉化為語音文件并輸出
此處需要導入pyttsx3包,具體代碼如下:????
import pyttsx3 class RobotSay(): def __init__(self): # 初始化語音 self.engine = pyttsx3.init() # 初始化語音庫 # 設置語速 self.rate = self.engine.getProperty('rate') self.engine.setProperty('rate', self.rate - 50) def say(self, msg): # 輸出語音 self.engine.say(msg) # 合成語音 self.engine.runAndWait() robotSay = RobotSay() robotSay.say("你好呀")??????????#會講出????~你好呀(女聲) 復制代碼
組合成為自動聊天機器人(它很硬氣)
代碼如下:
def talkWithRobot(msg): url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg)) html = requests.get(url) return html.json()["content"] robotSay = RobotSay() speak = Speak() readTalk = ReadWav() while True: speak.my_record() #錄音 text = readTalk.predict()['result'][0] #調用百度AI接口, 將錄音轉化為文本信息 print("本人說:", text) #輸出文本信息 response_dialogue = talkWithRobot(text) #調用青云客機器人回答文本信息并返回 print("青云客說:", response_dialogue) #輸出回答文本信息 ????robotSay.say(response_dialogue)?????????????????#播放回答信息
運行結果(發(fā)現(xiàn)它很硬氣)
"""
正在講話...
講話結束...
本人說: 你好呀。
青云客說: 喲~ 都好都好
正在講話...
講話結束...
本人說: 你叫什么名字呀?
青云客說: 我是小美人菲菲呀~
正在講話...
講話結束...
本人說: 哇,那你多美呀。
青云客說: 你似有問題多啲囉!
正在講話...
講話結束...
本人說: 我好看嗎?
青云客說: 你真是個地道的美人啊。就是說你只有在地道里才算美人,因為地道里沒燈
正在講話...
講話結束...
本人說: 你可真是個小可愛呀。
青云客說: 呀,你怎么知道。。。我就是啊。。
正在講話...
講話結束...
本人說: 不和你說了。
青云客說: 不說拉倒
"""
到此這篇關于Python 實現(xiàn)簡單智能聊天機器人的文章就介紹到這了,更多相關Python 實現(xiàn)聊天機器人內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?pycharm提交代碼遇到?jīng)_突解決方法
這篇文章主要介紹了Python?pycharm提交代碼遇到?jīng)_突解決方法,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08Tensorflow矩陣運算實例(矩陣相乘,點乘,行/列累加)
今天小編就為大家分享一篇Tensorflow矩陣運算實例(矩陣相乘,點乘,行/列累加),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02如何使用 Python 讀取文件和照片的創(chuàng)建日期
這篇文章主要介紹了如何使用 Python 讀取文件和照片的創(chuàng)建日期,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Python Pycharm虛擬下百度飛漿PaddleX安裝報錯問題及處理方法(親測100%有效)
最近很多朋友給小編留言在安裝PaddleX的時候總是出現(xiàn)各種奇葩問題,不知道該怎么處理,今天小編通過本文給大家介紹下Python Pycharm虛擬下百度飛漿PaddleX安裝報錯問題及處理方法,真的有效,遇到同樣問題的朋友快來參考下吧2021-05-05Python編程實現(xiàn)刪除VC臨時文件及Debug目錄的方法
這篇文章主要介紹了Python編程實現(xiàn)刪除VC臨時文件及Debug目錄的方法,涉及Python針對文件與目錄的遍歷、刪除等相關操作技巧,需要的朋友可以參考下2017-03-03Python 實現(xiàn)Image和Ndarray互相轉換
今天小編就為大家分享一篇Python 實現(xiàn)Image和Ndarray互相轉換,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02