将 Speech-to-Text API 与 C# 搭配使用

1. 概览

借助 Google Cloud Speech-to-Text API,开发者可以通过在简单易用的 API 中应用强大的神经网络模型,将音频转换为 120 种语言和语言变体。

在此 Codelab 中,您将重点学习如何将 Speech-to-Text API 与 C# 搭配使用。您将学习如何将英语和其他语言的音频文件发送到 Cloud Speech-to-Text API 以进行转写。

学习内容

  • 如何使用 Cloud Shell
  • 如何启用 Speech-to-Text API
  • 如何对 API 请求进行身份验证
  • 如何安装 C# 版 Google Cloud 客户端库
  • 如何转写英语音频文件
  • 如何转写带有字词时间戳的音频文件
  • 如何转写不同语言的音频文件

所需条件

  • 一个 Google Cloud Platform 项目
  • 一个浏览器,例如 ChromeFirefox
  • 熟悉如何使用 C#

调查问卷

您将如何使用本教程?

仅阅读教程内容 阅读并完成练习

您如何评价自己使用 C# 的体验?

新手水平 中等水平 熟练水平

您如何评价自己在使用 Google Cloud Platform 服务方面的经验水平?

新手水平 中等水平 熟练水平

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shelld1264ca30785e435.png

cb81e7c8e34bc8d.png

如果您是第一次启动 Cloud Shell,系统会显示一个介绍其功能的过渡页面。如果您看到了过渡页面,请点击继续

d95252b003979716.png

预配和连接到 Cloud Shell 只需花几分钟时间。

7833d5e1c5d18f54.png

这个虚拟机已加载了所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器即可完成本 Codelab 中的大部分工作。

连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的项目 ID。

  1. 在 Cloud Shell 中运行以下命令以确认您已通过身份验证:
gcloud auth list

命令输出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目:
gcloud config list project

命令输出

[core]
project = <PROJECT_ID>

如果不是上述结果,您可以使用以下命令进行设置:

gcloud config set project <PROJECT_ID>

命令输出

Updated property [core/project].

3. 启用 Speech-to-Text API

您必须先启用 Speech-to-Text API,然后才能开始使用该 API。您可以在 Cloud Shell 中使用以下命令启用该 API:

gcloud services enable speech.googleapis.com

4. 安装 C# 版 Google Cloud Speech-to-Text API 客户端库

首先,创建一个简单的 C# 控制台应用,您将使用该应用运行 Speech-to-Text API 示例:

dotnet new console -n SpeechToTextApiDemo

您应该会看到已创建的应用和已解决的依赖项:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

接下来,前往 SpeechToTextApiDemo 文件夹:

cd SpeechToTextApiDemo/

并将 Google.Cloud.Speech.V1 NuGet 软件包添加到项目中:

dotnet add package Google.Cloud.Speech.V1
info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

现在,您可以使用 Speech-to-Text API 了!

5. 转写音频文件

在本部分中,您将转录预先录制的英语音频文件。音频文件位于 Google Cloud Storage 中。

如需转写音频文件,请从 Cloud Shell 的右上角打开代码编辑器:

fd3fc1303e63572.png

前往 SpeechToTextApiDemo 文件夹内的 Program.cs 文件,然后将代码替换为以下内容:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");         
            
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

花一两分钟时间研究一下代码,看看它是如何用于转写音频文件的*。*

Encoding 参数的用途是告知 API 您要对音频文件使用哪种类型的音频编码。Flac 是 .raw 文件的编码类型(如需了解详情,请参阅有关编码类型的文档)。

RecognitionAudio 对象中,您可以向 API 传递 Cloud Storage 中的音频文件的 URI,也可以传递音频文件的本地文件路径。在此示例中,我们使用的是 Cloud Storage URI。

返回到 Cloud Shell,运行应用:

dotnet run

您应该会看到以下输出内容:

how old is the Brooklyn Bridge

摘要

在此步骤中,您能够转录英语音频文件并打印结果。详细了解转写

6. 转写并添加字词时间戳

Speech-to-Text 可以检测转写音频的时间偏移值(时间戳)。时间偏移值能显示所提供音频中每个语音内容的开始时间和结束时间。时间偏移值表示从音频开头起已经过的时间长度,以 100 毫秒为增量。

如需通过时间偏移值转录音频文件,请前往 SpeechToTextApiDemo 文件夹内的 Program.cs 文件,然后将代码替换为以下内容:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates,
                EnableWordTimeOffsets = true
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");
     
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine($"Transcript: { alternative.Transcript}");
                    Console.WriteLine("Word details:");
                    Console.WriteLine($" Word count:{alternative.Words.Count}");
                    foreach (var item in alternative.Words)
                    {
                        Console.WriteLine($"  {item.Word}");
                        Console.WriteLine($"    WordStartTime: {item.StartTime}");
                        Console.WriteLine($"    WordEndTime: {item.EndTime}");
                    }
                }
            }
        }
    }
}

花一两分钟时间研究一下代码,看看它是如何用于转写带有字词时间戳的音频文件的。EnableWordTimeOffsets 参数用于告知 API 启用时间偏移(如需了解详情,请参阅文档)。

返回到 Cloud Shell,运行应用:

dotnet run

您应该会看到以下输出内容:

dotnet run

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count:6
  how
    WordStartTime: "0s"
    WordEndTime: "0.300s"
  old
    WordStartTime: "0.300s"
    WordEndTime: "0.600s"
  is
    WordStartTime: "0.600s"
    WordEndTime: "0.800s"
  the
    WordStartTime: "0.800s"
    WordEndTime: "0.900s"
  Brooklyn
    WordStartTime: "0.900s"
    WordEndTime: "1.100s"
  Bridge
    WordStartTime: "1.100s"
    WordEndTime: "1.500s"

摘要

在此步骤中,您能够转录包含字词时间戳的英语音频文件,并打印出结果。详细了解使用字词偏移量进行转写

7. 转写不同语言

Speech-to-Text API 支持 100 多种语言的转写!您可以点击此处查看支持的语言列表。

在本部分中,您将转录预先录制的法语音频文件。音频文件位于 Google Cloud Storage 中。

如需转写法语音频文件,请前往 SpeechToTextApiDemo 文件夹内的 Program.cs 文件,然后将代码替换为以下内容:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                LanguageCode = LanguageCodes.French.France
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-data/speech/corbeau_renard.flac");

            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

花一两分钟时间研究一下代码,看看它是如何用于转写音频文件的。LanguageCode 参数用于告知 API 音频录制内容所用的语言。

返回到 Cloud Shell,运行应用:

dotnet run

您应该会看到以下输出内容:

maître corbeau sur un arbre perché tenait en son bec un fromage

这句话出自一个广受欢迎的法国儿童故事

摘要

在此步骤中,您能够转写法语音频文件并打印结果。详细了解支持的语言

8. 恭喜!

您学习了如何使用 C# 语言通过 Speech-to-Text API 对音频文件执行各种转写操作!

清理

为避免系统因本快速入门中使用的资源向您的 Google Cloud Platform 账号收取费用,请执行以下操作:

  • 前往 Cloud Platform 控制台
  • 选择要关停的项目,然后点击顶部的“删除”:系统会安排删除该项目。

了解详情

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。