永久免费的百度语音转字幕的工具

本文主要内容介绍

  • 永久免费的百度语音转字幕的工具Linux SDK 安装
  • 录制视频:徐志摩《再别康桥》
  • 演示将录制的视频分离音频文件
  • 用百度语音工具将音频文件软字幕srt格式文件
  • 最重要的一点是永久免费,识别率97%
  • [说明]本人普通话说的差,识别率低些是正常的,普通话说的好的,基本没问题

视频内容

概述

本文档是百度AI开放平台Linux SDK (C++)BDSpeechSDK 3.x 的用户指南。描述了在线语音识别相关接口的使用说明

ASR 自动语音识别技术(Automatic Speech Recognition), 将人的语音转换为文本。

  • LinuxSDK 仅支持在线语音识别,固定长语音模式。
  • LinuxSDK内部采用流式接口,即边读取语音流边处理。 该流式方式同Android iOS SDK, 区别于Rest Api需要上传完整录音文件。

再次提醒: BDSpeechSDK的功能只有不限音频流时长的在线识别功能,并可以返回服务器端语义。没有任何离线功能,没有离线识别及唤醒词功能。

SDK 支持 普通话,英语,四川话和粤语

版本历史

库标识

版本,sdk->get_sdk_version()

发布时间

libBDSpeechSDK.a md5值

09a7b48a3a-20180502

3.0.0.9a7b48a3a

2018-05-16

3974ca4d43dedff8d56b8830f2b17983

编译运行环境

目前仅支持 x64 Linux 操作系统。

目前支持运行centos 4-7 版本,及Ubuntu 14.04, 使用g++ 4.8.2版本。 其它Linux及g++版本暂时未做测试,请自行尝试编译,如果有报错请反馈。

如果使用g++ 5.x以上版本编译,需要开启-D_GLIBCXX_USE_CX11ABI=0,SDK可以正常使用,但可能导致您自己的部分新特性的代码不能编译。

线程限制

SDK限制为10个识别线程,但可以跑多个进程。

输入音频流

输入音频流的音频格式为pcm, 单声道,16bits, 小端序。采样率16k。

实时传输的一个16k采样率的音频流需要32kb/s的网速,10个并发音频流需要320K/s ,请确保与百度服务器之间的网络稳定。

开启压缩传输后会降低传输的数据量,但是音频质量会有损失。

  • 开启EVR_AUDIO_COMPRESSION_BV32有损压缩,压缩为原始大小的1/8;(默认,不推荐)
  • 开启EVR_AUDIO_COMPRESSION_AMR有损压缩,压缩为原始大小的1/16;

输出

SDK 输出的结果为识别音频的文字。如果开始语义理解后,进一步在识别音频的文字的基础上可以获取简单的语义解析结果。复杂的语义解析及智能问答可以参见ai.baidu.com上文本处理类的接口。

耗时

如果您用的是实时音频,没有影响。如果您用的是录音文件,请sleep与原始音频相同的时间,否则结果无法预期。即从音频开始进行计算到获取最终结果,识别整体耗时都是略多于原始音频的时长。

测试SDK

如果您需要测试SDK,请至sample目录。

  • sample/asr 目录下main.cpp 直接展示如何使用SDK, 运行build.sh 执行
  • sample/asrDemo2, 对SDK做了进一步封装,简化调用。运行run/build.sh 执行。asrDemo2 同时也是Clion的项目,可以直接导入运行。
  • sample/asrDemo-srt, 在asrDemo2,一个完整的添加视频文件字幕的程序,请读sample/asrDemo-srt/Readme.md文件后,再进行测试。

目录结构

BDSpeechSDK中包含extern, include, lib, sample, resources五个目录。 如果您需要测试SDK,请至sample目录。

  • extern包含需要的第三方库和头文件
  • include包含需要引入的头文件
    • BDSpeechSDK.hpp包含sdk可用接口
    • BDSSDKMessage.hpp 包含给sdk发送的消息的结构定义
    • ASR/bds_ASRDefines.hpp 包含sdk相关参数取值的定义,错误分类,对应错误码
    • ASR/bds_asr_key_definitions.hpp 包含sdk相关参数的定义
  • lib 包含需要引入的SDK库文件
  • resources 包含sdk VAD 算法需要的模型文件
  • sample 目录下有3个示例

