几步操作,轻松构建多语种语音到文本通知系统

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

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

先决条件

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

工作流与架构

当传感器检测到指定范围内的人员时,接入 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. 在 AWS 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。

大家可以在 AWS 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/文件夹。

设置 AWS IoT 凭证提供程序

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

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

设置 Raspberry Pi

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

  1. 在 Raspberry Pi 上,打开终端并安装 AWS 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 面前时,他们应该听到欢迎消息。他们可以在录制音频后离开,而我们能够收到由录制音频转录而成的文本短信。

总结

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

你可能感兴趣的