百度API调用(三)——语音识别

python 调用百度语音识别API

  • 一、开通百度语音技术接口服务
  • 二、python实现百度语音识别
    • 1、实现功能
    • 2、代码(已加注释)
  • 最后

一、开通百度语音技术接口服务

基本过程:

1、打开百度ai开放平台 https://ai.baidu.com/

2、打开控制台

3、选择语音技术

4、选择创建应用

5、选择需要的服务,简单填写应用描述即可创建

6、创建完成后可以在应用列表中管理或者删除你所创建的应用

7、需要开启对应服务才可以使用


点击立即领取即可获得免费调用次数(十几万次对于个人学习使用足够了)

二、python实现百度语音识别

实例:(发送已经保存好的或者现录的语音文件然后语音识别)

1、实现功能

录音五秒钟,然后将录音保存到电脑中并将语音识别请求发送给百度语音识别服务器,得到语音识别结果并打印出来

2、代码(已加注释)

#!/usr/bin/env python
import requests
import json
import base64
import pyaudio
import wave
import os
import psutil#首先配置必要的信息
def bat(voice_path):baidu_server = 'https://aip.baidubce.com/oauth/2.0/token?'  #获取token的servergrant_type = 'client_credentials'client_id = '' #API KEYclient_secret = '' #Secret KEY   这里可以自己去百度注册,这里是我的API KEY 和 Secret KEY#合成请求token的urlurl = baidu_server+'grant_type='+grant_type+'&client_id='+client_id+'&client_secret='+client_secret#获取tokenres = requests.get(url).textdata = json.loads(res)  #将json格式转换为字典格式token = data['access_token']#设置音频的属性,采样率,格式等VOICE_RATE = 8000FILE_NAME = voice_path# USER_ID = '16241950' #这里的id随便填填就好啦,我填的自己昵称FILE_TYPE = 'wav'CUID="wate_play"   #用户唯一标识符,用来区分用户,可以修改#读取文件二进制内容f_obj = open(FILE_NAME, 'rb')content = base64.b64encode(f_obj.read())   # 百度语音识别需要base64编码格式speech = content.decode("utf-8")size = os.path.getsize(FILE_NAME)#json封装datas = json.dumps({      #json.dumps将一个Python数据结构转换为JSON ; json.loads将一个JSON编码的字符串转换回一个Python数据结构 'format': FILE_TYPE,'rate': VOICE_RATE,'channel': 1,'cuid': CUID,'token': token,   #上面从百度平台获取的token信息'speech': speech,'len': size,"dev_pid":"1537"})return datas#设置headers和请求地址url
def post(datas):headers = {'Content-Type':'application/json'}#url = 'https://aip.baidubce.com/oauth/2.0/token?'  #技术文档中这个是获取token的urlurl = "http://vop.baidu.com/server_api"   #技术文档中给出的这个是语音识别的服务器接口#用post方法传数据request = requests.post(url, datas, headers)result = json.loads(request.text)print('result:',result)text = result.get("result")if result['err_no'] == 0:return textelse:return "Error"#录音并将录音结果保存到filepath处in_path = C:\voice\voice.wav
def get_audio(filepath):input("回车开始录音 >>>")     #输出提示文本,input接收一个值,转为str,赋值给aaCHUNK = 256                 #定义数据流块(每个数据块儿存放位数,正好为一个字节)FORMAT = pyaudio.paInt16    #量化位数(音量级划分)CHANNELS = 1               # 声道数;声道数:可以是单声道或者是双声道RATE = 8000                # 采样率;采样率:一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHzRECORD_SECONDS = 5          #录音秒数WAVE_OUTPUT_FILENAME = filepath     #wav文件路径p = pyaudio.PyAudio()               #实例化stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("*"*10, "开始录音:请在5秒内输入语音")frames = []                                                 #定义一个列表for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):      #循环,采样率(8000 / 256) * 5 = (8000*5) / 256data = stream.read(CHUNK)                               #读取chunk个字节 保存到data中frames.append(data)                                     #向列表frames中添加数据data# print(frames)print("*" * 10, "录音结束\n")stream.stop_stream()stream.close()          #关闭p.terminate()           #终结wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')                  #打开wav文件创建一个音频对象wf,开始写WAV文件wf.setnchannels(CHANNELS)                                   #配置声道数wf.setsampwidth(p.get_sample_size(FORMAT))                  #配置量化位数wf.setframerate(RATE)                                       #配置采样率wf.writeframes(b''.join(frames))                            #转换为二进制数据写入文件wf.close()              #关闭returndef check_disk():list_drive = psutil.disk_partitions()  # 找出本地磁盘列表,保存的是结构体对象list_disk = []for drive in list_drive:list_disk.append(drive.device)return list_diskif __name__ == '__main__':list_disk = check_disk() # 检索本地磁盘dirname_path = os.path.join(list_disk[0], "voice") # 设置语音文件存放路径if not os.path.exists(dirname_path):# 如果不存在该文件就创建一个该文件夹os.makedirs(dirname_path)filename = "voice.wav"  # 定义语音文件名in_path = os.path.join(dirname_path, filename)  # 得到路径为:in_path = C:\voice\voice.wav#print('in_path:',in_path)   #录音文件保存在in_path: C:\voice\voice.wavget_audio(in_path) # 录音datas = bat(in_path) # 封装百度语音识别需要的配置信息,返回请求头res = post(datas) # 连接百度语音识别接口,得到识别结果#print("识别结果:",res)print("识别结果:",res[0])

最后

本文链接:https://my.lmcjl.com/post/11156.html

展开阅读全文

4 评论

留下您的评论.