2 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
經(jīng)過(guò)錯(cuò)誤和試驗(yàn)(并查看 javascript 示例)后,我可以解決問(wèn)題。音頻的序列化版本應(yīng)為 FLAC 格式。我將視頻文件 (webm) 按原樣發(fā)送到 Google Cloud。該站點(diǎn)上的演示使用 Javascript Audio API 提取音頻流,然后以 base64 格式發(fā)送數(shù)據(jù)以使其工作。
以下是我為獲取輸出而執(zhí)行的步驟。
使用 FFMPEG 從 webm 中提取音頻流為 FLAC 格式。
ffmpeg -i sample.webm -vn -acodec flac sample.flac
提取的文件應(yīng)使用存儲(chǔ)云提供或作為 ByteString 發(fā)送。
在調(diào)用語(yǔ)音 API 時(shí)設(shè)置適當(dāng)?shù)哪P停ㄓ⒄Z(yǔ)語(yǔ)言
video
模型有效,法語(yǔ)模型有效command_and_search
)。我對(duì)此沒(méi)有任何合乎邏輯的理由。我在谷歌云站點(diǎn)上的演示中反復(fù)試驗(yàn)后意識(shí)到了這一點(diǎn)。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
我得到了 flac 編碼文件的結(jié)果。
示例代碼結(jié)果帶有時(shí)間戳的單詞,
public class SpeechToTextSample {
public static void main(String... args) throws Exception {
?try (SpeechClient speechClient = SpeechClient.create()) {
? ?String gcsUriFlac = "gs://yourfile.flac";
? ?RecognitionConfig config =
? ? ? ?RecognitionConfig.newBuilder()
? ? ? ? ? ?.setEncoding(AudioEncoding.FLAC)??
? ? ? ? ? ?.setEnableWordTimeOffsets(true)
? ? ? ? ? ?.setLanguageCode("en-US")
? ? ? ? ? ?.build();
? ?RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(gcsUriFlac).build(); //for large files
? ?OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> response = speechClient.longRunningRecognizeAsync(config, audio);
? ?while (!response.isDone()) {
? ? ? ? ? System.out.println("Waiting for response...");
? ? ? ? ? Thread.sleep(1000);
? ? ? ? }
? ?// Performs speech recognition on the audio file
? ?List<SpeechRecognitionResult> results = response.get().getResultsList();
? ?for (SpeechRecognitionResult result : results) {
? ? ? SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
? ? ?System.out.printf("Transcription: %s%n", alternative.getTranscript());
? ? ?for (WordInfo wordInfo : alternative.getWordsList()) {
? ? ? ? ?System.out.println(wordInfo.getWord());
? ? ? ? ?System.out.printf(
? ? ? ? ? ? ?"\t%s.%s sec - %s.%s sec\n",
? ? ? ? ? ? ?wordInfo.getStartTime().getSeconds(),
? ? ? ? ? ? ?wordInfo.getStartTime().getNanos() / 100000000,
? ? ? ? ? ? ?wordInfo.getEndTime().getSeconds(),
? ? ? ? ? ? ?wordInfo.getEndTime().getNanos() / 100000000);
? ? ? ?}
? ?}
?}
}
}
GCP 支持不同的語(yǔ)言,我在示例中使用了“en-US”。
添加回答
舉報(bào)