人物認識器(yolo_deepsort)と音声認識器(speechrec)の出力をデータベース(MongoDB)に保持し、その結果に基づいて状態を変更し、その状態に応じた行動を実行するロボットシステムのサンプル。
- コードのクローン
- Dockerネットワークの作成
- mongodb用のボリュームの作成
- mongodbイメージの作成
- yolo_deepsortイメージの作成
- speechrecイメージの作成
- state_managerイメージの作成
- behavior_managerイメージの作成
https://github.com/social-robotics-lab/robot-talking-to-people.git
docker network create -d bridge mongonet
docker volume create --name mongovolume
docker pull mongo
- NVIDIA Driver for Cuda on WSLのインストール
- コードのダウンロード
- Yolo_deepsortの重みファイルのダウンロード
- Dockerビルド
https://developer.nvidia.com/cuda/wsl/download
cd yolo_deepsort
wget -P src/weights https://pjreddie.com/media/files/yolov3.weights
wget -P src/weights https://pjreddie.com/media/files/darknet53.conv.74
Download ckpt.t7 and put it to src/weights.
cd yolo_deepsort
docker build -t yolo_deepsort .
- Microsoft Azureでの音声認識サービスの登録
- コードのダウンロード
- Dockerビルド
- Azureサブスクリプションの無料アカウントを作成する。
- ポータルからCognitive Servicesを選択し、音声サービスを作成
- リソースグループは適当?、リージョンはJapan West、価格レベルはFree
- 作成できたら、ブックマークしておく(あとでAPIキーをコピーするとき便利なため)
「Azure 音声認識サービス 使い方」などで検索し、やり方を調べる。
cd speechrec
docker build -t speechrec .
cd state
docker build -t state_manager .
cd behavior
docker build -t behavior_manager .
- mongodbコンテナの起動
- yolo_deepsortコンテナの起動
- speechrecコンテナの起動
- state_managerコンテナの起動
- behavior_managerコンテナの起動
- Sotaから映像を送信
- Sotaから音声を送信
docker run --rm -it --net mongonet --mount type=volume,src=mongovolume,dst=/data/db -p 27017:27017 --name mongo mongo
GPUを使わない場合は--gpus all
と--gpu
を削除する。
cd yolo_deepsort
docker run --rm -it --net mongonet --mount type=bind,source="$(pwd)"/src,target=/tmp -p 5000:5000/udp --gpus all yolo_deepsort python app.py --gpu
cd speechrec
docker run --rm -it --net mongonet --mount type=bind,source="$(pwd)"/src,target=/tmp -p 5001:5001/udp speechrec python app.py --api_key <api_key>
cd state
docker run --rm -it --net mongonet --mount type=bind,source="$(pwd)"/src,target=/tmp state_manager python app.py
cd behavior
docker run --rm -it --net mongonet --mount type=bind,source="$(pwd)"/src,target=/tmp behavior_manager python app.py
Sotaにログイン後
cd ffmpeg
./ffmpeg -f v4l2 -s 320x240 -thread_queue_size 8192 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -f h264 udp://<host's ip>:5000?pkt_size=1024
Windows terminalで
ffmpeg -re -f dshow -i video="Surface Camera Front" -s 320x240 -r 30 -c:v libx264 -preset ultrafast -tune zerolatency -an -f h264 udp://localhost:5000?pkt_size=1024
※Surface~の部分に入れる文字列はffmpeg -list_devices true -f dshow -i dummy
で調べられる。
Sotaにログイン後
cd ffmpeg
./ffmpeg -channels 1 -f alsa -thread_queue_size 8192 -i hw:2 -preset ultrafast -tune zerolatency -ac 1 -c:a pcm_s16le -ar 16000 -f s16le udp://<host's ip>:5001?pkt_size=1024
Windows terminalで
ffmpeg -f dshow -ac 1 -thread_queue_size 8192 -i audio="マイク配列 (Realtek High Definition Audio(SST))" -f s16le -c:a pcm_s16le -ar 16000 udp://127.0.0.1:5001?pkt_size=1024
※マイク配列~の部分に入れる文字列はffmpeg -list_devices true -f dshow -i dummy
で調べられる。
MongoDB compassを利用する。公式サイト: https://www.mongodb.com/ja-jp/products/compass