Система. java не хватает полей - PullRequest
0 голосов
/ 06 августа 2020

Я хочу разработать приложение для распознавания голоса android с помощью сервисов gcloud. Но даже если я все делаю правильно, функция SpeechClient.create () не воспринимает мои учетные данные пользователя gcloud. Поэтому я понял, когда отлаживаю классы библиотеки, чтобы увидеть, что происходит, и когда я перехожу к файлу System. java, я понял, что много чего не хватает и функция getenv () (которая используется для получения переменной среды учетных данных файл) отсутствуют поля. Это приводит к неправильной работе функции. Я уже пробовал опцию «Недействительность и перезапуск» в Android Studio и удалил, а затем переустановил свой jdk.

Код, который я хочу скомпилировать. Он начинает слушать сразу после запуска приложения в течение 60 секунд c и возвращает транскрипцию. Я получаю сообщение об ошибке при попытке поймать и получаю: «Учетные данные приложения по умолчанию недоступны. Они доступны при работе в Google Compute Engine. В противном случае необходимо определить переменную среды GOOGLE_APPLICATION_CREDENTIALS, указывающую на файл, определяющий учетные данные». Я уже пробовал все, что написано на SO и некоторых других сайтах, но не сработало. Вероятно, это из-за моей проблемы с System. java, которая является системной библиотекой.

import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
import com.google.cloud.speech.v1.SpeechRecognitionResult;
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.protobuf.ByteString;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

@RequiresApi(api = Build.VERSION_CODES.O)
public class GCloudSpeechToText {
    private static final String LOG_TAG = "GCLOUD SPEECH TO TEXT";

    public void listen() {

        try (SpeechClient speechClient = SpeechClient.create()) {

            // The path to the audio file to transcribe
            String fileName = "./resources/audio.raw";

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

            // Builds the sync recognize request
            RecognitionConfig config =
                    RecognitionConfig.newBuilder()
                            .setEncoding(AudioEncoding.LINEAR16)
                            .setSampleRateHertz(16000)
                            .setLanguageCode("tr-TR")
                            .build();
            RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(audioBytes).build();

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

            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);
                Log.d(LOG_TAG, "Transcription: " + alternative.getTranscript());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Во-вторых, изображения System. java. Они как 5 МБ, поэтому я делюсь ссылками

https://imgur.com/aYIJGrB https://imgur.com/yBLmgHp

...