Amazon Transcribe 是一個強大的語音到文本轉換服務,能夠將不一樣語言的語音轉錄爲文本內容,以供進一步處理。本文咱們會將該服務與物聯網設備配合使用,構建一套可以支持多種語言的語音到文本通知系統,並將其用做「對講門鈴」的補充。html
藉助這樣的一套通知系統,將可以檢測造訪人士、錄製音頻、將音頻轉錄爲文本、並經過咱們熟悉的語言將文本發送至移動設備端。這套解決方案中將用到如下服務:linux
要完成本方案,咱們須要作好如下準備:安全
當傳感器檢測到指定範圍內的人員時,接入 Raspberry Pi 的揚聲器會播放初始問候語,並提示用戶錄製一條語音消息。該錄音將被髮送至 Amazon S3,由後者觸發 Lambda 函數以使用 Amazon Transcribe 將語音轉錄爲文本。轉錄完成以後,用戶將從Amazon SNS處接收轉錄的文本通知。架構
下圖所示,爲這套解決方案的工做流程。
ide
Amazon Transcribe 使用的深度學習過程名爲自動語音識別(ASR),可以按照咱們選定的語種將語音快速準確地轉換爲文本。它還能自動添加標點符號與格式,確保輸出結果具備可與手動轉錄相媲美的準確度。咱們還可使用自定義詞彙表配置 Amazon Transcribe,以獲取更準確的轉錄效果(例如,添加家中成員的姓名)。此外也能夠經過配置詞彙表去刪除轉錄結果中的某些特定詞彙(例如褻瀆或者冒犯性詞語)。Amazon Transcribe 支持多種不一樣語言。關於更多詳細信息,請參閱 Amazon Transcribe 是什麼?函數
本文將提供一套 CloudFormation 模板,該模板將建立一個輸入S3存儲桶,用於觸發 Lambda 函數以將音頻轉錄爲文本,然後經過SNS通知將文本發送給用戶。固然,模板中也包含完成上述流程所須要的權限。學習
7.選擇 Next。
8.在 Options 頁面上,選擇 Next。
9.在 Review 頁面上,查看並確認各項設置。
10.選定勾選框以確認由模板建立相關 IAM 資源。
11.選擇 Create。測試
你們能夠在 AWS CloudFormation 控制檯上查看棧狀態。一般應該會在5分鐘左右看到狀態轉換爲 CREATE_COMPLETE
。
12.從 Outputs 中記錄 BucketName 與 RaspberryPiUserName。ui
要下載歡迎消息,請完成如下步驟:編碼
4.將該文件重命名爲 greetings.mp3。
5.將文件移動至 raspberrypi/home/pi/Downloads/文件夾。
設置 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,請完成如下操做步驟:
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")
超聲波傳感器會不斷尋找正接近家門附近的人員。當檢測到有人時,揚聲器會播放歡迎消息並要求訪客開始錄音。錄音隨後會被髮送到 Amazon S3。
若是揚聲器與麥克風接入多個設備,例如 HDMI 與 USB,請配置 asoundrc文件。
將 Raspberry Pi 放置在家中可以感知到他人並錄製音頻的位置。
當該人出如今 Raspberry Pi 面前時,他們應該聽到歡迎消息。他們能夠在錄製音頻後離開,而咱們可以收到由錄製音頻轉錄而成的文本短信。
本文展現瞭如何使用 AWS 服務構建安全的語音到文本通知解決方案。若是在將來的應用場景中須要使用多種不一樣語言,將語音內容轉換爲文本,則能夠直接集成這套解決方案。