g++ 安装

Centos 5 或 6 上如果没有g++程序,请按以下代码安装:

yum install gcc-c++
g++ --version

默认是 4.4.7 版本

升级至4.8.2

wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo

yum install devtoolset-2-gcc-c++  devtoolset-2-binutils devtoolset-2-build devtoolset-2-gdb devtoolset-2-libstdc++-devel devtoolset-2-runtime

如果网速过慢的话,可以手动下载 下面的rpm文件本地安装

devtoolset-2-binutils-2.23.52.0.1-10.el6.x86_64.rpm
devtoolset-2-build-2.1-4.el6.noarch.rpm
devtoolset-2-gcc-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gcc-c++-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gdb-7.6.1-47.el6.x86_64.rpm
devtoolset-2-libstdc++-devel-4.8.2-15.el6.x86_64.rpm
devtoolset-2-runtime-2.1-4.el6.noarch.rpm

# 如果网速过慢的话,可以手动下载上述rpm文件
# 链接:https://pan.baidu.com/s/1qZk6wVy 密码:zjew
# yum localinstall *.rpm
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++

成功后:

[root@instance-ah3bznc6 root]# g++ --version
g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
Copyright (C) 2013 Free Software Foundation, Inc.

SDK功能简介

功能简介

功能基本等同于Android iOS SDK的在线部分。BDSpeechSDK没有任何离线功能。

按步骤主要分为语音识别 及 语义理解。

  • 在线语音识别: 将录音转为文字。目前在线识别支持普通话,英语,四川话及粤语
  • 在线语义理解: 将语音识别出的文字,进行分词及找出意图。仅支持普通话

###识别模型及语言

百度语音提供2种识别模型

  • 搜索模型: 效果同百度搜索的语音输入。适合于短语识别。
  • 输入法模型:效果同百度输入法的语音输入。适合于长句识别。
  • 普通话搜索模型同时能识别简单的常用英语语句,效果同手机百度。

SDK 支持 普通话,英语,四川话及粤语

识别模型和输入法模型及语言由ASR_PARAM_KEY_PRODUCT_ID控制

###静音断句及时长设置

SDK根据静音时长判断一句话有没有结束。SDK检测到静音时长超过这个时间后,就认为一句话结束,句子该切分了。

静音时长可以单独设置,建议值 200ms - 3000ms。参见ASR_PARAM_KEY_MAX_SPEECH_PAUSE参数

自定义词库

自定义词库适合短句,保证词库中一模一样的短句可以被识别出,词库中的分词优先级较高。 自定义词库仅对搜索模型生效。最好在1万行以内。

副作用:如果用户的测试集中包含大量非自定义词表的query,整体上准确率下降。

举例:

词库定义了1个短句: 1 . 摆渡船来了 百度内部处理的可能的分词结果: 摆渡船 来 了

以下录音的结果

  1. 原始音频:摆渡船来了 =>识别结果: 摆渡船来了 【保证结果】
  2. 原始音频:摆渡船来了么 =>识别结果: 百度传来了么 【可能结果,不保证】
  3. 原始音频:摆渡船来 => 识别结果: 百度传来 【可能结果,不保证】
  4. 原始音频:百度传来了喜讯 => 识别结果: 摆渡船传来了喜讯 【不保证,词库内的分词优先级高】

接口使用及调用流程

BDSSDKMessage

BDSSDKMessage 包可以认为是命令的参数,由一个标明意向的name,及其它参数组成,然后通过post函数传递命令。

name

说明

ASR_CMD_CONFIG

设置配置参数

ASR_CMD_START

设置启动参数

ASR_CMD_PUSH_AUDIO

传递音频数据

ASR_CMD_STOP

停止当前当前音频流输入

ASR_CMD_CANCEL

取消当前的整个识别过程

识别调用流程

获取实例

每次识别一个音频流,都需要从获取实例到释放实例完整地执行一遍。即get_instance每个音频流获取一次,不要复用。

get_instance最多可以保持10个实例,即最多同时识别10个音频。

