今天开补迟到的工作室大作业…
主要介绍百度API调用的方法,以语音识别为例
1)前往AI开放平台创建应用
首先,先进入百度API开发的网址https://ai.baidu.com/
进入后点击右上角控制台,注册自己的账号
注册完毕后在产品服务—人工智能中找到自己需要的API,我们以语音识别为例,点击语音技术
之后点击创建应用,进行必要的信息填写
创建完毕后百度会给你一个应用列表,使用这里的AppID,API Key及Secret Key便可以进行API的调用啦!调用的注意事项及具体操作在后文进行介绍
2)代码及注意事项
我们首先要导入baidu-aip这个包
pip install baidu-aip
对接口进行请求
from aip import AipSpeech
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
'dev_pid': 1537,
})
这里根据情况需要调整参数,如文件名,文件类型(pcm wav或amr);rate采样率,固定为16000或8000;dev_pid参数对应下表
一定要注意调用时音频有固定的格式,文件类型必须为pcm wav或amr,16位深,时长30s内,16000或8000的采样率,单声道,否则会报错或识别不准确
调用接口
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.asr(get_file_content('test.wav'), 'wav',16000,{'dev_pid': 1537,})
这里的APP_ID, API_KEY, SECRET_KEY分别对应上文你自己的AppID,API Key及Secret Key
3)python调用API
1.识别本地文件
识别本地文件时使用上述代码基本就可以了,识别不准确一般是由于文件格式未完全按照上述要求所致
print(result)
我们看看result的具体输出结果
返回值是一个字典,result中的值即为识别出的结果
2.录音识别
本地文件由于文件格式蛮难改的,导致结果不准确,我们来试一下录音识别,
在网上嫖了个录音的代码,将参数改成我们需要的参数
直接将整个源码附下
import wave
import pyaudio
from aip import AipSpeech
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
CHUNK = 1024
FORMAT = pyaudio.paInt16 # 16位深
CHANNELS = 1 #1是单声道,2是双声道。
RATE = 16000 # 采样率,调用API一般为8000或16000
RECORD_SECONDS = 10 # 录制时间10s
def save_wave_file(pa, filepath, data):
wf = wave.open(filepath, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(pa.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b"".join(data))
wf.close()
def get_audio(filepath):
isstart = input("是否开始录音?(0为退出 1为开始)")
if isstart == "1":
pa = pyaudio.PyAudio()
stream = pa.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("*" * 10, "开始录音:请在10秒内输入语音")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK) # 读取chunk个字节 保存到data中
frames.append(data) # 向列表frames中添加数据data
print("*" * 10, "录音结束\n")
stream.stop_stream()
stream.close() # 停止数据流
pa.terminate() # 关闭PyAudio
#写入录音文件
save_wave_file(pa, filepath, frames)
elif isstart == "0":
exit()
else:
print("无效输入,请重新选择")
get_audio(filepath)
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
if __name__ == '__main__':
filepath = 'test.wav'
get_audio(filepath)
print('over!!!')
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.asr(get_file_content('audio3.wav'), 'wav',16000,{'dev_pid': 1537,})
print(result)
嗯嗯,结果还是满准确的
4)报错信息
调用失败报错时会产生一些信息,可对应下表进行查错
参考文档