幾步操做,輕鬆構建多語種語音到文本通知系統

image
Amazon Transcribe 是一個強大的語音到文本轉換服務,能夠將不一樣語言的語音轉錄爲文本內容,以供進一步處理。本文咱們會將該服務與物聯網設備配合使用,構建一套可以支持多種語言的語音到文本通知系統,並將其用做「對講門鈴」的補充。html

藉助這樣的一套通知系統,將可以檢測造訪人士、錄製音頻、將音頻轉錄爲文本、並經過咱們熟悉的語言將文本發送至移動設備端。這套解決方案中將用到如下服務:linux

先決條件

要完成本方案,咱們須要作好如下準備:安全

工做流與架構

當傳感器檢測到指定範圍內的人員時,接入 Raspberry Pi 的揚聲器會播放初始問候語,並提示用戶錄製一條語音消息。該錄音將被髮送至 Amazon S3,由後者觸發 Lambda 函數以使用 Amazon Transcribe 將語音轉錄爲文本。轉錄完成以後,用戶將從Amazon SNS處接收轉錄的文本通知。架構

下圖所示,爲這套解決方案的工做流程。
imageide

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。ui

下載歡迎消息

要下載歡迎消息,請完成如下步驟:編碼

  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:::<sourceS3Bucket>"
 }
 }

設置 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

相關文章
相關標籤/搜索