std::string err_msg;
bds::BDSpeechSDK* sdk = bds::BDSpeechSDK::get_instance(bds::SDK_TYPE_ASR, err_msg);

设置回调监听器

设置结果的回调函数。注意回调产生在SDK内部的线程中。

void asr_output_callback(bds::BDSSDKMessage& message, void* user_arg);
sdk->set_event_listener(&asr_output_callback, (void*)& thread_seq);
// 此例中 thread_seq会作为user_arg参数,传入asr_output_callback回调。

设置SDK配置参数

bds::BDSSDKMessage cfg_params;
cfg_params.name = bds::ASR_CMD_CONFIG;
cfg_params.set_parameter(bds::COMMON_PARAM_KEY_DEBUG_LOG_LEVEL, sdk_log_level);
....
bool is_success =sdk->post(cfg_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg

cfg_params.set_parameter中可以设置的参数列表请见“参数列表:输入配置参数”一节

设置SDK 启动参数

这里只需要填写ASR_PARAM_KEY_APP参数,填写您自定义的应用名称即可,方便百度服务端联调及统计。

bds::BDSSDKMessage start_params;
start_params.name = bds::ASR_CMD_START;
start_params.set_parameter(bds::ASR_PARAM_KEY_APP, "AIPtest");
....
bool is_success =sdk->post(start_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg

cfg_params.set_parameter中可以的参数列表说明请见“参数列表:输入启动参数”一节

传递音频数据

音频流的音频格式为raw,或者是pcm文件输入流。单声道,16bits, 小端序。

bds::BDSSDKMessage push_params;
push_params.name = bds::ASR_CMD_PUSH_AUDIO;
push_params.set_parameter(bds::DATA_CHUNK, audio_buf, (int)read_cnt); // read_cnt=320
//如果实时音频,此处不需要sleep。如果是文件流,此处需要 sleep , sleep的时长为音频时长。
//即服务端处理一段音频需要等同于音频原始时长的耗时,不能上传过快,否则服务端行为不能预期。
....
bool is_success =sdk->post(push_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg

每次传递音频的大小可以根据需要来,建议320字节 。

两次音频数据调用请在10s内完成。否则有异常出现。

停止或者暂停流程

停止音频流输入

告诉SDK 音频流已经输入完毕,不再有后续音频。 需要调用以下2行代码:

  1. push_params.set_parameter(bds::DATA_CHUNK, audio_buf, 0)
  2. sdk->post(stop_params, err_msg));
 push_params.set_parameter(bds::DATA_CHUNK, audio_buf, 0);

bds::BDSSDKMessage stop_params;
stop_params.name = bds::ASR_CMD_STOP;
bool is_success = sdk->post(stop_params, err_msg));
// is_success表示设置是否成功,具体错误见err_msg

取消识别

告诉SDK 本次识别取消,即用户不再需要识别结果。

bds::BDSSDKMessage cancel_params;
cancel_params.name = bds::ASR_CMD_CANCEL;
bool is_success = sdk->post(cancel_params, err_msg));
// is_success表示设置是否成功,具体错误见err_msg

在设置的event_listener输出回调中,SDK返回EvoiceRecognitionClientWorkStatusCancel事件

释放资源

  bds::BDSpeechSDK::release_instance(sdk);

与get_instance 对应 SDK不是处于空闲状态(见下面的空闲状态定义),调用 bds::BDSpeechSDK::release_instance可能引起程序出core。

清理所有线程池

所有识别结束,不需要发起新的识别。

SDK空闲时才能执行

bds::BDSpeechSDK::do_cleanup();

其它

SDK空闲状态定义

SDK空闲是指 没有开始识别或者实例产生了以下3个回调后:

  • EVoiceRecognitionClientWorkStatusLongSpeechEnd // 长语音识别过程正常结束
  • EVoiceRecognitionClientWorkStatusError // 发生错误
  • EVoiceRecognitionClientWorkStatusCancel // 用户手动取消当前识别

本次识别的最后一点数据发完之后,并且post了长度为0的数据,并且post了stop命令后,最长(通常都不会超过)12s,sdk就会产生上述3个回调。

