ハンズラボエンジニアブログAWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。現在、開発合宿中の中嶋です。今回、ハンズラボでは2/6-7の1泊2日で開発合宿をおこなっております。今日から一泊二日の開発合宿in湯河原温泉!!現地組は宿に到着し、そろそろ開発がスタートするようです。Pollyを使った、リアルタイム動画から人を認識させ、その人の名前をラズパイで喋らせることをやってみました。ブログを書くまでが合宿だ!と、うちのチームでは言っていたので、ちゃんと書こうと思います。Catalinaで開発をしていますAWS構成図ざっくりな構成図は以下のとおりです。事前準備として、認識させたい画像をS3にアップロードし、それをコレクションに追加します。Streamsへ映像をストリーミングするためには、上記のライブラリを使用します。(他にはJava、Android版のプロデューサーライブラリがあるようです)C++のプロデューサーライブラリにある、MacOS用のInstallマニュアルを順にやっていくと、ストリーミングができるようになります。用のコマンドのみ上手くいっている。上手くいかなかった)またハマったポイントとして、ここの部分で、各種PATHを通しますが、GST_PLUGIN_PATHをマニュアル通りにやっていくと、後々のテスト用のコマンドでkvssinkが見つからないとエラーが起きます。ありませんこれは、gstreamerのパスの場所では、kvssinkがいなかったので、マニュアルとは別のパスを通す必要がありました。Videoへストリーミングされます。StreamsからRekognitionに映像渡して、解析データをLambdaで処理する以下の記事を参考に(というかほぼパクリ)やってみました。Streamsまでデータが流れることは確認できたので、それをトリガーとしたLambdaを作成します。以下はserverless.ymlの一部抜粋です。Streamsから来たデータを受け取り、Recordごとに入っているデータをBase64でデコードしています。コレクションに追加された顔に一致しているものがあった場合、FaceIdを取得することができるため、このFaceIdが誰であるかを、DynamoDBへ問い合わせしています。IoTのTopicへPublishします。Pollyに投げて音声データを生成し、ラズパイに喋らせるこちらは以下の記事を参考に、Topicに対してLambdaが判別した名前をPublishし、それをラズパイが購読できるようになりました。Hiroaki以下はTopicを購読して受け取った名前をPollyに投げて生成したmp3を再生するコードです。f'{face_owner}さん、おはようございます。今日も1日張り切っていきましょう。f'{face_owner}さん、おはようございます。今日も1日張り切っていきましょう。{elapsed_time:.1f}秒経過")time.sleep(1)time.sleep(0.1)subscribe_iot_topic()の中でclient.subscribeし、その際に受け取ったFaceIdに紐づくmp3データがあれば、そのまま再生。なければ、Pollyに渡してmp3を生成してもらってから再生をします。IoTで証明書を発行すると、「このモノの証明書」「パブリックキー」「プライベートキー」の3つが生成されてややこしいPythonで音声を読み上げる方法であるpygameのインストール時での失敗ラズパイ(thing)の方へポリシーをアタッチするフローが参考記事と若干変わっていて、アタッチ忘れをして全くsubscribeができなかったデモっぽいやつラズパイ側で購読開始した状態をお見せします。データが来た時だけ、判別した人の名前が表示され、その名前を元に、音声が再生されます。合宿を終えて(執筆時ではまだ終わってません)今回の合宿では普段の業務で関わらないメンバーたちと一緒に、まったく使ったことのないサービスを使用して、なんとか形にすることができました。1泊2日でありましたが、自分たちの触ってみたい技術を、時間の許す限り触りまくるのは刺激的な経験でしたし、自然とモブプロ形式でお互いの得意分野を教え合うのは良い動きが出来たなと感じました。あとは純粋に普段一緒に働くメンバーの意外な一面を見れるのも、面白かったです。今回作ったものは人を認識させるだけでしたが、物体も認識させるようにできると、今後応用ができそうだなって密かに思っております。それでは以上となります。QiitaPocket。