关于此 Codelab
1. 概览
借助 Google Cloud Speech-to-Text API,开发者可以通过易用的 API 运用强大的神经网络模型,将语音转换为 120 种语言及语言变体的文本。
在此 Codelab 中,您将重点通过 C# 使用 Speech-to-Text API。您将学习如何将英语和其他语言的音频文件发送到 Cloud Speech-to-Text API 进行转录。
学习内容
- 如何使用 Cloud Shell
- 如何启用 Speech-to-Text API
- 如何对 API 请求进行身份验证
- 如何安装适用于 C# 的 Google Cloud 客户端库
- 如何转录英语音频文件
- 如何转录带有字词时间戳的音频文件
- 如何转录不同语言的音频文件
所需条件
调查问卷
您将如何使用本教程?
您如何评价自己使用 C# 的体验?
您如何评价自己在使用 Google Cloud Platform 服务方面的经验水平?
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
激活 Cloud Shell
- 在 Cloud Console 中,点击激活 Cloud Shell
。
如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续。
预配和连接到 Cloud Shell 只需花几分钟时间。
这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。
在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设为您的项目 ID。
- 在 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`
- 在 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 的右上角打开代码编辑器:
找到 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 Console。
- 选择要关停的项目,然后点击“删除”顶部:这会安排删除项目。
了解详情
- Google Cloud Speech-to-Text API:https://cloud.google.com/speech-to-text/docs
- Google Cloud Platform 上的 C#/.NET:https://cloud.google.com/dotnet/
- Google Cloud .NET 客户端:https://googlecloudplatform.github.io/google-cloud-dotnet/
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。