基于亚马逊云科技构建音频转文本无服务器应用程序

Amazon Transcribe是一项基于机器学习模型自动将语音转换为文本的服务。它提供了多种可以提高文本转录准确性的功能,例如语言自定义、内容过滤、多通道音频分析和说话人语音分割。Amazon Transcribe 可用作独立的转录服务,也可以集成到应用程序中提供语音转文本功能。您可以实时转录媒体内容(流式处理),也可以转录位于 Amazon S3存储桶中的媒体文件(批处理)。

我们将介绍如何:

  • 使用 Amazon CloudFormation部署解决方案。
  • 测试解决方案。

所需的 Go 库:

  • Amazon Lambda 的 Go 库。
  • Amazon Rekognition 的 Go SDK。
  • 用于实现整个解决方案"基础设施即代码" (IaC) 的Amazon Cloud Development Kit (Amazon CDK) 的 Go 绑定 以及 Amazon CDK CLI。

应用程序简介

以下是该应用程序的工作原理:

  1. 上传 MP3 音频文件到 S3 存储桶时触发 Lambda 函数。
  2. Lambda 函数向 Amazon Transcribe 提交异步任务,最后 Amazon Transcribe 把生成的文件(包含转换后的文本)存储到另一个 S3 存储桶中。

前提条件

在开始本教程之前,需要满足以下条件:

  • 创建并登录亚马逊云科技账户。

    亚马逊云科技为开发者提供了众多免费云产品。想深入体验基于 Amazon Bedrock 部署 DeepSeek-R1 大模型,可以访问亚马逊云科技

  • Go 语言环境(v1.18 或更高版本)。

  • Amazon CDK

  • Amazon CLI

  • Git

使用 Amazon CDK 部署解决方案

克隆项目并切换到正确的目录:

javascript 复制代码
git clone https://github.com/build-on-aws/amazon-transcribe-lambda-golang-example

cd amazon-transcribe-lambda-golang-example

Amazon CDK 提供一个框架。您可以使用其支持的编程语言将云基础设施定义为代码,并通过 Amazon CloudFormation 进行预置。

调用 cdk deploy 开始部署。稍事等待后,界面上显示要创建的资源列表。需您确认后,流程才能继续。

javascript 复制代码
cd cdk

cdk deploy

# output

Bundling asset LambdaTranscribeAudioToTextGolangStack/audio-to-text-function/Code/Stage...

✨ Synthesis time: 4.42s

//.... omitted

Do you wish to deploy these changes (y/n)? y

输入 y 确认。系统开始创建应用程序所需的亚马逊云科技资源。

如果您想查看后台使用的 Amazon CloudFormation 模板,请运行 cdk synth,然后查看 cdk.out 文件夹中的内容。

您可以在终端或亚马逊云科技控制台上跟踪堆栈创建进度。在控制台上,导航至CloudFormation > Stacks > LambdaTranscribeAudioToTextGolangStack查看。

创建的资源:

  • 两个 S3 存储桶:源存储桶用于存储上传的音频文件,输出存储桶用于存储转录的文本文件。
  • 调用 Amazon Transcribe 将音频转换为文本的 Lambda 函数。
  • 以及其他资源,如 IAM 角色等。

在终端中,您将看到创建的资源。(输出中显示创建的资源名称)在本例中,CDK 创建的 S3 存储桶的名称如下:

javascript 复制代码
✅ LambdaTranscribeAudioToTextGolangStack

✨ Deployment time: 98.61s

Outputs:
LambdaTranscribeAudioToTextGolangStack.audiofilesourcebucketname = lambdatranscribeaudiotot-audiofilesourcebucket05f-182vj224hnpfl
LambdaTranscribeAudioToTextGolangStack.transcribejobbucketname = lambdatranscribeaudiotot-transcribejoboutputbucke-1gi0bu6r1d1jn
.....

下一步,测试解决方案。

语音转文本

您可以使用自己的 MP3 音频文件来测试这个解决方案。由于我非常喜欢收听 Go Time 播客,因此我将直接使用其中一集,并使用 Amazon CLI 将其(MP3 文件)上传到 S3 源存储桶。

javascript 复制代码
export SOURCE_BUCKET=<enter source S3 bucket name - check the CDK output>

curl -sL https://cdn.changelog.com/uploads/gotime/267/go-time-267.mp3 | aws s3 cp - s3://$SOURCE_BUCKET/go-time-267.mp3

# verify that the file was uploaded
aws s3 ls s3://$SOURCE_BUCKET

这将生成一个转录作业。您可以在亚马逊云科技控制台查看作业状态:Amazon Transcribe > Jobs。完成后,您应该会在输出 S3 存储桶中看到一个新文件,该文件与传的音频文件同名,但其扩展名为 .txt。这就是 Amazon Transcribe 生成输出的文本文件。

