【发布时间】:2017-06-07 10:04:59
【问题描述】:
我正在尝试使用 Google Speech API 但从 Google Cloud 外部进行一些测试。在较旧的 beta 版本中,我能够指定凭据文件,但现在我无法在 SpeechClient 类中找到此选项。
如何使用 Google Speech API Java 库指定身份验证密钥?
【问题讨论】:
我正在尝试使用 Google Speech API 但从 Google Cloud 外部进行一些测试。在较旧的 beta 版本中,我能够指定凭据文件,但现在我无法在 SpeechClient 类中找到此选项。
如何使用 Google Speech API Java 库指定身份验证密钥?
【问题讨论】:
弗兰克的回答中的一些类现在已被弃用。这是对他的回答的更新。
CredentialsProvider credentialsProvider = FixedCredentialsProvider.create(ServiceAccountCredentials.fromStream(new FileInputStream("path/to/service-account.json")));
SpeechSettings settings = SpeechSettings.newBuilder().setCredentialsProvider(credentialsProvider).build();
SpeechClient speechClient = SpeechClient.create(settings);
【讨论】:
implementation 'io.grpc:grpc-okhttp:1.38.0' implementation 'io.grpc:grpc-stub:1.38.0' compileOnly 'org.apache.tomcat:annotations-api:6.0.53' // necessary for Java 9+
从此处发送的问题的跟进:https://github.com/GoogleCloudPlatform/java-docs-samples/issues/697#issuecomment-309696984
将服务帐户传递给 SpeechClient 的方法是使用以下流程:
CredentialsProvider credentialsProvider = FixedCredentialsProvider.create(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/service-account.json")));
ChannelProvider channelProvider = SpeechSettings.defaultChannelProviderBuilder().setCredentialsProvider(credentialsProvider).build();
SpeechSettings settings = SpeechSettings.defaultBuilder().setChannelProvider(channelProvider).build();
// Instantiates a client
SpeechClient speech = SpeechClient.create(settings);
【讨论】:
我知道这个答案为时已晚。但我也遇到了版本和不推荐使用的功能的问题。所以这是更新后的工作代码。
InputStream inputStream = Your.class.getResourceAsStream("path/to/the/credentials/file.json");
GoogleCredentials credentials = GoogleCredentials.fromStream(inputStream);
CredentialsProvider credentialsProvider = FixedCredentialsProvider.create(credentials);
TextToSpeechSettings settings = TextToSpeechSettings.newBuilder()
.setCredentialsProvider(credentialsProvider)
.build();
TextToSpeechClient textToSpeechClient = TextToSpeechClient.create(settings);
希望这对某人有帮助!!!
【讨论】:
我最终使用了带有 base64 音频文件的发布请求,然后在请求中添加了 Google api 密钥。
var base64 = Convert.ToBase64String(File.ReadAllBytes(file));
dynamic request = new
{
config = new
{
encoding = "LINEAR16",
sampleRateHertz = 8000,
languageCode = "en-US",
enableWordTimeOffsets = false
},
audio = new
{
content = base64
}
};
var json = JsonConvert.SerializeObject(request);
var requestJson = StringContent(json, Encoding.UTF8, "application/json");
var client = new HttpClient();
var speechToText = "";
var response = await client.PostAsync($"https://speech.googleapis.com/v1/speech:recognize?key=GOOGLE-KEY", requestJson);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var converted = JsonConvert.DeserializeObject<GcpSpeechApiResponseModel>(content);
if (converted != null) {
foreach (var result in converted.Results)
{
foreach (var alternative in result.Alternatives)
{
speechToText = speechToText + alternative.Transcript;
}
}
}
}
return speechToText;
【讨论】: