Google Cloud Speech To Text给出0个结果

时间:2019-05-22 06:47:31

标签: java google-cloud-platform google-speech-api

我正在使用Google Cloud Speech转Java文本API。

我打电话给SpeechClient.recognize时得到0条结果

pom.xml:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-speech</artifactId>
    <version>0.80.0-beta</version>
</dependency>

Java代码:

import java.io.FileInputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
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.SpeechSettings;
import com.google.protobuf.ByteString;

public class SpeechToText {

    public static void main(String[] args) {

        // Instantiates a client
        try {

            String jsonFilePath = System.getProperty("user.dir") + "/serviceaccount.json";
            FileInputStream credentialsStream = new FileInputStream(jsonFilePath);
            GoogleCredentials credentials = GoogleCredentials.fromStream(credentialsStream);
            FixedCredentialsProvider credentialsProvider = FixedCredentialsProvider.create(credentials);

            SpeechSettings speechSettings = 
                    SpeechSettings.newBuilder()
                        .setCredentialsProvider(credentialsProvider)
                        .build();       

            SpeechClient speechClient = SpeechClient.create(speechSettings);

            //SpeechClient speechClient = SpeechClient.create();

            // The path to the audio file to transcribe         
            String fileName = System.getProperty("user.dir") + "/call-recording-790.opus";

            // Reads the audio file into memory
            Path path = Paths.get(fileName);
            byte[] data = Files.readAllBytes(path);
            ByteString audioBytes = ByteString.copyFrom(data);

            System.out.println(path.toAbsolutePath());

            // Builds the sync recognize request
            RecognitionConfig config = RecognitionConfig.newBuilder().setEncoding(AudioEncoding.LINEAR16)
                    .setSampleRateHertz(8000).setLanguageCode("en-US").build();

            RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(audioBytes).build();

            System.out.println("recognize builder");

            // Performs speech recognition on the audio file
            RecognizeResponse response = speechClient.recognize(config, audio);
            List<SpeechRecognitionResult> results = response.getResultsList();

            System.out.println(results.size()); // ***** HERE 0

            for (SpeechRecognitionResult result : results) {

                // There can be several alternative transcripts for a given chunk of speech.
                // Just use the
                // first (most likely) one here.
                SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
                System.out.printf("Transcription: %s%n", alternative.getTranscript());
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

在上面的代码中,我得到的results.size为0。当我在https://cloud.google.com/speech-to-text/的演示中上传相同的作品文件时,它会正确给出输出文本。

那为什么识别调用会给出零结果?

1 个答案:

答案 0 :(得分:0)

“语音转文字”返回空响应可能有3个原因:

  1. 声音不清楚。
  2. 音频不清晰。
  3. 音频未使用正确的编码。

据我所知,原因3是造成您问题的最可能原因。要解决此问题,请检查此page以了解如何验证音频文件的编码,该编码必须与您在InitialRecognizeRequest中发送的参数相匹配。