不建议用户发送ASR_CMD_CANCEL命令来强制结束识别,如果有需要,也可以这样做;但在没收到上述三个回调状态时,即不是空闲状态调用 bds::BDSpeechSDK::release_instance可能引起程序出core

设置日志

默认日志根据您设置的日志级别输出到stderr中,可以自行指定日志文件。 注意需要在引擎空闲的时候,如一开始执行。 日志需要设置 COMMON_PARAM_KEY_DEBUG_LOG_LEVEL = EVRDebugLogLevelTrace 开启

BDSpeechSDK::open_log_file(const char *logFileName, int fileSize = 0);
  • logFileName 日志的路径
  • fileSize 日志文件的最大size, 实际size为 fileSize *512k 如果日志文件大于size, SDK会自动将当前日志文件重命名为xxx.bak文件(并删除历史xxx.bak),并新建一个日志文件xxx。所以这样只能最多同时保留两个日志文件。 您可以根据fileSize参数定期运行一个cron任务,备份xxx.bak文件
BDSpeechSDK::close_log_file();

close_log_file函数与open_log_file配对使用。在引擎空闲的时候,如全部结束后执行。

统计日志格式

开启日志并且日志级别在EVRDebugLogLevelInformation以上。 Sdk日志里带有统计信息,以Statistics开头(s大写),如下示例:

[INFO]-[2017-12-08 15:08:28.598][bds_EventManagerAsr.cpp:307]Statistics info, sn[e89f9705-2ca9-43bb-9790-0328a69ab1f4], sn_cost[11245]ms, response_cost[1085]ms, hard_delay[16]ms, recv_interval:[11229]ms, now:[1512716908598612], recv_first_pack_time:[1512716897352635], recv_last_pack_time:[1512716908582388], audio_len[10.620000]s

其中, 一个sn代表一句话的识别标志logId

  • audio_len: 该句话的音频长度
  • sn_cost :产生这个sn到这个sn对应的语音识别结束耗时, 可近似当作sdk识别该句话的总耗时;
  • recv_interval :为sdk从用户侧接收这句话总的间隔时间, 即recv_first_pack_time和recv_last_pack_time之差
  • response_cost:响应时间,为sdk收到用户post来的该句话的第一个包到第一次给出用户识别结果(可能是部分结果)的耗时;
  • hard_delay :硬延时,类似response_cost,但是是计算最后一个包的。sdk收到用户post来的该句话的最后一个包到给出用户最终识别结果(可能报错信息)的耗时;
  • recv_first_pack_time和recv_last_pack_time:sdk用户post来的该句话的第一包和最后一包的时间点,实际用户每次传递多少数据可能有所不同,且传来时还未分句,但不影响,sdk会回做标记,并计算出每句话的首尾包是哪次传来的,以及传过来的时间点。 通常sn_cost 应该略大于recv_interval,而recv_interval应该近似等于audio_len(时间上),即一句的识别时间和该句话的音频长度相当(略长出几十到几百ms),如果觉得sdk识别慢,请先关注这几个时间,以排查问题在大概哪一侧。

参数列表

输入参数列表

PRODUCT_ID

根据您需要的识别语言和模型选择PRODUCT_ID参数

  • 搜索模型: 效果同百度搜索的语音输入。适合于短语识别。
  • 输入法模型:效果同百度输入法的语音输入。适合于长句识别。

语义解析: 自然语言文本是用户意图的表述,语义解析的目的就是将文本分词并解析成意图表示。语义解析仅支持普通话搜索模型。 在线语义详细说明请查看“语义理解协议”文档

PID

语言

模型

是否有标点

在线语义

备注

1536

普通话

搜索模型

无标点

不支持

默认PID

15362

普通话

搜索模型

加强标点(逗号、句号、问号、感叹号)

不支持

15363

普通话

搜索模型

无标点

支持

1537

普通话

输入法模型

有标点(逗号)

不支持

15372

普通话

输入法模型

加强标点(逗号、句号、问号、感叹号)

不支持

15373

普通话

输入法模型

加强标点(逗号、句号、问号、感叹号)

支持

1737

英语

有标点(逗号)

不支持

1637

粤语

有标点(逗号)

不支持

16372

粤语

加强标点(逗号、句号、问号、感叹号)

不支持

1837

四川话

有标点(逗号)

不支持

1936

普通话

远场模型

有标点(逗号)

不支持

19362

普通话

远场模型

加强标点(逗号、句号、问号、感叹号)

不支持

19363

普通话

远场模型

加强标点(逗号、句号、问号、感叹号)

支持

BDSSDKMessage

BDSSDKMessage 包可以认为是用户向SDK发送命令。由一个标明意向的name,及该name相关的参数组成,然后通过post函数传递命令。

name

说明

参数

ASR_CMD_CONFIG

设置配置参数

见本节的“ASR_CMD_CONFIG 输入参数”

ASR_CMD_START

设置启动参数

见本节的“ASR_CMD_START” 输入参数”

ASR_CMD_PUSH_AUDIO

传递音频数据

见本节的“ASR_CMD_PUSH_AUDIO” 输入参数”

ASR_CMD_STOP

停止当前音频流输入

ASR_CMD_CANCEL

取消当前的整个识别过程

   BDSSDKMessage params;
   params.name=ASR_CMD_CONFIG; // 这里设置name
   params.set_parameter(xxxx, yyyyy);// 根据文档或者demo,设置参数
   bool is_success =sdk->post(params, err_msg)); // 发送这个命令

ASR_CMD_CONFIG 参数

bool 表示 int =0 (关闭)和 =1 (开启) 的值

参数名

参数类型 / 值

必填选填

常用程度

说明

ASR_PARAM_KEY_APP_ID

string

必填

常用

您在网站上申请的应用appId

ASR_PARAM_KEY_API_KEY

string

必填

常用

您在网站上申请的应用appKey

ASR_PARAM_KEY_PRODUCT_ID

int

必填

常用

根据需要识别的语言,及模型选择一个PID值,中文搜索模型是1536。具体值见上一个表格,PRODUCT_ID。

ASR_PARAM_KEY_MAX_SPEECH_PAUSE

float

选填

常用

默认值70帧(=700ms)。VAD检测xxx帧 静音后认为一句话结束。 一帧 = 10ms

ASR_PARAM_KEY_SAVE_AUDIO_ENABLE

bool

选填

常用

默认关闭,用于保存识别过程中的音频数据

ASR_PARAM_KEY_SAVE_AUDIO_PATH

string

选填

常用

保存音频文件路径,ASR_PARAM_KEY_SAVE_AUDIO_ENABLE开启后生效,默认路径为程序启动目录下的sdk_save_audio.d里。音频文件以单次识别为分割,文件以日期命名,精确到微秒,后缀为.pcm

COMMON_PARAM_KEY_DEBUG_LOG_LEVEL

TBDVoiceRecognitionDebugLogLevel

选填

常用

设置日志级别,日志可以使用open_log_file保存到文件中

EVRDebugLogLevelOff

默认

不常用

关闭日志,仅测试是使用

EVRDebugLogLevelTrace

常用

开启所有日志, 反馈请开启这个级别日志

ASR_PARAM_KEY_COMPRESSION_TYPE

TBDVoiceRecognitionAudioCompressionType

选填

不常用

SDK内部传输到百度服务端的音频流压缩格式,仅仅在与百度服务端通讯带宽不够的情况下设置。注意此处不是输入格式。输入格式见ASR_PARAM_KEY_SAMPLE_RATE。

EVR_AUDIO_COMPRESSION_PCM

推荐

常用

不压缩,以原始音频pcm格式上传。

EVR_AUDIO_COMPRESSION_BV32

默认

不常用

BV有损压缩格式传输,8倍压缩

EVR_AUDIO_COMPRESSION_AMR

不常用

AMR有损压缩格式传输,16倍压缩

ASR_PARAM_KEY_SAMPLE_RATE

BDVoiceRecognitionRecordSampleRateFlags

选填

固定值

原始音频的采样率。输入音频流的音频格式为raw,或者是pcm文件输入流。单声道,16bits, 小端序

EVoiceRecognitionRecordSampleRate16K

默认

常用

16000的采样率,推荐

ASR_PARAM_KEY_DISABLE_PUNCTUATION

bool

