我有一个使用Chrome浏览器中的MediaRecorder记录的示例.webm文件。当我使用Google Speech Java客户端获取视频的转录时,它将返回空的转录。这是我的代码的样子
SpeechSettings settings = null;
Path path = Paths.get("D:\\scrap\\gcp_test.webm");
byte[] content = null;
try {
content = Files.readAllBytes(path);
settings = SpeechSettings.newBuilder().setCredentialsProvider(credentialsProvider).build();
} catch (IOException e1) {
throw new IllegalStateException(e1);
}
try (SpeechClient speech = SpeechClient.create(settings)) {
// Builds the request for remote FLAC file
RecognitionConfig config = RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setUseEnhanced(true)
.setModel("video")
.setEnableAutomaticPunctuation(true)
.setSampleRateHertz(48000)
.build();
RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(content)).build();
// RecognitionAudio audio = RecognitionAudio.newBuilder().setUri("gs://xxxx/gcp_test.webm") .build();
// Use blocking call for getting audio transcript
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();
for (SpeechRecognitionResult result : results) {
SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
System.out.printf("Transcription: %s%n", alternative.getTranscript());
}
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
如果,我使用相同的文件并访问SSIS - Script task: Replace TEXT in text file using VBscript with dynamic file path,并在演示部分中上传文件。它似乎工作正常并显示转录。我对这里出了什么问题一无所知。我验证了演示发送的请求,这里看起来像
https://cloud.google.com/speech-to-text/
我正在发送确切的参数集,但是没有用。尝试将文件上传到Cloud存储,但结果也相同(无转录)。
答案 0 :(得分:0)
经过错误和试验(并查看javascript示例)之后,我可以解决问题。音频的序列化版本应为FLAC格式。我正在将视频文件(webm)原样发送到Google Cloud。该站点上的演示使用Javascript Audio API提取音频流,然后以base64格式发送数据以使其正常工作。
这是我执行以获取输出的步骤。
使用FFMPEG从webm将音频流提取为FLAC格式。
ffmpeg -i sample.webm -vn -acodec flac sample.flac
提取的文件应使用存储云或作为ByteString发送。
在调用语音API时设置适当的模型(对于英语video
模型有效,而对于法语command_and_search
模型有效)。我对此没有任何逻辑上的理由。经过谷歌云站点上的演示反复试验后,我意识到了这一点。
答案 1 :(得分:0)
我得到了flac编码文件的结果。
示例代码产生带有时间戳的单词,
library(shiny)
ui <- fluidPage(
img(src="sample.gif", align = "left",height='250px',width='500px')
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
GCP支持不同的语言,我在示例中使用了“ en-US”。 请参考以下链接document以了解语言列表。