注意事项

本文参考链接: http://dy.163.com/v2/article/detail/DKQLR7RK0517ACP7.html.
百度智能云的官方文档是有JAVA SDK文档的,如果你想用Python来调用百度接口实现音频文件转写的话,那你就来对了。

操作系统:Windows
Python:3.6
注意事项:
语音识别要求支持的语音格式
原始 PCM 的录音参数必须符合 8k/16k 采样率、16bit 位深、单声道,支持的压缩格式有:pcm(不压缩)、wav、opus、amr、x-flac。
简单说,语音参数必需要 8k/16k 采样率、16bit 位深、单声道,不然会出现内容和文字不相符的情况。

APP_ID, API_KEY, SECRET_KEY的获取

既然要用人家的服务,肯定会有些限制,不过这些都是可以理解的。首先进入百度AI开放平台,通过百度云或者百度其他账号登录进入控制台,然后按照如下流程即可获得你想要的东西:

1、页面右上方“控制台”点击进入,登录百度账号,进入百度云管理后台页面。
2、左侧导航栏上方,依次选择 产品服务->人工智能->智能呼叫中心,进入应用“概览”页面。
3、服务申请。点击“创建应用”,“接口选择”已默认勾选完成,如无其他需求,无需勾选,完成其他资料后,点击最下方“立即创建”按钮。
4、应用成功则页面显示“创建完毕”,点击”返回应用列表”, 查看新创建应用详情,记录AppID,API Key,Secret Key。

话不多说,直接上代码了

import json

import requests
import time

APP_ID = '********' # 你申请的APP_ID
API_KEY = '***************' # 你申请的API_KEY
SECRET_KEY = '*****************' # # 你申请的SECRET_KEY

def get_access_token(cltid, srt_key): # 获取访问令牌
    # oauth_url = 'https://openapi.baidu.com/oauth/2.0/token'
    oauth_url = 'https://aip.baidubce.com/oauth/2.0/token'
    args_data = {'grant_type': 'client_credentials',
                 'client_id': cltid,
                 'client_secret': srt_key,
                 }
    cnt_type = {'Content-Type': 'application/json; charset=UTF-8'}
    resp = requests.post(oauth_url, data=args_data, headers=cnt_type)
    print("get baidu center info...")
    if resp.status_code != 200:
        print("have http error", resp.status_code)
        return None
    cnt = resp.json()  # 获取的内容变为字典
    cnt['expires_in'] += int(time.time())  # 将有效期时间记录
    with open('baidu.ck', 'w', encoding='utf-8') as fp:
        res = {'access_token': cnt['access_token'], 'expires_in': cnt['expires_in']}
        json.dump(res, fp)
    return cnt['access_token']

def upload_audio_file(access_token): # 上传你要识别的音频文件,得按照人家规定的参数和格式
    # speed_url = 'http://vop.baidu.com/server_api'
    speed_url = 'https://aip.baidubce.com/rpc/2.0/session/offline/upload/asr?access_token={%s}' % access_token
    # args_data = {'format': 'pcm',
    #              'rate': 8000,
    #              'channel': 1,
    #              'cuid': 'rocky_shop',  # 应用名称,可随意取名
    #              'token': atoken,
    #              }
    args_data = {
        "appId": APP_ID,
        "companyName": "百度", # 这个可以修改
        "callId": "20e59200-57da-423e-b613-6a8ce126d0a7", # 这个也可以改
        "agentFileUrl": "http://***", # 你语音文件的url,要公网可访问的地址,你写上之后可以自己先下载试一下
        "suffix": "wav",
    }
    header = {'Content-Type': 'application/json'}
    resp = requests.post(speed_url, data=json.dumps(args_data), headers=header)
    info = resp.json()
    return info

def get_text_from_url(access_token): # 获取识别结果。免费用户是整点识别,上传之后得等待...
    datas = {
        "category": "OFFLINE_ASR_RESULT",
        "paras": {
            "appId": APP_ID,  # 百度云appId,必选
            "callId": "20e59200-57da-423e-b613-6a8ce126d0a7"  # 用户上传某一通的callId,必选
        }
    }
    data_url = 'https://aip.baidubce.com/rpc/2.0/search/info?access_token={%s}' % access_token
    header = {'Content-Type': 'application/json'}
    response = requests.post(data_url, data=json.dumps(datas), headers=header)
    information = response.json()
    return information

# 结果解析的东西自己随便写,如果提前不太清楚返回数据的格式,可以先整个都print出来,然后做相应的解析。至于识别结果的准确性,这个不好说...
access_token = get_access_token(API_KEY, SECRET_KEY)
print(access_token)
info = upload_audio_file(access_token)
print(info)
result = get_text_from_url(access_token)
print(result)
# tmp = result['data']['content']
# print(tmp)
# tmp_list = eval(tmp)
# for x in tmp_list:
#     print(x['sentence'])

上传成功以后就慢慢等…

运行结果示意图

原文网址:https://www.voorp.com/a/Python3%E4%BD%BF%E7%94%A8%E7%99%BE%E5%BA%A6%E4%BA%91API%E6%8E%A5%E5%8F%A3%E5%AE%9E%E7%8E%B0%E9%9F%B3%E9%A2%91%E6%96%87%E4%BB%B6%E8%BD%AC%E5%86%99TomorrowAnCSDN%E5%8D%9A%E5%AE%A2

发表评论