0

googleapisパッケージの Google Speech To Text API を使用しています。しかし、RecognizeRequest.fromJson の送信中にアプリケーション アセット フォルダーにあるローカル オーディオ ファイルをオーディオ データとして使用する方法を説明するドキュメント (ダーツとフラッター用) は見つかりませんでした。コードで _json のオーディオ コンテンツの代わりにローカル ファイルを使用する方法を知りたいです。前もって感謝します。

    final httpClient = await clientViaServiceAccount(_credentials, _scopes);
    try {
      final speech2Text = SpeechApi(httpClient);

      final _json = {
        "config": {
          "encoding": "FLAC",
          "sampleRateHertz": 16000,
          "languageCode": "en-US",
          "enableWordTimeOffsets": false
        },
        "audio": {"uri": "gs://cloud-samples-tests/speech/brooklyn.flac"}
      };
      final _recognizeRequest = RecognizeRequest.fromJson(_json);
      await speech2Text.speech.recognize(_recognizeRequest).then((response) {
        for (var result in response.results) {
          print(result.toJson());
        }
      });
    } finally {
      httpClient.close();
    }
  }
4

1 に答える 1

0

このgoogle_speechパッケージの例を見て、ようやくそれを行うことができました。

  1. オーディオ ファイルをアセットとして pubsepec.yaml に追加します。
assets:
- assets/brooklyn.flac
  1. 次に、アセットからファイルをコピーします。
Future<void> _copyFileFromAssets(String name) async {
  var data = await rootBundle.load('assets/$name');
  final directory = await getApplicationDocumentsDirectory();
  final path = directory.path + '/$name';
  await File(path).writeAsBytes(
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
  1. 次に、オーディオのコンテンツを取得します。
Future<List<int>> _getAudioContent(String name) async {
  final directory = await getApplicationDocumentsDirectory();
  final path = directory.path + '/$name';
  if (!File(path).existsSync()) {
    await _copyFileFromAssets(name);
  }
  return File(path).readAsBytesSync().toList();
}
  1. コンテンツを Base64 にエンコードします。
final audio = await _getAudioContent('brooklyn.flac');
String audio64 = base64Encode(audio);
  1. エンコードされた文字列をオーディオ セクションのコンテンツ文字列として渡します。
final _json = {
   "config": {
      "encoding": "FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "enableWordTimeOffsets": false
      },
      // "audio": {"uri": "gs://cloud-samples-tests/speech/brooklyn.flac"}
   "audio": {"content": audio64},
   };

これが同様の問題を抱えている人に役立つことを願っています。

于 2021-05-10T14:33:44.347 に答える