画像や点群から人の特徴を推論するパッケージです.
APIなどのネットワークを使用しないため,ネットワークなしで,オフラインの推論が行えます.
画像や点群を入力値として推定結果を返り値とするため,ROSのService通信を用いて特徴を検出します.
(上に戻る)
ここで,本レポジトリのセットアップ方法について説明します.
以下に正常動作環境を示します.
System | Version |
---|---|
Ubuntu | 20.04 (Focal Fossa) |
ROS | Noetic Ninjemys |
Python | 3.0~ |
- ROSの
src
フォルダに移動します.
$ cd ~/catkin_ws/src/
- 本レポジトリをcloneします.
$ git clone https://github.com/TeamSOBITS/human_feature_detection.git
- レポジトリの中へ移動します.
$ cd human_feature_detection
- 依存パッケージをインストールします.
$ bash install.sh
- パッケージをコンパイルします.
$ cd ~/catkin_ws/
$ catkin_make
(上に戻る)
- なんらかのカメラを起動する
Topicとしてsensor_msgs/Image型が出ればどのカメラでも構いません.
例として,PCに付いているカメラを起動させてみる方法を以下に記述する.これが上手く行かない場合は,カメラが存在しないPCかubuntu上でカメラが使えないPCの可能性が高いので,USB接続でROS通信ができるカメラを起動する.$ roslaunch usb_cam usb_cam-test.launch
- human_feature_detection.launchというlaunchファイルを実行します.
これによって,画像から推論を行えるROSのService通信のServerが起動します.
$ roslaunch human_feature_detection human_feature_detection.launch
- [任意]TopicにPublishされているImageを送ってみる
exampleコードを準備したのでそれを使っていきます.
example/sample_2d.pyにある19行目のTopic名を「1.」で起動したカメラのTopic名に変更する.
そのままでは,「/camera/rgb/image_raw」になっていて,主にxtionなどのカメラのTopic名となっている.
以下のコマンドを実行すると,3秒のカウントダウンの後に写っていた画像についての推論を行う.(カウントダウンが開始されない場合,カメラが起動していないかTopic名が間違えている可能性があります)ターミナルに,検出した人数と,それぞれの年齢と性別,表情が出力されました.$ rosrun human_feature_detection sample_2d.py
ちなみにこの結果を反映させた画像は,result.pngとしてimagesフォルダの中に保存されていますので確認してみてください.
(上に戻る)
- 点群をPublishすることのできるカメラを起動する
depthカメラを起動してください. - 点群のTopic名を設定する
paramとしてhuman_feature_detection.launchファイルの6行目に,「1.」のTopic名に設定します.
例として,azure kinectの点群名である/points2に設定しています.
<param name="topic_name" value="/points2"/>
他のパラメータについて
<param name="target_frame" value="base_footprint"/> <!-- ロボットの基準フレーム。これによって身長を地面を基準とする頭の高さとできる -->
<param name="face_range" value="0.20"/> <!-- 顔の大体の大きさ。服の色を測る際に頭の先からどれだけ下の点群を参照するか -->
<param name="clothes_range" value="0.35"/> <!-- 服のおおよその縦幅。服の色を測る際、どれだけ広範囲を参照するか -->
- 設定が完了したら,human_feature_detection.launchというlaunchファイルを実行します.
$ roslaunch human_feature_detection human_feature_detection.launch
これによって,点群から推論を行えるROSのService通信のServerが起動します.
4. [任意]指定した点群をリクエストしてみる
exampleコードを準備したので,それを使っていきます.
3次元での推論をする場合は,カメラの前方1メートルあたりに立ってください.
$ rosrun human_feature_detection sample_3d.py
ターミナルに,身長と服の色が出力されました.
出力されない場合,「2.」で設定した点群名(topic_name)や基準のフレーム名(target_frame)が間違っている可能性が高いです.
Note
このexampleコードを使えば,ロボットのカメラから得た画像や点群から,データをServiceのServerに送信することで,人の特徴を推定することができます.
exampleフォルダを確認し,それぞれのサンプルファイルからServiceのクライアント(リクエスト側)について学びましょう.
- 2次元画像での推論(年齢と性別)をする場合
/human_feature_detection/features (human_feature_detection/Features)
- 3次元点群での推論(身長と服の色)をする場合
/human_feature_detection/feature3d (human_feature_detection/Feature3d)
(上に戻る)
現時点のバッグや新規機能の依頼を確認するためにIssueページ をご覧ください.
- Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
- DeepFace: Closing the Gap to Human-Level Performance in Face Verification
(上に戻る)