Don';I don’我不知道如何从谷歌云存储中转录wav文件,以便长时间运行识别C#中的文本转换?

Don';I don’我不知道如何从谷歌云存储中转录wav文件,以便长时间运行识别C#中的文本转换?,c#,google-cloud-storage,google-cloud-speech,C#,Google Cloud Storage,Google Cloud Speech,我能够将音频文件转换为文本,只要它们不超过一分钟。我需要转录更长的文件。显然,您必须将该文件保存在云存储中,但我无法确定是否有一个命令可以执行此操作,或者我是否必须单独执行此操作。我现在使用的是: var credential = GoogleCredential.FromFile(GoogleCredentials); var channel = new Grpc.Core.Channel(SpeechClient.DefaultEndpoint.ToString(), credential.

我能够将音频文件转换为文本,只要它们不超过一分钟。我需要转录更长的文件。显然,您必须将该文件保存在云存储中,但我无法确定是否有一个命令可以执行此操作,或者我是否必须单独执行此操作。我现在使用的是:

var credential = GoogleCredential.FromFile(GoogleCredentials);
var channel = new Grpc.Core.Channel(SpeechClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
var speech = SpeechClient.Create(channel);

var response = speech.LongRunningRecognize(
    new RecognitionConfig()
        {
            Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
            LanguageCode = "en",
        },
        RecognitionAudio.FromFile(waveFile));

response = response.PollUntilCompleted();
我知道我需要在云存储中指定一个文件,如:

RecognitionAudio.FromStorageUri("gs://ldn-speech/" + waveFile);
但我不知道如何把文件放进垃圾桶。我必须在单独的步骤中或作为语音API的一部分来完成吗?我在找人给我举个例子

编辑:我发现我需要单独上传文件,并且可以使用我在语音识别过程中已经使用过的凭证文件:因此,我所需要的只是:

var credential = GoogleCredential.FromFile(GoogleCredentials);
var storage = StorageClient.Create(credential);
using (var f = File.OpenRead(fullFileName))
{
fileName = Path.GetFileName(fullFileName);
storage.UploadObject(bucketName, fileName, null);
}
var credential = GoogleCredential.FromFile(GoogleCredentials);
var storage = StorageClient.Create(credential);
using (var f = File.OpenRead(fullFileName))
{
  fileName = Path.GetFileName(fullFileName);
  storage.UploadObject(bucketName, fileName, null);
}

在你的情况下,还有另一种方法

正如您在编辑中所述,您确实需要将文件单独上传到您的云存储桶中。 如果你打算把长音频文件(超过1分钟)转录成文本,你可以考虑使用异步语音识别:

代码示例使用云存储桶存储长时间运行的转录过程的原始音频输入。它还要求您已创建并激活服务帐户

下面是一个例子:

static object AsyncRecognizeGcs(string storageUri)
{
    var speech = SpeechClient.Create();
    var longOperation = speech.LongRunningRecognize(new RecognitionConfig()
    {
        Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
        SampleRateHertz = 16000,
        LanguageCode = "en",
    }, RecognitionAudio.FromStorageUri(storageUri));
    longOperation = longOperation.PollUntilCompleted();
    var response = longOperation.Result;
    foreach (var result in response.Results)
    {
        foreach (var alternative in result.Alternatives)
        {
            Console.WriteLine($"Transcript: { alternative.Transcript}");
        }
    }
    return 0;
}
(1) 我发现我确实需要将文件单独上传到cloud storate。(2) 可以使用我在语音识别过程中已经使用过的凭证文件:因此,我只需要:

var credential = GoogleCredential.FromFile(GoogleCredentials);
var storage = StorageClient.Create(credential);
using (var f = File.OpenRead(fullFileName))
{
fileName = Path.GetFileName(fullFileName);
storage.UploadObject(bucketName, fileName, null);
}
var credential = GoogleCredential.FromFile(GoogleCredentials);
var storage = StorageClient.Create(credential);
using (var f = File.OpenRead(fullFileName))
{
  fileName = Path.GetFileName(fullFileName);
  storage.UploadObject(bucketName, fileName, null);
}
一旦进入云存储,我就可以按照我最初的想法转录它。然后在该过程完成后删除该文件,包括:

var credential = GoogleCredentials;
var storage = StorageClient.Create(credential);
using (var f = File.OpenRead(fullFileName))
{
  fileName = Path.GetFileName(fullFileName);
  storage.DeleteObject(bucketName, fileName);
}

这回答了你的问题吗?因此,这意味着(1)它完全独立于语音识别过程,(2)为准备语音API而设置的凭据都不能用于上载,以及(3)无法使用已为语音通道建立的凭据轻松上载文件。所有这些语句都是正确的吗?我把所有的代码放进去只是为了让程序启动一个错误,并说我只需要凭证文件。。。我已经为演讲准备好了。所以,我所要做的就是编辑上面的代码: