故障排除
常见问题
Q. 语音识别准确度不如预期,我该怎么办?
请检查以下几点。另请参阅结果处理中的客户端错误。如果问题仍然存在,请与我们联系。
-
检查音频数据的声道数
对于立体声录音,只会识别第一个声道的音频。如果想要识别两个声道的音频,请分别发送分离后的音频文件。
-
检查音频数据的采样率
电话通话音频通常以8kHz采样,其他常用音频通常以16kHz或更高采样率录制。 会話_汎用引擎支持这些不同的采样率,但由于连接到不同的引擎,在请求时需要指定正确的采样率。 ※如果采样率指定错误,几乎无法识别(识别结果为空)。
-
检查音频格式指定的字节序
发送 不带 header 音频数据(RAW数据)时,除了采样率外,还需要指定字节序。小端数据添加lsb,大端数据添加msb(如
lsb8K、msb16K等)。※如果lsb或msb指定错误,几乎无法识别(识别结果为空)。
-
确认是否录制了要识别的音频
由于受到周围环境和录音麦克风设备等的影响,请听一下录音,确认发言者的声音是否被清晰录制。也可参考 TIPS 中的音频数据相关内容。
-
确认发送到 API 的音频二进制数据中是否混入了多余的数据
在向 API发送音频数据时,如果在二进制数据中混入了多余的数据,可能会导致音频异常,从而影响语音识别的效果。如果语音识别请求和引擎选择等都适当,录音环境等也没有问题,但识别精度仍然不理想,请检查是否出现了这种程序问题。例如,可以在客户端录制发送给 API 的音频,并确认音频是否正常。
-
确认发言内容是否与所使用的引擎匹配
如果频繁出现专业术语,识别准确度会下降。 我们为医疗、金融、保险等行业提供了专门的领域特化引擎。如果发言内容可能匹配,请尝试使用这些引擎。详情请参阅语音识别引擎。 如果想要识别仅在公司内部使用的专有术语或缩写,请使用用户词典功能。
Q. 是否可以对视频文件、HLS等流媒体格式的视频和音频进行语音识别?
我们不提供用于识别流媒体视频或音频的API或示例程序。 对于不支持的数据格式,您需要将其转换为支持的音频格式。
用于转换音频格式的软件包括免费软件FFmpeg等。 但是,对于某些视频和音频格式,格式本身可能在许可证中有使用限制或需要支付版税。 请您自行确认并使用。
如果您想在播放视频或音频的同时进行语音识别,可以考虑将JavaScript示例程序中的getUserMedia()更改为getDisplayMedia(),这样就可以识别浏览器或系统音频,而不是麦克风输入。
(例) wrp.js
更改前
navigator.mediaDevices.getUserMedia(
{audio: true, video: false}
更改后
navigator.mediaDevices.getDisplayMedia(
{audio: true, video: true}
※ 并非所有浏览器都支持getDisplayMedia()的音频。我们已确认它在Chrome和Edge上可以正常工作。
关于 MyPage 的问题
Q. 我在用户词典页面通过文件注册了单词,但为什么没有显示在页面上?
可能是因为文件的字符编码不是UTF-8,或者文件格式不正确,导致无法注册。 请检查文件的字符编码和格式。
Q. 通过哪个地址可以接收故障信息通知邮件?
您可以通过在 MyPage 注册的"Alternative Contact Information Email Address"的"Failure Notification Contact Information Email Address"中注册的邮箱地址接收。
关于"Failure Notification Contact Information Email Address"的设置方法,请参阅Setting Up Failure Notification Recipients。
Q. 我想更改 Account ID 或 Service Password,该怎么办?
Account ID、Service ID 和 Service Password 是不能更改的。请注意妥善保管,防止泄露。如果确实需要更改,请先注销 Account,然后重新创建一个新 Account。
关于客户端库的问题
Q. 在连接语音识别服务器时,如果互联网断开并恢复,应该如何重新开始处理?
创建新的socket也没问题,但我们建议执行结束处理,然后重新连接。
对于客户端库,可以在wrp.disconnect()之后,重新从wrp.connect()开始以重新连接。
(例)
wrp.construct();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
--> 发生错误
wrp.disconnect();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
wrp.feedDataPuse();
Q. Android应用程序无法连接到服务器的原因是什么?
在Android中,无法从主线程(UI线程)连接到服务器。 请在另一个线程中执行。 此外,需要设置执行网络操作的权限(android.permission.INTERNET)。
关于示例程序的问题
Q. 有异步接口的示例程序吗?
Python示例代码请参考异步 HTTP 接口。 另外,AmiVoice Tech Blog上发布了带有源代码的示例应用程序,请参考。
Q. 在Windows批处理文件中执行curl命令时,为什么参数无效?
在Windows批处理文件中编写和执行命令时,需要将"%20"转义为"%%20"。 请检查命令内容。
Q. 为什么在Windows命令提示符中某些字符会出现乱码?
Windows命令提示符不支持显示UTF-8的4字节字符,因此会出现乱码。
Q. 在PHP中出现"PHP Warning: PHP Startup: Unable to load dynamic library 'openssl' "错误,一定需要openssl.so吗?
对于内置编译了openssl的PHP,不需要。
关于服务器连接的问题
Q. API key 认证失败的原因是什么?
请检查指定的参数和信用卡注册状态。 另外,签约后,AmiVoice API可能需要大约10分钟才能使用。
Q. 连接时出现SSL证书错误的原因是什么?
我们收到使用Zscaler(一种第三方安全解决方案)环境的客户反馈,需要指定Zscaler的证书。
Q. 由于超时导致连接失败的原因是什么?
可能是由于防火墙或代理服务器等网络设置导致被阻止。 请检查防火墙和代理服务器的设置。
由于Web浏览器可能已配置网络设置,请尝试使用JavaScript版本的示例。
如果您在需要代理服务器设置的环境中使用AmiVoice API客户端库,请使用setProxyServerName()方法设置代理服务器。
- Hrp类 void setProxyServerName(String proxyServerName)
- Wrp类 void setProxyServerName(String proxyServerName)
Q. 返回HTTP状态431或414的原因是什么?
请求的 header、URI或查询字符串太长。 如果在查询字符串中指定了profileWords,请改为在请求主体中指定。
关于语音识别结果和Job状态的问题
Q. 在用户词典页面注册的单词没有生效的原因是什么?
需要在请求参数中指定配置ID参数。 请注意,"profileId"和"profileWords"不是独立的请求参数,而是d参数的"子参数"。 详情请参阅 MyPage 的用户词典注册。
Q. 自己准备的音频文件无法进行语音识别的原因是什么?
可能使用了AmiVoice API不支持的音频格式,或音频文件的格式与参数中指定的格式不匹配。 请确认使用的是AmiVoice API支持的音频格式,并且参数指定正确。 另外,也有可能是将音频文件名而不是音频文件数据发送到服务器的情况,请注意。 关于音频格式,请参阅音频格式。
Q. 在单词注册中,如果想使用包含半角"|"或半角":"等不能使用的字符的单词,应该怎么办?
需要将其替换为其他字符串进行注册,然后在获取语音识别结果后的处理中将其替换回原始字符。 例如,可以注册URL编码后的字符,然后在应用程序中对语音识别结果的字符串进行URL解码。
Q. 有没有办法知道是否启用了无日志保存?
请在 MyPage 的"Usage of This Month"中查看"有日志保存"和"无日志保存"的使用量。 如果您的使用量加到了"无日志保存"的使用量中,则说明无日志保存已启用。 以前,在无日志保存的情况下,语音识别结果的"utteranceid"值末尾会有[nolog],但末尾的[nolog]已被废弃。
Q. 异步 HTTP 接口 中Job状态为queued的原因是什么?
从请求成功到语音识别完成需要一定时间,时间长短取决于发送的音频长度。
获取Job状态时,随着处理的进行,status会按以下顺序变化:
queued → started → processing → completed
当状态为queued时,表示语音识别尚未完成,请稍等片刻后再次请求获取结果。
此外,如果在处理过程中发生错误,状态将不会变为completed,而是从任何状态转变为error:
queued → error
queued → started → error
queued → started → processing → error
当语音识别请求成功后,请每隔30秒获取一次Job状态,直到status变为completed或error。
Q. 如何在句号后添加换行?
AmiVoice API没有自动插入换行的功能,因此需要在客户端对语音识别结果的文本进行处理。 (例) 使用JavaScript将"。"替换为"。"和br标签。
text = text.replace(/。/g, "。<br>");
Q. 是否可以获取平假名的语音识别结果?
语音识别结果的JSON中包含每个单词的"读音"信息。
有关JSON的详细信息,请参阅各API的语音识别结果响应(同步 HTTP 接口、 异步 HTTP 接口 和WebSocket接口 )。"spoken"是每个单词的读音。
但是,这个"读音"是按照实际发音的,可能与"假名注音"不同。 例如,对于"私 は"这个表述,读音将是"わたくし わ"。
其他问题
Q. BIZTEL 语音识别集成中,除了 Hybrid 的"会話_汎用"引擎和 End to End 的通用引擎之外,其他引擎出错的原因是什么?
目前,只有 Hybrid 的"会話_汎用"和 End to End 的通用引擎支持 BIZTEL 发送的音频数据格式(采样率低于 16kHz),因此其他引擎会出错。
Q. 在 BIZTEL 语音识别集成中,如果想使用指定了 IP 地址的 API key 作为 ACP 的 API key,应该指定什么 IP 地址?
请指定 BIZTEL 的 IP 地址。
Q. 使用BIZTEL语音识别连接时,为什么BIZTEL的通话时间和ACP的使用时间存在差异?
AmiVoice API会分别接收通话双方的语音。因此,发送到API的音频数据总长度大约是BIZTEL呼入呼出历史记录总时长的2倍。而ACP的使用时间并非音频数据的实际长度,而是其中被检测为"语音段"部分的总长度。
在像BIZTEL这样分别对通话双方的语音进行识别的情况下,如果双方说话者完全不重叠发言,且双方之间没有无声时间,假设是理想的通话情况,那么语音段的总长度大约与通话长度相当,即大约是通话双方音频数据总长度的一半。但实际上,双方的发言可能会重叠,或者非语音声音(噪音)可能被检测为语音。因此,通常会检测到略多于音频数据总长度一半的时间(超过50%)作为语音段,这就成为了ACP的使用时间。因此,在大多数情况下,ACP的使用时间会略长于BIZTEL呼入呼出历史记录的总时长。但是,每次通话中检测到的语音段占总时长的比例会有所不同,所以这个比例仅供参考。
Q. 在使用 AudioCodes 公司的 VoiceAI Connect 时,能否反映已注册的单词到 AmiVoice 中?
我们从客户那里得到反馈,可以在 Connection Engine Name (folderId)中在连接引擎名称后添加 profileId 的指定,格式如下:
<连接引擎名称> profileId=:<profileId>
这样就可以指定 profileId。 具体详情请向 AudioCodes 公司确认。