当前位置: 首页 > news >正文

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

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。

应用程序简介

img

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

  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 部署解决方案

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

git clone https://github.com/build-on-aws/amazon-transcribe-lambda-golang-examplecd amazon-transcribe-lambda-golang-example

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

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

cd cdkcdk deploy# outputBundling asset LambdaTranscribeAudioToTextGolangStack/audio-to-text-function/Code/Stage...✨ Synthesis time: 4.42s//.... omittedDo 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 存储桶的名称如下:

✅ LambdaTranscribeAudioToTextGolangStack✨ Deployment time: 98.61sOutputs:
LambdaTranscribeAudioToTextGolangStack.audiofilesourcebucketname = lambdatranscribeaudiotot-audiofilesourcebucket05f-182vj224hnpfl
LambdaTranscribeAudioToTextGolangStack.transcribejobbucketname = lambdatranscribeaudiotot-transcribejoboutputbucke-1gi0bu6r1d1jn
.....

下一步,测试解决方案。

语音转文本

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

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 生成输出的文本文件。

img

下载并打开输出文件。

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,如下所示:

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

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

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

清理资源

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

cdk destroy#output prompt (choose 'y' to continue)Are you sure you want to delete: LambdaTranscribeAudioToTextGolangStack (y/n)?

Lambda 函数代码说明

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

func handler(ctx context.Context, s3Event events.S3Event) {for _, record := range s3Event.Records {sourceBucketName := record.S3.Bucket.NamefileName := record.S3.Object.Keyerr := audioToText(sourceBucketName, fileName)}
}

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

下面是 audioToText 函数的代码。

func audioToText(sourceBucketName, fileName string) error {inputFileNameFormat := "s3://%s/%s"inputFile := fmt.Sprintf(inputFileNameFormat, sourceBucketName, fileName)languageCode := "en-US"jobName := "job-" + sourceBucketName + "-" + fileNameoutputFileName := 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实时生成转录文本。

相关文章:

  • 阿里云域名智能解析至国内外AWS的合规化部署指南
  • Web渗透之系统入侵与提权维权
  • 第十六周蓝桥杯2025网络安全赛道
  • Docker化HBase排错实录:从Master hflush启动失败到Snappy算法未支持解决
  • 求解,如何控制三相无刷电机?欢迎到访评论
  • 5G助力智慧城市的崛起——从概念到落地的技术实践
  • Pygame跨平台打包:将游戏发布到Windows、Mac和Linux
  • 【C++】stack、queue和priority_queue的模拟实现
  • 精益数据分析(28/126):解读商业模式拼图与关键指标
  • Ubuntu20.04部署Dify(Docker方式)
  • STL中emplace实现原理是什么?
  • tigase源码学习杂记-IO处理的线程模型
  • 如何导出1寸分辨率为300及以上的照片?
  • TC3xx学习笔记-UCB BMHD使用详解(一)
  • 如何给GitHub项目提PR(踩坑记录
  • 【Linux网络】构建HTTP响应与请求处理系统 - HttpResponse从理解到实现
  • 目标检测原理简介
  • Linux系统编程之内存映射
  • AI编程方法第六弹:高效编码离不开编程者经验引导
  • 设计看似完美却测不过? Intra-Pair Skew 是「讯号完整性(Signal Integrity)」里最隐形的杀手
  • 当智驾成标配,车企暗战升级|2025上海车展
  • 乌克兰否认俄收复库尔斯克州,称战斗仍在持续
  • 最高法改判一起植物新品种侵权案:判赔逾5300万元破纪录
  • 税务部门曝光3起通过拆分经营骗享小规模纳税人税费优惠偷税案件
  • 外交部:美国是国际军控与防扩散体系的最大破坏者
  • 在黄岩朵云书院,邂逅陈丹燕与月季花的故事