选填

固定值

固定值1,仅当不需要标点时将其设置为0

ASR_PARAM_KEY_CHUNK_ENABLE

bool

必填

固定值

固定值1

ASR_PARAM_KEY_MFE_DNN_DAT_FILE

string

必填

固定值

固定值为bds_easr_mfe_dnn.dat文件的路径

ASR_PARAM_KEY_MFE_CMVN_DAT_FILE

string

必填

固定值

固定值为bds_easr_mfe_cmvn.dat文件的路径

ASR_CMD_START 参数

参数名

参数类型 / 值

必填

说明

ASR_PARAM_KEY_APP

string

必填

您自己应用的名称, 英文字母数字及下划线

ASR_PARAM_KEY_PLATFORM

string

必填

固定值 "Linux"

ASR_PARAM_KEY_SDK_VERSION

string

必填

固定值 "sdk3.0", 该值随版本而定,具体参见demo

ASR_CMD_PUSH_AUDIO参数

传输方式见:”接口使用及调用流程:传递音频数据“一节。

参数名

参数类型 / 值

必填

说明

DATA_CHUNK

二进制 及其长度

传入音频流二进制数组及长度,长度为0表示音频流结束

识别结果回调

设置结果的回调函数

void asr_output_callback(bds::BDSSDKMessage& message, void* user_arg);
sdk->set_event_listener(&asr_output_callback, (void*)& thread_seq);
// 此例中 thread_seq会作为user_arg参数,传入asr_output_callback回调。

BDSSDKMessage 参数

asr_output_callback 中的BDSSDKMessage message参数解析如下: message.name 必定为bds::asr_callback_name message.get_parameter(bds::CALLBACK_ASR_STATUS, status) 获取status,根据status值有如下表格

status

含义

参数

EVoiceRecognitionClientWorkStatusStartWorkIng

引擎准备完毕

EVoiceRecognitionClientWorkStatusFlushData

临时结果

CALLBACK_ASR_RESULT, 具体见下面表格

EVoiceRecognitionClientWorkStatusFinish

最终结果

CALLBACK_ASR_RESULT, 具体见下面表格

EVoiceRecognitionClientWorkStatusLongSpeechEnd

开启长语音模式时(默认开启),整个音频流识别结束。该事件表示音频流识别结束。

EVoiceRecognitionClientWorkStatusChunkNlu

语义理解结果

DATA_CHUNK, 具体见下面表格

EVoiceRecognitionClientWorkStatusError

识别出错

具体见下面EVoiceRecognitionClientWorkStatusError表格

EVoiceRecognitionClientWorkStatusCancel

用户手动取消的回调

CALLBACK_ASR_RESULT 参数

用于EVoiceRecognitionClientWorkStatusFlushData 及 EVoiceRecognitionClientWorkStatusFinish

std::string json_result;
message.get_parameter(bds::CALLBACK_ASR_RESULT,json_result);

json_result 为json字符串,解析后有如下参数:

key

类型

说明

results_recognition

string array

识别结果数组,可能有多个,请取第一个为识别结果

origin_result["sn"]

string

代表一句话识别的logId

origin_result["sn_start_time"]

string

该识别结果对应的音频开始时间

origin_result["sn_end_time"]

string

该识别结果对应的音频结束时间

EVoiceRecognitionClientWorkStatusChunkNlu 参数

const char* buf;
int len = 0;
message.get_parameter(bds::DATA_CHUNK, buf, len);
 // std::string result(buf, len); // 转为string

具体解析的json解析结果请参见”语义理解协议“ 文档

EVoiceRecognitionClientWorkStatusError 参数

key

类型

说明

CALLBACK_ERROR_CODE

int

错误码

CALLBACK_ERROR_DOMAIN

int

错误领域

CALLBACK_ERROR_DESC

string

错误描述

CALLBACK_ERROR_SERIAL_NUM

string

代表一句话识别的logId

如果初步反馈,请将这4个值一起反馈。具体bug反馈请开启EVRDebugLogLevelTrace, 给出完整日志。

错误码

简介

注意把日志开启(EVRDebugLogLevelTrace级别)

