Проблема транскрипции речи в текст с 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

Другие вопросы по тегам