python语音识别的第三方库_基于python第三方库,图灵机器人,百度语音识别API的聊天机器人...
1.python库准备[](javascript:void(0)????import waveimport pyaudio录制音频import requests获取百度API的token用import osimport base64import jsonimport win32com.client用于读文字import urllib.requestimport stringimport ra...
1.python库准备
[
](javascript:void(0)😉
import wave
import pyaudio 录制音频
import requests 获取百度API的token用
import os
import base64
import json
import win32com.client 用于读文字
import urllib.request
import string
import random
注意win32com安装我pip安装了好多次,使用python -m pip install pypiwin32,其余模块直接pip安装,使用清华源https://pypi.tuna.tsinghua.edu.cn/simple比较快!
2.需要申请图灵账号以及创建机器人获取他的apikey以及userId
3.生成音频文件名,(也可以不用这个,可以写死文件名直接覆盖)这样可以保存音频文件。
def file_name():
code_str = string.ascii_letters + string.digits
ran_num = ''.join(random.sample(code_str, 6))
r_path = ran_num + '.wav'
return r_path
4.朗读读图灵返回的内容
def read(content):
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak(content)
content为文本内容
也可以使用pyttsx3也可以
5.pyaudio录音
def audio_record(out_file, rec_time):
CHUNK = 1024
FORMAT = pyaudio.paInt16 # 16bit编码格式
CHANNELS = 1 # 单声道
RATE = 16000 # 16000采样频率
p = pyaudio.PyAudio()
# 创建音频流
stream = p.open(format=FORMAT, # 音频流wav格式
channels=CHANNELS, # 单声道
rate=RATE, # 采样率16000
input=True,
frames_per_buffer=CHUNK)
print("Start Recording...")
frames = [] # 录制的音频流
# 录制音频数据
for i in range(0, int(RATE / CHUNK * rec_time)):
data = stream.read(CHUNK)
frames.append(data)
# 录制完成
stream.stop_stream()
stream.close()
p.terminate()
print("Recording Done...")
# 保存音频文件
wf = wave.open(out_file, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
注意采样率一定在16000,否则识别结果很低,甚至识别失败
out_file为文件名,rec_time为录制时间,单位为秒。
6.将音频给百度API,百度返回结果
def discern(name):
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=GbIYm9OLyueeQjoRPP5aD74N&client_secret=wwtWT4Y7e5Vu57bKtBHTKIYM8CVibm7I'
response = requests.get(host)
if response:
taken = response.json()
print(taken)
apiUrl = 'http://vop.baidu.com/server_api'
filename = name # 这是我下载到本地的音频样例文件名
size = os.path.getsize(filename) # 获取本地语音文件尺寸
# filename.seek(0, 0)
file = open(f'{filename}', "rb") # 读取本地语音文件
file1 = file.read()
text = base64.b64encode(file1).decode("utf-8") # 对读取的文件进行base64编码
data = {
"format": "pcm", # 音频格式
"rate": 16000, # 采样率,固定值16000
"dev_pid": 1536, # 普通话
"channel": 1, # 频道,固定值1
"token": taken['access_token'],
"cuid": "00-E0-4C-36-63-94", # 随便一个值就好了,官网推荐是个人电脑的MAC地址
"len": size, # 语音文件的尺寸
"speech": text, # base64编码的语音文件
}
try:
r = requests.post(apiUrl, data=json.dumps(data)).json()
print(r)
print(r.get("result")[0])
tuling(r.get("result")[0])
except Exception as e:
print(e)
百度返回的结果是一个json数组,根据需要自行取舍。
dev_pid可以根据场景不同来改变,参考,
6.将百度返回识别的结果发送给图灵,他返回你对话的结果
def tuling(text_input):
api_url = "http://openapi.tuling123.com/openapi/api/v2"
# text_input = input('我:')
# read(text_input)
req = {
"perception":
{
"inputText":
{
"text": text_input
},
"selfInfo":
{
"location":
{
"city": "保定", #随便写
"province": "莲池区", #随便
"street": "东风路" #随便
}
}
},
"userInfo":
{
"apiKey": "你自己申请",
"userId": "自己"
}
}
# print(req)
# 将字典格式的req编码为utf8
req = json.dumps(req).encode('utf8')
# print(req)
http_post = urllib.request.Request(api_url, data=req, headers={'content-type': 'application/json'})
response = urllib.request.urlopen(http_post)
response_str = response.read().decode('utf8')
# print(response_str)
response_dic = json.loads(response_str)
# print(response_dic)
intent_code = response_dic['intent']['code']
results_text = response_dic['results'][0]['values']['text']
# print('Turing的回答:')
# print('code:' + str(intent_code))
print('机器人:' + results_text)
read(results_text)
text_input为你说话的文本内容
location里的地址自己可以随便写,
如果你问与地名有关的内容时时,它会根据这个地址进行回答,例如问天气。
运行结果:
相关连接:
更多推荐
所有评论(0)