EVRClientErrorCodeServerSpeechQualityProblem错误会被sdk吞掉,: 音频质量有问题。因为即使后端检测到音频质量问题,识别仍可继续,所以用户回调中看不到,只能在日志中能看到。

语音识别错误会被分类,具体见TVoiceRecognitionClientErrorDomain的定义。

错误码

加粗为用户侧发生的常见错误

DOMAIN

CODE

主要来源

描述

EVRClientErrorDomainRecord

10

SDK

未知错误

EVRClientErrorDomainVAD

20

SDK

语音数据处理VAD过程出错

EVRClientErrorCodeVADException

1

SDK

前端库VAD异常

EVRClientErrorCodeNoSpeech

2

用户音频流

用户未说话

EVRClientErrorCodeShort

3

用户音频流

用户说话声音太短

EVRClientErrorDomainOnline

30

用户/服务端

在线识别引擎出错

EVRClientErrorCodeOnlineExceptioin

1

用户/服务端

在线识别引擎异常

EVRClientErrorCodeOnlineNetworkUnavailable

2

用户音频流

网络不可用

EVRClientErrorCodeOnlineTokenFailed

3

用户

获取token失败 ,请检测appId appKey appSecret是否填写正确

EVRClientErrorCodeOnlineResolveUrlFailed

4

用户

解析url失败,请检测网络状态

EVRClientErrorDomainLocalNetwork

31

用户

连接百度服务端的网络问题,先确认联网是否正常

EVRClientErrorCodeLocalTimeout

1

用户

请检测网络状态,请求百度服务器连接超时

EVRClientErrorDomainHTTP

32

用户/服务端

HTTP协议错误。或日志中出现http status不等于200而出错,这与通常的http访问一样,先检查网络状况,如果网络状况正常,可反馈

EVRClientErrorDomainServer

33

用户/服务端

服务器返回错误 。或日志中出现-300X,均是后端返回的错误,除了-3005外可尝试重试。

EVRClientErrorDomainServer

-3001

服务端

后端从SDK读数据失败,可能是sdk检测到后端超时,断开了连接,重试

EVRClientErrorCodeServerRecognError

-3002

服务端

识别过程出错

EVRClientErrorCodeServerNoFindResult

-3003

服务端

协议参数错误

EVRClientErrorCodeServerAppNameUnknownError

-3004

用户

appId appKey appSecret填写错误 或流量超过限制

EVRClientErrorCodeServerSpeechQualityProblem

-3005

用户

声音不符合识别要求,通常是语音质量问题或采样率设的不对 。如果确认那块(报错的句子所处的音频位置段)音频没问题,可再检查采样率和别的识别参数有误问题。 音频质量问题,自查对应位置的音频,通常忽略该问题

EVRClientErrorCodeServerSpeechTooLong

-3006

用户

语音过长,确认是否开启了本地vad,以及vad门限是否过大

-3007

SDK/服务端

后端检测到sdk传递的数据类型不对,通常不会出现,出现则重试

EVRClientErrorCodeServerSpeechParamsUnknow

-3008

服务端

上行参数未知,(可能是gzip解压失败) 后端检测到sdk传递的json参数不对,通常不会出现,出现则重试

EVRClientErrorCodeServerSpeechNoUploadLink

-3011

用户网络

上行流建立失败,可能跟网络状况或后端有关,重试

-3012

用户网络

下行流建立失败,可能跟网络状况或后端有关,重试

-3013

服务端

后端错误

-3014

用户

用户自己取消,忽略之

EVRClientErrorDomainOffline

34

服务端

未知错误

EVRClientErrorCodeRecoderException

1

SDK

未知错误

EVRClientErrorCodeRecoderNoPermission

2

SDK

未知错误

EVRClientErrorCodeRecoderUnAvailable

3

SDK

未知错误

EVRClientErrorCodeInterruption

4

SDK

未知错误

EVRClientErrorDomainCommon

40

其它错误

EVRClientErrorCodeServerSpeechNoUploadLink

4095

SDK

识别器忙

EVRClientErrorCodeCommonPropertyListInvalid

2

用户

垂类设置有误

EVRClientErrorCodeCommonEnqueueError

3

用户

语音数据enqueue失败

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券