Amazon Web Services ブログ

AWS Transcribe と IoT デバイスを使用して、他言語の音声をテキストに変換して通知するシステムを構築する

留守中のご自宅で訪問者のメッセージを残したいと思ったことはありませんか? もしそのソリューションが他言語をサポートできるとしたらどうでしょうか? このソリューションは、簡単に構築でき、使用した分だけ支払うことができるので費用対効果が高いです。

この投稿では、人を感知し、音声を録音し、音声をテキストに変換し、優先言語のテキストをモバイルデバイスに送信する通知システムを構築する方法を説明します。このソリューションでは、以下のサービスを利用しています。

前提条件

このチュートリアルを完了するには、次の前提条件を満たしている必要があります。

ワークフローとアーキテクチャ

センサーが指定された範囲内にいる人を感知すると、Raspberry Pi に接続されているスピーカーで、最初の挨拶とメッセージ録音の指示を伝えます。この録音は Amazon S3 に送信されます。これにより、Lambda 関数がトリガーされ、Amazon Transcribe が音声をテキストに書き起こします。テキストの書き起こしが完了すると、ユーザーは Amazon SNS から書き起こしたテキストの通知を受け取ります。

次の図は、ソリューションのワークフローを示しています。

Amazon Transcribe は、自動音声認識 (ASR) と呼ばれる深層学習プロセスを使用して、選択した言語で音声をテキストにすばやく正確に変換します。句読点と書式が自動的に追加されるため、出力は人による文字起こしと同等の品質になります。より正確な書き起こし (たとえば、住人の名前など)をするには、カスタムボキャブラリーを使って Amazon Transcribe を設定することができます。トランスクリプトから特定の単語(乱暴な単語や不快な単語など ) を削除するように設定することもできます。Amazon Transcribe は様々な言語をサポートしています。詳細については、「Amazon Transcribe とは?」をご参照ください。

CloudFormation スタックのアップロード

この投稿では、音声からテキストに書き起こしをする Lambda 関数をトリガーする入力 S3 バケットを作成する CloudFormation テンプレート、テキストをユーザーに送信する SNS 通知、および必要な権限について解説します。

  1. CloudFormation テンプレートをダウンロードする。
  2. AWS CloudFormation コンソールで、[Upload a template file] を選択する。
  3. ダウンロードしたファイルを選択する。
  4. [次へ] をクリックする。
  5. [スタック名] に、スタックの名前を入力する。
  6. [パラメータ] 欄で、以下の入力でテンプレートのパラメータを更新する。
パラメータ デフォルト 説明
MobileNumber <入力が必要> SNS 通知を受信する利用可能な携帯電話番号
LanguageCode <入力が必要> 英語 US などのオーディオファイルの言語コード
SourceS3Bucket <入力が必要> 一意のバケット名
  1. [次へ] をクリックする。
  2. オプションページで、[次へ] をクリックする。
  3. [レビュー] ページで、設定を表示して確認する。
  4. テンプレートが IAM リソースを作成することを承認するチェックボックスをオンにする。
  5. [作成] をクリックする。

AWS CloudFormation コンソールでスタックのステータスを表示できます。約 5 分後にステータスが CREATE_COMPLETE と表示されます。

  1. 出力から BucketNameRaspberryPiUserName を記録する。

挨拶メッセージのダウンロード

挨拶メッセージをダウンロードするには、次の手順を実行します。

  1. Amazon Polly コンソールの [プレーンテキスト] タブで、挨拶を入力する。
  2. [言語とリージョン]で、使用する言語を選択する。
  3. [ダウンロード MP3] を選択する。
  4. ファイル名を greetings.mp3 に変更する。
  5. ファイルを raspberrypi / home / pi / Downloads / 上のフォルダーに移動する。

AWS IoT 認証情報プロバイダーのセットアップ

AWS IoT 認証情報を設定して、IoT デバイスを確実に認証できるようにします。手順については、「How to Eliminate the Need for Hardcoded AWS Credentials in Devices by Using the AWS IoT Credentials Provider (AWS IoT 認証情報プロバイダーを使用してデバイスでハードコーディングされた AWS 認証情報を削除する方法)」をご参照ください。Amazon DynamoDB テーブルを更新する代わりに、投稿のステップ 3 で以下のポリシーを追加して、ファイルを Amazon S3 にアップロードします。

             {
                "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 cm) に人がいるかどうかを感知し、挨拶メッセージを再生し、指定した時間 (例: 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:
                  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")
    
  3. Pythonファイルを実行する。

超音波センサーは、家に近づいてくる人を継続的に感知します。人を感知すると、スピーカーで再生し、訪問者に録音の開始を指示します。その後、音声録音は Amazon S3 に送信されます。

スピーカーとマイクが HDMI や USB などの複数のデバイスに接続されている場合は、asoundrc ファイルで設定が必要です。

ソリューションのテスト

自宅で人の感知と音声録音を行う場所を決め、Raspberry Pi を設置します。

訪問者が Raspberry Pi の前に来ると、挨拶のメッセージを聞くことができるはずです。彼らはメッセージを録音できて、去っていくでしょう。ユーザーは録音された音声のテキストメッセージを受信できるはずです。

まとめ

この投稿では、AWS サービスを使用して確実に音声をテキストに変換して通知するソリューションを構築する方法を解説しました。次回は、多言語対応の音声テキスト変換機能アプリケーションをこのソリューションに統合します。ご質問やご意見はコメント欄にお寄せください。


著者について

Ravi Gupta は、アマゾン ウェブ サービスのエンタープライズソリューションアーキテクトです。彼はテクノロジーの信奉者で、お客様がビジネスにおける複雑な課題のための革新的ソリューションと出会えるように、熱心に協力しています。関心を持っている分野は、ML、IoT、ロボット工学、ストレージです。余暇には、ロボットの製作、ハイキング、旅行を楽しんでいます。

 

 

 

Anusha Dharmalingam は、アマゾン ウェブ サービスのソリューションアーキテクトで、アプリケーション開発とビッグデータソリューションに情熱を傾けています。Anusha は、お客様と連携して、お客様のビジネス目標を達成できるようにアプリケーションの設計、構築、スケーリングの支援を行っています。