13

image

Amazon Transcribe 是一个强大的语音到文本转换服务,可以将不同语言的语音转录为文本内容,以供进一步处理。本文我们会将该服务与物联网设备配合使用,构建一套能够支持多种语言的语音到文本通知系统,并将其用作「对讲门铃」的补充。

借助这样的一套通知系统,将能够检测造访人士、录制音频、将音频转录为文本、并通过我们熟悉的语言将文本发送至移动设备端。这套解决方案中将用到以下服务:

先决条件

要完成本方案,我们需要做好以下准备:

*亚马逊云科技 (Amazon Web Services)账户

工作流与架构

当传感器检测到指定范围内的人员时,接入 Raspberry Pi 的扬声器会播放初始问候语,并提示用户录制一条语音消息。该录音将被发送至 Amazon S3,由后者触发 Lambda 函数以使用 Amazon Transcribe 将语音转录为文本。转录完成之后,用户将从Amazon SNS处接收转录的文本通知。

下图所示,为这套解决方案的工作流程。
image

Amazon Transcribe 使用的深度学习过程名为自动语音识别(ASR),能够按照我们选定的语种将语音快速准确地转换为文本。它还能自动添加标点符号与格式,确保输出结果具有可与手动转录相媲美的准确度。我们还可以使用自定义词汇表配置 Amazon Transcribe,以获取更准确的转录效果(例如,添加家中成员的姓名)。此外也可以通过配置词汇表去删除转录结果中的某些特定词汇(例如亵渎或者冒犯性词语)。Amazon Transcribe 支持多种不同语言。关于更多详细信息,请参阅 Amazon Transcribe 是什么?

上传 CloudFormation 栈

本文将提供一套 CloudFormation 模板,该模板将创建一个输入S3存储桶,用于触发 Lambda 函数以将音频转录为文本,而后通过SNS通知将文本发送给用户。当然,模板中也包含完成上述流程所需要的权限。

  1. 下载 CloudFormation 模板
  2. 在 Amazon CloudForamtion 控制台上,选择 Upload a template file。
  3. 选择已经下载完成的文件。
  4. 选择 Next。
  5. 在 Stack Name 部分,输入栈名称。
  6. 在 Parameters 下,使用以下输入对模板参数进行更新

image
7.选择 Next。
8.在 Options 页面上,选择 Next。
9.在 Review 页面上,查看并确认各项设置。
10.选定勾选框以确认由模板创建相关 IAM 资源。
11.选择 Create。

大家可以在 Amazon CloudFormation 控制台上查看栈状态。通常应该会在5分钟左右看到状态转换为 CREATE_COMPLETE
12.从 Outputs 中记录 BucketName 与 RaspberryPiUserName。

下载欢迎消息

要下载欢迎消息,请完成以下步骤:

  1. 在 Amazon Polly 控制台的 Plain text 选项卡上,输入欢迎信息。
  2. 在 Language and Region 部分,选择首选语言。
  3. 选择 Download MP3。

image

4.将该文件重命名为 greetings.mp3。

5.将文件移动至 raspberrypi/home/pi/Downloads/文件夹。

设置 Amazon IoT 凭证提供程序

设置 Amazon IoT 凭证之后,我们才能安全地对物联网设备进行身份验证。关于具体操作说明,请参阅如何使用 Amazon IoT 凭证提供程序消除设备中的亚马逊云科技硬编码凭证需求。在该文第3步中添加以下策略,以将文件上传至 Amazon S3(而非更新 Amazon DynamoDB表):

 {
 "Version": "2012-10-17",
 "Statement": {
 "Effect": "Allow",
 "Action": [
 "s3:PutObject"
 ],
 "Resource": "arn:aws:s3:::<sourceS3Bucket>"
 }
 }

设置 Raspberry Pi

要设置 Raspberry Pi,请完成以下操作步骤:

  1. 在 Raspberry Pi 上,打开终端并安装 Amazon CLI
  2. 为传感器创建一个 Python 文件与代码,以检测人员对象是否处于特定范围(例如30厘米到200厘米)之间。如果是,播放欢迎消息,在指定时段内(例如20秒)录制音频,而后将音频发送至 Amazon S3。具体请参见以下示例代码。
while True:
 GPIO.setmode(GPIO.BOARD)
 #Setting trigger and echo pin from ultrasonic sensor
 PIN_TRIGGER = 7
 PIN_ECHO = 11
 GPIO.setup(PIN_TRIGGER, GPIO.OUT)
 GPIO.setup(PIN_ECHO, GPIO.IN)
 GPIO.output(PIN_TRIGGER, GPIO.LOW)
 print ("Waiting for sensor to settle")
 time.sleep(2)
 print ("Calculating distance")
 GPIO.output(PIN_TRIGGER, GPIO.HIGH)
 time.sleep(0.00001)
 GPIO.output(PIN_TRIGGER, GPIO.LOW) 
 while GPIO.input(PIN_ECHO)==0:
 pulse_start_time = time.time()
 while GPIO.input(PIN_ECHO)==1:
 pulse_end_time = time.time()
 pulse_duration = pulse_end_time - pulse_start_time
 print(pulse_end_time)
 print(pulse_end_time)
 #Calculating distance in cm based on duration of pulse. 
 distance = round(pulse_duration * 17150, 2)
 print ("Distance:",distance,"cm")
 if 30 <= distance <= 200:
 cmd = "ffplay -nodisp -autoexit /home/pi/Downloads/greetings.mp3"
 print ("Starting Recorder")
 os.system(cmd)
 #Recording for 20 seconds, adding timestamp to the filename and sending file to S3
 cmd1 ='DATE_HREAD=$(date "+%s");arecord /home/pi/Desktop/$DATE_HREAD.wav -D sysdefault:CARD=1 -d 20 -r 48000;aws s3 cp /home/pi/Desktop/$DATE_HREAD.wav s3://homeautomation12121212'
 os.system(cmd1)
 else:
 print ("Nothing detected")
  1. 运行 Python 文件。

超声波传感器会不断寻找正接近家门附近的人员。当检测到有人时,扬声器会播放欢迎消息并要求访客开始录音。录音随后会被发送到 Amazon S3。

如果扬声器与麦克风接入多个设备,例如 HDMI 与 USB,请配置 asoundrc文件。

测试解决方案

将 Raspberry Pi 放置在家中能够感知到他人并录制音频的位置。

当该人出现在 Raspberry Pi 面前时,他们应该听到欢迎消息。他们可以在录制音频后离开,而我们能够收到由录制音频转录而成的文本短信。

总结

本文展示了如何使用亚马逊云科技服务构建安全的语音到文本通知解决方案。如果在未来的应用场景中需要使用多种不同语言,将语音内容转换为文本,则可以直接集成这套解决方案。

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。