使⽤百度API 实现语⾳转⽂字
1.在百度云创建⼀个语⾳产品
在->产品->⼈⼯智能->语⾳技术(选择任何⼀个创建⼀个功能包)也可参考
创建完成之后你将在你的全局,产品服务中看到⾃⼰的语⾳技术其中包括1. 应⽤名称2. AppID 3. API Key 4. Secret Key
5. 还有创建时间·····
其中AppId、API Key、Secret Key都很关键这是,在后⾯接⼊百度API的凭证,我将在后⾯标注出来。
2.参考百度官⽅⽂档
1)语⾳转⽂字(即语⾳识别)的功能实现
⾸先,语⾳识别对⾳频格式及时长有⼀定要求,可使⽤开源的⾳频格式转换及VAD切分⼯具。便于进⾏⾳频处理。拼⾳相似度⼯具可以通过⽐较拼⾳相似度,解决同⾳字问题。
⽬前,SDK调⽤使⽤http接⼝,需要上传完整⽂件。根据接⼝内容:1. ⽀持的语⾳格式
原始 PCM 的录⾳参数必须符合 16k 采样率、16bit 位深、单声道,⽀持的格式有:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)
2. ⽀持的语⾳时长上限为60s,请不要超过这个长度,否则会返回错误。
1、安装语⾳识别 Python SDK
如果已安装pip ,执⾏pip install baidu-aip 即可。
如果已安装setuptools ,执⾏python setup.py install 即可。
2、使⽤百度接⼝:
向远程服务上传整段语⾳进⾏识别参考⽂档参数:
#⽂档⽰例代码:# 读取⽂件
def get_file_content(filePath):    with open(filePath, 'rb') as fp:        ad()# 识别本地⽂件
client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {    'dev_pid': 1536,})
12345678910
1. speech Buffer 建⽴包含语⾳内容的Buffer对象, 语⾳⽂件的格式,pcm 或者 wav 或者 amr。不区分⼤⼩写
2. format String 语⾳⽂件的格式,pcm 或者 wav 或者 amr。不区分⼤⼩写。推荐pcm⽂件
3. rate int 采样率,16000,固定值
4. cuid String ⽤户唯⼀标识,⽤来区分⽤户,填写机器 MAC 地址或 IMEI 码,长度为60以内
5. dev_pid Int 不填写lan参数⽣效,都不填写,默认1537(普通话 输⼊法模型),dev_pid参数见本节开头的表格
dev_pid参数列表
dev_pid语⾔模型是否有标点备注1536普通话(⽀持简单的英⽂识别)搜索模型⽆标点⽀持⾃定义词库1537普通话(纯中⽂识别)输⼊法模型有标点⽀持⾃定义词库1737英语⽆标点不⽀持⾃定义词库1637粤语有标点不⽀持⾃定义词库1837四川话有标点不⽀持⾃定义词库1936普通话远场远场模型有标点不⽀持成功返回样例:
错误信息参考:
错误码⽤户输
⼊/服
务端
含义⼀般解决⽅法
3300⽤户输
⼊错误
输⼊参数不正
请仔细核对⽂档及参照demo,核对输⼊参数
3301⽤户输
⼊错误
⾳频质量过差请上传清晰的⾳频
3302⽤户输
⼊错误
鉴权失败
token字段校验失败。请使⽤正确的API_KEY 和 SECRET_KEY⽣成。或QPS、调⽤量超出限额。或⾳频采样率不正
确(可尝试更换为16k采样率)。
3303服务端
问题
语⾳服务器后
端问题
请将api返回结果反馈⾄论坛或者QQ
3304⽤户请
求超限
⽤户的请求
QPS超限
请降低识别api请求频率 (qps以appId计算,移动端如果共⽤则累计)
3305⽤户请
求超限
⽤户的⽇
pv(⽇请求
量)超限
请“申请提⾼配额”,如果暂未通过,请降低⽇请求量
3307服务端
问题
语⾳服务器后
端识别出错问
⽬前请确保16000的采样率⾳频时长低于30s。如果仍有问题,请将api返回结果反馈⾄论坛或者QQ
3308⽤户输
⼊错误
⾳频过长⾳频时长不超过60s,请将⾳频时长截取为60s以下
3309
⽤户输
⼊错误
模块建房厂家
⾳频数据问题
服务端⽆法将⾳频转为pcm格式,可能是长度问题,⾳频格式问题等。 请将输⼊的⾳频时长截取为60s以下,并核对
下⾳频的编码,是否是16K, 16bits,单声道。⽤户输输⼊的⾳频⽂语⾳⽂件共有3种输⼊⽅式: json ⾥的speech 参数(base64后); 直接post ⼆进制数据,及callback参数⾥{"corpus_no":"6798493061260544840","err_msg":"success.",
"err_no":0,
"result":["百度是⽠⽪。"],"sn":"666502245331582897515"}
1 2 3
3310⼊错误
件过⼤url。 分别对应三种情况:json超过10M;直接post的语⾳⽂件超过10M;callback⾥回调url的⾳频⽂件超过10M
3311
⽤户输⼊错误
采样率rate参数不在选项⾥
⽬前rate参数仅提供16000,填写4000即会有此错误
3312
⽤户输⼊错误
⾳频格式format参数不
在选项⾥
⽬前格式仅仅⽀持pcm,wav或amr,如填写mp3即会有此错误
错误码⽤户输⼊/服务端含义⼀般解决⽅法
⼀般问题均在此表格⾥。下⾯贴出代码已经我的测试结果:# coding=utf-8import sys import json import base64import time
恒压供水系统plc程序
IS_PY3 = sys.version_info.major == 3if IS_PY3:
quest import urlopen    quest import Request    import URLError    from urllib.parse import urlencode    timer = time.perf_counter else:
from urllib2 import urlopen    from urllib2 import Request    from urllib2 import URLError    from urllib import urlencode    if sys.platform == "win32":        timer = time.clock    else:
# On most other platforms the best timer is time.time()        timer = time.time
API_KEY = 'Z98pRtfNVQOGheA77PdbqSli'
SECRET_KEY = 'DMKRQo8uTuSbhtb5gamaM4bMZGNrSQGG'# 需要识别的⽂件
AUDIO_FILE = 'baidu.pcm'  # 只⽀持 pcm/wav/amr 格式,极速版额外⽀持m4a 格式# ⽂件格式
FORMAT = AUDIO_FILE[-3:]  # ⽂件后缀只⽀持 pcm/wav/amr 格式,极速版额外⽀持m4a 格式CUID = '123456PYTHON'# 采样率
RATE = 16000  # 固定值# 普通版
DEV_PID = 1537  # 1537 表⽰识别普通话,使⽤输⼊法模型。1536表⽰识别普通话,使⽤搜索模型。根据⽂档填写PID ,选择语⾔及识别模型ASR_URL = 'vop.baidu/server_api'
SCOPE = 'audio_voice_assistant_get'  # 有此scope 表⽰有asr 能⼒,没有请在⽹页⾥勾选,⾮常旧的应⽤可能没有
#测试⾃训练平台需要打开以下信息, ⾃训练平台模型上线后,您会看见 第⼆步:“”获取专属模型参数pid:8001,modelid:1234”,按照这个信息获取 dev_pid=8# DEV_PID = 8001 ;  # LM_ID = 1234 ;
# 极速版 打开注释的话请填写⾃⼰申请的appkey appSecret ,并在⽹页中开通极速版(开通后可能会收费)# DEV_PID = 80001
# ASR_URL = 'vop.baidu/pro_api'
十八岁ppt免费模板下载# SCOPE = 'brain_enhanced_asr'  # 有此scope 表⽰有极速版能⼒,没有请在⽹页⾥开通极速版
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
# SCOPE = 'brain_enhanced_asr'  # 有此scope 表⽰有极速版能⼒,没有请在⽹页⾥开通极速版# 忽略scope 检查,⾮常旧的应⽤可能没有# SCOPE = False
class DemoError(Exception):    pass
"""  TOKEN start """
rm删除所有文件TOKEN_URL = 'openapi.baidu/oauth/2.0/token'
def fetch_token():
params = {'grant_type': 'client_credentials',              'client_id': API_KEY,
'client_secret': SECRET_KEY}    post_data = urlencode(params)    if (IS_PY3):
post_data = de( 'utf-8')    req = Request(TOKEN_URL, post_data)    try:
f = urlopen(req)        result_str = f.read()    except URLError as err:
print('token http response http code : ' + de))        result_str = ad()    if (IS_PY3):
result_str =  result_str.decode()    print(result_str)
result = json.loads(result_str)    print(result)
if ('access_token' in result.keys() and 'scope' in result.keys()):        print(SCOPE)
if SCOPE and (not SCOPE in result['scope'].split(' ')):  # SCOPE = False 忽略检查            raise DemoError('scope is not correct')
print('SUCCESS WITH TOKEN: %s  EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in']))        return result['access_token']    else:
raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')"""  TOKEN end """
if __name__ == '__main__':    token = fetch_token()    speech_data = []
with open(AUDIO_FILE, 'rb') as speech_file:        speech_data = ad()    length = len(speech_data)    if length == 0:
raise DemoError('file %s length read 0 bytes' % AUDIO_FILE)    speech = base64.b64encode(speech_data)    if (IS_PY3):
speech = str(speech, 'utf-8')    params = {'dev_pid': DEV_PID,
#"lm_id" : LM_ID,    #测试⾃训练平台开启此项              'format': FORMAT,              'rate': RATE,              'token': token,              'cuid': CUID,              'channel': 1,              'speech': speech,
5354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
输出:显然输出在最后⼀⾏。
'speech': speech,              'len': length              }
post_data = json.dumps(params, sort_keys=False)    # print post_data
req = Request(ASR_URL, de('utf-8'))    req.add_header('Content-Type', 'application/json')    try:
begin = timer()        f = urlopen(req)        result_str = f.read()
powershell怎么使用print ("Request time cost %f" % (timer() - begin))    except URLError as err:
print('asr http response http code : ' + de))        result_str = ad()    if (IS_PY3):
result_str = str(result_str, 'utf-8')    print(result_str)
with open("","w") as of:        of.write(result_str)
118119120121122123124125126127128129130131132133134135136137138
{"access_token":"24.ffc8666eb9b9ed1f831f145674c84faa.2592000.1585487697.282335-17692619","session_key":"9mzdXRJMRXk2UGrRPfHouF
brain_nlp_emotion wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-c
{'access_token': '24.ffc8666eb9b9ed1f831f145674c84faa.2592000.1585487697.282335-17692619', 'session_key': '9mzdXRJMRXk2UGrRPfHouFivZjF9k3ocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_re
audio_voice_assistant_get
SUCCESS WITH TOKEN: 24.ffc8666eb9b9ed1f831f145674c84faa.2592000.1585487697.282335-17692619  EXPIRES IN SECONDS: 2592000Request time cost 2.540582
{"err_msg":"speech quality error.","err_no":3301,"sn":"470283300881582895698"}PS D:\learn Java\pyday\API\API\语⾳识别> python baidushibie.py
{"access_token":"24.cb226321d87cd64da657bd1468e81951.2592000.1585489514.282335-17692619","session_key":"9mzdWBIklEgpIJj0BuuHGod5VXLJ
{'access_token': '24.cb226321d87cd64da657bd1468e81951.2592000.1585489514.282335-17692619', 'session_key': '9mzdWBIklEgpIJj0BuuHGod5VXLJr ApsMisTest_Test 权限 vis-classify_flower lpq_开放 cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app smartapp
文件格式转换appaudio_voice_assistant_get
SUCCESS WITH TOKEN: 24.cb226321d87cd64da657bd1468e81951.2592000.1585489514.282335-17692619  EXPIRES IN SECONDS: 2592000Request time cost 1.507672
{"corpus_no":"6798493061260544840","err_msg":"success.","err_no":0,"result":["百度是⽠⽪。"],"sn":"666502245331582897515"}
12345678910111213141516171819

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。