您是否希望訪客能在您不在家時給您留言?是否希望這樣的解決方案能夠支持您慣常使用的母語?其實很簡單,我們可以輕鬆構建起這樣一套具有成本效益的解決方案,而且只需要爲實際使用的資源付費。
本文將向大家介紹如何構建一套通知系統,其能夠檢測造訪人士、錄製音頻、將音頻轉錄爲文本、並通過您熟悉的語言將文本發送至移動設備端。這套解決方案中將用到以下服務:
- AWS CloudFormation
- AWS Lambda
- Amazon Polly
- Amazon Simple Notification Service (Amazon SNS)
- Amazon Simple Storage Service (Amazon S3)
- Amazon Transcribe
先決條件
要完成本輪演練,您需要做好以下準備:
- 運行有Noobs的Raspberry Pi 4設備
- 接入該Raspberry Pi設備的超聲波傳感器
- 麥克風
- 揚聲器
- AWS賬戶
工作流與架構
當傳感器檢測到指定範圍內的人員時,接入Raspberry Pi的揚聲器會播放初始問候語,並提示用戶錄製一條語音消息。該錄音將被髮送至Amazon S3,由後者觸發Lambda函數以使用Amazon Transcribe將語音轉錄爲文本。轉錄完成之後,用戶將從Amazon SNS處接收轉錄的文本通知。
下圖所示,爲這套解決方案的工作流程。
Amazon Transcribe使用的深度學習過程名爲自動語音識別(ASR),能夠按照您選定的語種將語音快速準確地轉換爲文本。它還能自動添加標點符號與格式,確保輸出結果具有可與手動轉錄相媲美的準確度。您還可以使用自定義詞彙表配置Amazon Transcribe,以獲取更準確的轉錄效果(例如,添加家中成員的姓名)。您也可以通過配置詞彙表去刪除轉錄結果中的某些特定詞彙(例如褻瀆或者冒犯性詞語)。Amazon Transcribe支持多種不同語言。關於更多詳細信息,請參閱Amazon Transcribe是什麼?
上傳CloudFormation棧
本文將提供一套CloudFormation模板,該模板將創建一個輸入S3存儲桶,用於觸發Lambda函數以將音頻轉錄爲文本,而後通過SNS通知將文本發送給用戶。當然,模板中也包含完成上述流程所需要的權限。
- 下載 CloudFormation模板。
- 在AWS CloudForamtion控制檯上,選擇 Upload a template file 。
- 選擇您已經下載完成的文件。
- 選擇Next 。
- 在 Stack Name 部分,輸入您的棧名稱。
- 在 Parameters 下,使用以下輸入對模板參數進行更新
參數 | 默認 | 說明 |
---|---|---|
MobileNumber |
必填 | 一個可接收SNS通知的有效手機號碼。 |
LanguageCode |
必填 | 音頻文件的語言代碼,例如English US。 |
SourceS3Bucket |
必填 | 一個唯一的存儲桶名稱。 |
- 選擇Next 。
- 在 Options頁面上,選擇Next 。
- 在Review 頁面上,查看並確認各項設置。
- 選定勾選框以確認由模板創建相關IAM資源。
- 選擇Create 。
大家可以在AWS CloudFormation控制檯上查看棧狀態。您應該會在5分鐘左右內看到狀態轉換爲CREATE_COMPLETE
。
- 從 Outputs 中記錄
BucketName
與RaspberryPiUserName
。
下載歡迎消息
要下載歡迎消息,請完成以下步驟:
- 在Amazon Polly控制檯的 Plain text 選項卡上,輸入您的歡迎信息。
- 在 Language and Region 部分,選擇您的首選語言。
- 選擇Download MP3 。
- 將該文件重命名爲
greetings.mp3
。 - 將文件移動至
raspberrypi /home/pi/Downloads/
文件夾。
設置AWS IoT憑證提供程序
設置AWS IoT憑證之後,我們才能安全地對物聯網設備進行身份驗證。關於具體操作說明,請參閱如何使用AWS IoT憑證提供程序消除設備中的AWS硬編碼憑證需求。在該文第3步中添加以下策略,以將文件上傳至Amazon S3(而非更新Amazon DynamoDB表):
Json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<sourceS3Bucket>"
}
}
設置Raspberry Pi
要設置Raspberry Pi,請完成以下操作步驟:
- 在Raspberry Pi上,打開終端並安裝AWS CLI。
- 爲傳感器創建一個Python文件與代碼,以檢測人員對象是否處於特定範圍(例如30釐米到200釐米)之間。如果是,播放歡迎消息,在指定時段內(例如20秒)錄製音頻,而後將音頻發送至Amazon S3。具體請參見以下示例代碼。
Json
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")
- 運行Python文件。
超聲波傳感器會不斷尋找正接近您家附近的人員。當檢測到有人時,揚聲器會播放歡迎消息並要求訪客開始錄音。錄音隨後會被髮送到Amazon S3。
如果您的揚聲器與麥克風接入多個設備,例如HDMI與USB,請配置asoundrc文件。
測試解決方案
將Raspberry Pi放置在您家中能夠感知到他人並錄製音頻的位置。
當該人出現在Raspberyy Pi面前時,他們應該聽到歡迎消息。他們可以在錄製音頻後離開,而您能夠收到由錄製音頻轉錄而成的文本短信。
總結
本文展示瞭如何使用AWS服務構建安全的語音到文本通知解決方案。如果您在未來的應用場景中需要使用多種不同語言,將語音內容轉換爲文本,則可以直接集成這套解決方案。如果您有任何問題或者意見,請在評論區中與我們交流。
作者介紹:
Amazon Web Services公司企業級解決方案架構師。他是一位技術愛好者,樂於幫助客戶爲複雜的業務挑戰找到創新型解決方案。他對機器學習、物聯網、機器人技術以及存儲抱有濃厚興趣。在業餘時間,Vikas喜歡組裝機器人、遠足和旅行。
Amazon Web Services公司解決方案架構師。她對應用程序開發與大數據解決方案充滿熱情。Anusha與企業客戶合作,幫助他們設計、構建並擴展用於實現業務目標的應用程序。
本文轉載自亞馬遜AWS官方博客。
原文鏈接: