调用百度云API实现语音识别

一、在云平台创建语音技术应用

(1) 点击百度AI平台短语音识别https://ai.baidu.com/tech/speech/asr,登录百度云账号。
(2) 新用户注册完百度智能云平台后,需要在“语音技术—概览”页面领取语音识别的免费额度,否则后续功能将无法正常使用。在“概述”里面点击“去领取
领取免费语音识别额度
(3) 单击“语音识别”——“领取免费资源”,进入领取免费资源页面;填写相应的信息,接口名称勾选“全部”。弹出领取资源窗口上显示“恭喜您,领取成功”表示领取成功。
领取成功界面
(4) 返回上一页,点击“应用列表”,然后“创建列表”,填写相关的信息,完成语音技术应用的创建。创建完毕后“查看创建列表”(或者重新回到“应用列表”),可以看到云平台为用户生成一个用户信息,包括AppID、API Key和Secret Key
应用详情
参考技术文档:短语音识别https://ai.baidu.com/ai-doc/SPEECH/Vk38lxily

二、完成的语音识别参考程序

注意:下面程序中的智能密钥我已经隐藏掉了,需要自行去百度云平台申领

import wave
from pyaudio import PyAudio,paInt16  #导入音频处理库Pyaudio,没有的话要pip 安装
from aip import AipSpeech

# 设置采样参数
NUM_SAMPLES = 2000
# 默认录音4s
TIME = 4

# 百度智能云平台语音技能密钥
# 请输入您的BaiduAPP_ID,下面自行调用应用哦~
BaiduAPP_ID = 'xxxxxxx'  
# 请输入您的BaiduAPI_KEY      
BaiduAPI_KEY = 'xxxxxxxxxxxxxxxxxxx'
# 请输入您的SECRET_KEY      
SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
client = AipSpeech(BaiduAPP_ID, BaiduAPI_KEY, SECRET_KEY)

# 保存录音文件
def save_wave_file(filename,data):  
    wf = wave.open(filename,'wb')  # 打开WAV文档
    wf.setnchannels(1)  #配置声道数            
    wf.setsampwidth(2)  #配置量化位数              
    wf.setframerate(16000) #采样频率         
    wf.writeframes(b"".join(data))  # 将wav_data转换为二进制数据写入文件
    wf.close()

# 定义录音函数
def record():
    print('Start recording.')
    # 实例化PyAudio对象,开启声音输入
    pa = PyAudio()  
    # 打开输入流并设置音频采样参数 1 channel 16K framerate 
    stream = pa.open(format = paInt16,
                        channels = 1,
                        rate = 16000,
                        input = True,
                        frames_per_buffer = NUM_SAMPLES)
    # 录音缓存数组
    audioBuffer = []   
    # 循环采集音频 默认录制4s
    count = 0
    while count<TIME*10:
        # 一次性录音采样字节的大小
        string_audio_data = stream.read(NUM_SAMPLES)  
        audioBuffer.append(string_audio_data)
        count +=1
        # 加逗号不换行输出
        print('.', end='')  
    print('')
    print('End recording.')
    # 保存录制的语音文件到audio.wav中并关闭输入流
    save_wave_file('./audio.wav',audioBuffer)
    stream.close()

# 语音识别函数
def asr_updata():
    with open('./audio.wav', 'rb') as f:
        audio_data = f.read()
    result = client.asr(audio_data, 
                        'wav', 16000, {
    
       # 采样频率16K
                        'dev_pid': 1537, 
                                          # 1536 普通话
                                          # 1537 普通话(纯中文识别)
                                          # 1737 英语
                                          # 1637 粤语
                                          # 1837 四川话
                     })
    print(result)  #打印出来,报错的时候可以查看代码
    val = 'result' in result.keys()
    print("val:",val)
    if val == True:   
        result_text = result["result"][0]
    else:
        result_text = '语音未识别'
    return result_text

if __name__ == '__main__':
    record()  #调用录音函数
    result_text = asr_updata()
    print(result_text) 

猜你喜欢

转载自blog.csdn.net/lyx4949/article/details/125644232