Проблема транскрипции речи в текст с IBM Уотсон
Я изо всех сил пытаюсь заставить транскрипцию работать в моем приложении для Android, используя службу речи IBM to text. Ниже приведен код для записи файлов и расшифровки файлов.
Пример кода я взял Ватсона из ссылки на github
выходы медиа-рекордера
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));
}
Я получил имя пользователя, пароль и URL-адрес из моей учетной записи Bluemix.
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 с речью Уотсона в текст.
1 ответ
Я выбрал Audio_OGG, потому что в документации написано: audio/ogg (Сервис автоматически обнаруживает кодек входного аудио.)
Служба может автоматически определять, содержит ли файл ogg vorbis или opus audio; но это не сработает для ввода mp4.
Похоже, что MediaRecorder не поддерживает вывод ogg, но вы можете попробовать переключиться на webm, выполнив mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.WEBM);
а затем с помощью HttpMediaType.AUDIO_WEBM
в RecognizeOptions
,
Уотсон также поддерживает HttpMediaType.AUDIO_MPEG
Хотя я не думаю, что это то же самое, что MediaRecorder MPEG_4
,
Есть также несколько рабочих примеров на https://github.com/watson-developer-cloud/java-sdk/tree/develop/examples/src/main/java/com/ibm/watson/developer_cloud/speech_to_text/v1