下载并打开输出文件。

javascript 复制代码
export TARGET_BUCKET=<enter target S3 bucket name - check the CDK output>

# list contents of the target bucket
aws s3 ls s3://$TARGET_BUCKET

# download the output file
aws s3 cp s3://$TARGET_BUCKET/go-time-267.txt .

文件内容包含一个 JSON payload,如下所示:

javascript 复制代码
{
 "jobName": "job-go-time-267",
 "accountId": "1234566789",
 "results": {
 "transcripts": [
 {
 "transcript": "<transcribed text output...>"
 }
 ]
 },
 "status": "COMPLETED"
}

您可以使用 transcript 属性提取实际文本。

完成端到端解决方案测试后,您可以清除实验过程中创建的资源和了解相关 Lambda 函数逻辑。

清理资源

试验完成后,运行以下命令删除实验过程中创建的资源:

javascript 复制代码
cdk destroy

#output prompt (choose 'y' to continue)

Are you sure you want to delete: LambdaTranscribeAudioToTextGolangStack (y/n)?

Lambda 函数代码说明

以下是相关 Lambda 函数逻辑的简要介绍。注意:以下示例中省略了错误处理、日志记录等代码,只展示了关键代码部分。

javascript 复制代码
func handler(ctx context.Context, s3Event events.S3Event) {
 for _, record := range s3Event.Records {

 sourceBucketName := record.S3.Bucket.Name
 fileName := record.S3.Object.Key

 err := audioToText(sourceBucketName, fileName)
 }
}

新文件上传到源存储桶时触发 Lambda 函数。Handler 函数遍历 S3 事件记录并调用 audioToText 函数。

下面是 audioToText 函数的代码。

javascript 复制代码
func audioToText(sourceBucketName, fileName string) error {

 inputFileNameFormat := "s3://%s/%s"
 inputFile := fmt.Sprintf(inputFileNameFormat, sourceBucketName, fileName)

 languageCode := "en-US"
 jobName := "job-" + sourceBucketName + "-" + fileName

 outputFileName := strings.Split(fileName, ".")[0] + "-job-output.txt"

 _, err := transcribeClient.StartTranscriptionJob(context.Background(), &transcribe.StartTranscriptionJobInput{
 TranscriptionJobName: &jobName,
 LanguageCode: types.LanguageCode(languageCode),
 MediaFormat: types.MediaFormatMp3,
 Media: &types.Media{
 MediaFileUri: &inputFile,
 },
 OutputBucketName: aws.String(outputBucket),
 OutputKey: aws.String(outputFileName),
 Settings: &types.Settings{
 ShowSpeakerLabels: aws.Bool(true),
 MaxSpeakerLabels: aws.Int32(5),
 },
 })

 return nil
}
  • audioToText 函数将一个转录作业提交到 Amazon Transcribe。
  • 转录作业配置中指定将转录结果输出到输出 S3 存储桶。

注意:输出文件的名称根据输入文件的名称派生。

总结

使用 Amazon CDK 部署了 Go Lambda 函数,用 Amazon Transcribe 将音频转换为文本,并将结果存储在另一个 S3 存储桶中。您可以尝试以下几项措施来扩展此解决方案:

  • 再构建一个由输出存储桶中的转录输出文件触发的 Lambda 函数,解析输出文件中的 JSON 内容并提取转录的文本。
  • 使用 Amazon Transcribe Streaming实时生成转录文本。
相关推荐
电子科技圈1 小时前
XMOS空间音频——在任何设备上都能提供3D沉浸式空间音频且实现更安全地聆听
经验分享·设计模式·性能优化·计算机外设·音视频
18538162800余。4 小时前
碰一碰发视频源码搭建全解析,支持OEM
音视频
聂 可 以4 小时前
推荐几个免费提取音视频文案的工具(SRT格式、通义千问、飞书妙记、VideoCaptioner、AsrTools)
音视频·飞书·开源软件
Antonio9157 小时前
【音视频】AVIO输入模式
ffmpeg·音视频
Daorigin_com7 小时前
企业级智能合同管理解决方案升级报告:道本科技携手DeepSeek打造智能合同管理新标杆
科技
科技小E7 小时前
EasyRTC音视频实时通话在线教育解决方案:打造沉浸式互动教学新体验
网络·音视频
九河云8 小时前
中药企业数字化转型:从传统制造到智能制药的跨越
大数据·人工智能·科技·重构·制造
RestCloud9 小时前
产品更新丨谷云科技ETLCloud V3.9.2版本发布
科技·系统安全·数据安全·etl·数字化转型
申耀的科技观察9 小时前
【观察】戴尔科技:构筑智算数据中心坚实底座,让企业现代化转型快人一步
科技