python 實(shí)現(xiàn)語音聊天機(jī)器人的示例代碼
前言
在不遠(yuǎn)的將來,實(shí)現(xiàn)一定程度上的語音支持將成為日??萍嫉幕疽?,整合了語音識(shí)別的python程序提供了其他技術(shù)無法比擬的交互性和可訪問性。最重要的是,在python程序中實(shí)現(xiàn)語音識(shí)別非常簡(jiǎn)單。整個(gè)代碼實(shí)現(xiàn)下來還不到150行。
原理簡(jiǎn)介
許多現(xiàn)代語音識(shí)別系統(tǒng)會(huì)在HMM識(shí)別之前使用神經(jīng)網(wǎng)絡(luò),通過特征變換和降維技術(shù)來簡(jiǎn)化語音信號(hào),也可以使用語音活動(dòng)檢測(cè)器將音頻信號(hào)減少到可能包含語音的部分。
幸運(yùn)的是,對(duì)于python來講,一些語音識(shí)別的服務(wù)可通過API在線使用,且其中大部分也提供了Python SDK。
本文做的聊天機(jī)器人是基于百度語音識(shí)別和圖靈機(jī)器人二者之上共同實(shí)現(xiàn)的。大致的流程如下圖:

原理流程圖.PNG
這里需要用的模塊庫(kù)有 requests、time、datetime、pyaudio、wave、aipspeech 等。
話不多說,上代碼:
##@氫立方 2018.0911
import requests
import time
import pygame
from datetime import datetime
from aip import AipSpeech
from pyaudio import PyAudio,paInt16
import wave
import os
framerate=8000
NUM_SAMPLES=2000
channels=1
sampwidth=2
TIME=2
def save_wave_file(filename,data):
'''save the date to the wavfile'''
wf=wave.open(filename,'wb')
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b"".join(data))
wf.close()
def my_record():
pa=PyAudio()
stream=pa.open(format = paInt16,channels=1,
rate=framerate,input=True,
frames_per_buffer=NUM_SAMPLES)
my_buf=[]
count=0
while count<TIME*6:#控制錄音時(shí)間
string_audio_data = stream.read(NUM_SAMPLES)
my_buf.append(string_audio_data)
count+=1
print('.')
save_wave_file('0001.wav',my_buf)
stream.close()
##def play():
## wf=wave.open(r"D:/41125.mp3",'rb')
## p=PyAudio()
## stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=
## wf.getnchannels(),rate=wf.getframerate(),output=True)
## while True:
## data=wf.readframes(chunk)
## if data=="":break
## stream.write(data)
## stream.close()
## p.terminate()
##
這里大家需要改成自己的ID和KEY
APP_ID = '11****843'
API_KEY = '3Mnv***8**88******GbXa'
SECRET_KEY = '147***8*88****1227684'
aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def getText(url):
text = requests.post(url).json()
return text['text']
##
##key = '6ddc57c5761a4c62a30ea840e5ae163f'
#api = 'http://www.tuling123.com/openapi/api?key=' + key +'&info ='
key = '8b005db5f57556fb96dfd98fbccfab84'
api = 'http://www.tuling123.com/openapi/api?key=' + key + '&info='
##
while True:
## info = input("我說\n")
## chunk=2014
my_record()
print("錄音完成")
def get_file_content(filePath):
with open(filePath,'rb') as fp:
return fp.read()
a = aipSpeech.asr(get_file_content('0001.wav '),'wav',8000,{})
print(a)
b = str(a['result'])
info = b
url = api + info
#print(url)
text_01 = getText(url)
print("機(jī)器人回\n",text_01)
now = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")
filename_01 = now + ".mp3"
result = aipSpeech.synthesis( text_01,'zh',1,{'vol': 5,'per' : 2} )
if not isinstance(result, dict):
with open(filename_01, 'wb') as f:
f.write(result)
print("--------------------------------------")
time.sleep(1)
pygame.mixer.init()
print("語音1")
file= filename_01
track = pygame.mixer.music.load(file)
pygame.mixer.music.play()
time.sleep(15)
pygame.mixer.music.stop()
pygame.quit()
運(yùn)行結(jié)果如下:
小編說的是:今天看了電視劇。機(jī)器人回復(fù)的是:看了有沒有開心點(diǎn)
在某種意義上來說,語境還是符合常理的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 教你用Python創(chuàng)建微信聊天機(jī)器人
- python操作微信自動(dòng)發(fā)消息的實(shí)現(xiàn)(微信聊天機(jī)器人)
- 快速實(shí)現(xiàn)基于Python的微信聊天機(jī)器人示例代碼
- Python實(shí)現(xiàn)聊天機(jī)器人的示例代碼
- python使用itchat庫(kù)實(shí)現(xiàn)微信機(jī)器人(好友聊天、群聊天)
- 基于python的itchat庫(kù)實(shí)現(xiàn)微信聊天機(jī)器人(推薦)
- Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人
- 使用python接入微信聊天機(jī)器人
- Python調(diào)用兩個(gè)機(jī)器人聊天的實(shí)戰(zhàn)
相關(guān)文章
Python Pygame實(shí)現(xiàn)落球游戲詳解
本文主要介紹了利用Pygame實(shí)現(xiàn)落球小游戲,即屏幕上落下一個(gè)球,通過鼠標(biāo)移動(dòng),地下的木塊如果接上則加分,否則就減去一命,三條命用完則游戲結(jié)束。感興趣的可以學(xué)習(xí)2022-01-01
解決pytorch 交叉熵?fù)p失輸出為負(fù)數(shù)的問題
這篇文章主要介紹了解決pytorch 交叉熵?fù)p失輸出為負(fù)數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
使用BeautifulSoup爬蟲程序獲取百度搜索結(jié)果的標(biāo)題和url示例
這篇文章主要介紹了使用BeautifulSoup編寫了一段爬蟲程序獲取百度搜索結(jié)果的標(biāo)題和url的示例,大家參考使用吧2014-01-01
深入了解Python中Pytest Markers的使用方法
從這篇開始,逐一解決fixture是啥,mark是啥,參數(shù)request是啥,鉤子函數(shù)是啥,parametrize參數(shù)化是啥,這些問題,本片先介紹一下mark是啥,以及如何使用2023-09-09
Python基于csv模塊實(shí)現(xiàn)讀取與寫入csv數(shù)據(jù)的方法
這篇文章主要介紹了Python基于csv模塊實(shí)現(xiàn)讀取與寫入csv數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python使用csv模塊針對(duì)csv文件的讀取與寫入相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python中json模塊load/loads方法實(shí)戰(zhàn)以及參數(shù)詳解
經(jīng)常在Python中對(duì)JSON格式的文件進(jìn)行操作,今天對(duì)這些操作做一個(gè)總結(jié),下面這篇文章主要給大家介紹了關(guān)于Python中json模塊load/loads方法實(shí)戰(zhàn)以及參數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
python base64圖片互轉(zhuǎn),解決base64字符串轉(zhuǎn)PIL圖片對(duì)象報(bào)錯(cuò):binascii.Error:
在Base64編碼中,若字符串長(zhǎng)度不是4的倍數(shù),需在末尾添加等號(hào)作為填充,不符合此規(guī)則會(huì)導(dǎo)致在轉(zhuǎn)換為圖片時(shí)出現(xiàn)binascii.Error:Incorrectpadding錯(cuò)誤,正確的填充確保編碼后的字符串可以正確轉(zhuǎn)換成圖片,避免轉(zhuǎn)換錯(cuò)誤2024-09-09

