Получение необходимого пути к ошибке query.json при попытке запустить пример Java для распознавания речи Google

Я пытаюсь запустить пример распознавания речи потоковой передачи Java здесь: https://cloud.google.com/speech-to-text/docs/streaming-recognize#speech-streaming-mic-recognize-java

Я создал новый проект gradle в Eclipse, добавил в зависимости compile 'com.google.cloud:google-cloud-speech:1.1.0' и compile 'com.google.cloud:google-cloud-bigquery:1.70.0', а затем скопировал в пример код из ссылки в основной класс. Ничего из этой второй зависимости не используется в примере скрипта, который я вижу, но мне это нужно там, иначе я получаю такую ​​​​ошибку: Error: Could not find or load main class com.google.cloud.bigquery.benchmark.Benchmark

При запуске с добавлением обеих зависимостей я сразу получаю сообщение об ошибке в заголовке (need path to queries.json), и приложение закрывается. Что такое файл query.json и как предоставить приложению путь к нему, чтобы запустить пример проекта? API Google настроен с правильными переменными среды в моей системе, а вызовы API настроены так, чтобы их можно было разрешить с IP-адреса машины, над которой я работаю.

Вот весь скрипт класса (только скрипт в проекте):

import com.google.api.gax.rpc.ClientStream;
import com.google.api.gax.rpc.ResponseObserver; 
import com.google.api.gax.rpc.StreamController;
import com.google.cloud.speech.v1.RecognitionAudio;
import com.google.cloud.speech.v1.RecognitionConfig;
import com.google.cloud.speech.v1.RecognitionConfig.AudioEncoding;
import com.google.cloud.speech.v1.RecognizeResponse;
import com.google.cloud.speech.v1.SpeechClient;
import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
import com.google.cloud.speech.v1.SpeechRecognitionResult;
import com.google.cloud.speech.v1.StreamingRecognitionConfig;
import com.google.cloud.speech.v1.StreamingRecognitionResult;
import com.google.cloud.speech.v1.StreamingRecognizeRequest;
import com.google.cloud.speech.v1.StreamingRecognizeResponse; 
import com.google.protobuf.ByteString;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.DataLine.Info; 
import javax.sound.sampled.TargetDataLine;


public class GoogleSpeechRecognition {
    /** Performs microphone streaming speech recognition with a duration of 1 minute. */
    public static void streamingMicRecognize() throws Exception {

      ResponseObserver<StreamingRecognizeResponse> responseObserver = null;
      try (SpeechClient client = SpeechClient.create()) {

        responseObserver =
            new ResponseObserver<StreamingRecognizeResponse>() {
              ArrayList<StreamingRecognizeResponse> responses = new ArrayList<>();

              public void onStart(StreamController controller) {}

              public void onResponse(StreamingRecognizeResponse response) {
                responses.add(response);
              }

              public void onComplete() {
                for (StreamingRecognizeResponse response : responses) {
                  StreamingRecognitionResult result = response.getResultsList().get(0);
                  SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
                  System.out.printf("Transcript : %s\n", alternative.getTranscript());
                }
              }

              public void onError(Throwable t) {
                System.out.println(t);
              }
            };

        ClientStream<StreamingRecognizeRequest> clientStream =
            client.streamingRecognizeCallable().splitCall(responseObserver);

        RecognitionConfig recognitionConfig =
            RecognitionConfig.newBuilder()
                .setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
                .setLanguageCode("en-US")
                .setSampleRateHertz(16000)
                .build();
        StreamingRecognitionConfig streamingRecognitionConfig =
            StreamingRecognitionConfig.newBuilder().setConfig(recognitionConfig).build();

        StreamingRecognizeRequest request =
            StreamingRecognizeRequest.newBuilder()
                .setStreamingConfig(streamingRecognitionConfig)
                .build(); // The first request in a streaming call has to be a config

        clientStream.send(request);
        // SampleRate:16000Hz, SampleSizeInBits: 16, Number of channels: 1, Signed: true,
        // bigEndian: false
        AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
        DataLine.Info targetInfo =
            new Info(
                TargetDataLine.class,
                audioFormat); // Set the system information to read from the microphone audio stream

        if (!AudioSystem.isLineSupported(targetInfo)) {
          System.out.println("Microphone not supported");
          System.exit(0);
        }
        // Target data line captures the audio stream the microphone produces.
        TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
        targetDataLine.open(audioFormat);
        targetDataLine.start();
        System.out.println("Start speaking");
        long startTime = System.currentTimeMillis();
        // Audio Input Stream
        AudioInputStream audio = new AudioInputStream(targetDataLine);
        while (true) {
          long estimatedTime = System.currentTimeMillis() - startTime;
          byte[] data = new byte[6400];
          audio.read(data);
          if (estimatedTime > 60000) { // 60 seconds
            System.out.println("Stop speaking.");
            targetDataLine.stop();
            targetDataLine.close();
            break;
          }
          request =
              StreamingRecognizeRequest.newBuilder()
                  .setAudioContent(ByteString.copyFrom(data))
                  .build();
          clientStream.send(request);
        }
      } catch (Exception e) {
        System.out.println(e);
      }
      responseObserver.onComplete();
    }
}

person bk999    schedule 26.04.2019    source источник
comment
Похоже на дубликат stackoverflow.com/q/53026314/1031958, который был задан 6 месяцев назад без ответа от инженеров Google. , @Грэм Полли. Я предлагаю попробовать спросить их через другие каналы поддержки.   -  person Tamir Klein    schedule 26.04.2019


Ответы (1)


Хорошо, так что для меня это оказалось чем-то простым и моей ошибкой. Конфигурация запуска по умолчанию была неправильно установлена ​​для одного из классов Google вместо того, что вы назвали своим тестовым классом, содержащим код примера. Это вызвало как ошибку bigquery, так и ошибку query.json. Просто исправьте основной класс в свой тестовый класс с помощью примера кода, и он заработает. Кроме того, вам вообще не нужно включать compile 'com.google.cloud:google-cloud-bigquery:1.70.0' в свои зависимости gradle, ошибка, которая жаловалась на необходимость этого, была вызвана неправильной настройкой основного класса в конфигурации запуска.

Пример вывода

person bk999    schedule 27.04.2019