[英]speech to text transcription issue with ibm watson
我正在努力使用 IBM 语音到文本服务让转录在我的 android 应用程序上工作。 下面是用于记录文件和转录文件的代码。
我从github 链接中获取了 watson 的示例代码
媒体记录器输出
mediaRecorder = new MediaRecorder();
mediaRecorder.setMaxDuration(MAX_DURATION);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
当我听它时,文件确实有清晰的音频。
沃森代码
private void startWatson() {
service = new SpeechToText();
String userName = String.valueOf(R.string.speech_text_username);
String password = String.valueOf(R.string.speech_text_password);
service.setUsernameAndPassword(userName, password);
service.setEndPoint(String.valueOf(R.string.speech_text_url));
}
我从我的 bluemix 帐户获得了用户名、密码和 URL。
private void transcribe() throws IOException {
final InputStream inputStream = FileUtils.openInputStream(files[spnRecordingList.getSelectedItemPosition()]);
recognizeOptions = new RecognizeOptions.Builder().contentType(HttpMediaType.AUDIO_OGG).interimResults(true).build();
new Thread(new Runnable() {
@Override
public void run() {
try {
service.recognizeUsingWebSocket(inputStream, recognizeOptions, new playback());
} catch (Exception e) {
}
}
}).start();
}
我选择 Audio_OGG 是因为文档说:audio/ogg(服务会自动检测输入音频的编解码器。)
这可能是错误的,所以如果是这样,请解释原因,因为我发现的示例并没有太大帮助。
播放类
private class playback extends BaseRecognizeCallback {
@Override
public void onTranscription(SpeechResults speechResults) {
if (speechResults.getResults() != null && !speechResults.getResults().isEmpty()) {
String text = speechResults.getResults().get(0).getAlternatives().get(0).getTranscript();
txtbox.setText(text);
}
}
@Override
public void onError(Exception e) {
txtbox.setText("on error");
}
@Override
public void onDisconnected() {
txtbox.setText("on disconnected");
}
}
播放类是我的活动类中的一个类
public class RecordingActivity extends AppCompatActivity implements
RecordingListFragment.OnFragmentInteractionListener {
"on create and etc code"
"start watson function"
"transcribe function"
playback class {}
}
我从我在 github 上找到的带有 Watson 语音到文本的示例中学习了课程和线程代码。
我选择 Audio_OGG 是因为文档说:audio/ogg(服务会自动检测输入音频的编解码器。)
该服务可以自动检测一个ogg文件是否包含vorbis或opus音频; 但这不适用于 mp4 输入。
看起来 MediaRecorder 不支持 ogg 输出,但是您可以尝试通过执行mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.WEBM);
切换到 webm mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.WEBM);
然后在RecognizeOptions
使用HttpMediaType.AUDIO_WEBM
。
Watson 还支持HttpMediaType.AUDIO_MPEG
,尽管我认为这与 MediaRecorder 的MPEG_4
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.