ps ハンド・トラッカーも追加しました
以前、フツーのUSBカメラでラズパイ3とdlibとface_recognitionを使って顔識別をやってみました。
またJetson Nano でも同様のことをやってみました。
これらはシングルボードコンピュータ上のCPUやGPUを使っています。
今回はカメラ側にチップ(MyriadX)を搭載していて、こちら側で推論までやってしまおうというエッジAIカメラで顔識別を試してみます。
使うカメラはこれ。
OAK-D-LITE OpenCV DepthAIカメラ(固定焦点版)
また、これの上位機種(?)にあたるOAK-D OpenCV DepthAIカメラでも同じことができると思います(持ってないので断言はできませんが…..)。
これはカメラモデルが違ってたりIMUが使えたりしてちょっとお高いですが、イメージプロセッサーはMyriad Xで同じです。このチップはMovidius NCS 2 でも使われているものなのでIntelのツールも使えるってことですね(多分)。
で、こんなことをしてみます。名前付きのエンコーダファイルを作ることで、カメラのフレーム内の人物を識別します。
構成はこんな感じで、ラズパイ4B+Ubuntu 20.04 LTSに接続して使います。
データ転送ができるType-C <-> Type-A USBケーブルを使います。
OAK-D-LITE OpenCV DepthAIカメラは、説明書もケーブルもなんもなしで送られてきます。
事前に用意しておきましょう(どうも価格をできるだけ安くするためにこうしているそうです)。
OSインストールは以下を参照
ラズパイ4(4GB) にUbuntu Server 20.04 LTS をセットアップ、GUI追加
GUI もインストールしておきます。
ラズパイでOAK-D-LITEが使えるようにセットアップ
事前準備
1 2 3 4 5 |
sudo apt update sudo apt upgrade -y sudo apt install nano sudo apt install git sudo apt install python3-pip |
クローンしてインストール
1 2 3 |
git clone https://github.com/luxonis/depthai.git cd depthai python3 install_requirements.py |
ラズパイでは以下のような文言で聞いてきます。
新しいキーリングのパスワード指定
このキーリングで使用するパスワードを指定してください。
気にせずに空で続行します。
ラズパイ(or Jetson Nano)の場合 udev rules をセットする必要があります。
1 2 3 |
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules sudo udevadm control --reload-rules && sudo udevadm trigger |
カメラをUSBポートに接続すると、こういうふうに見えています。
デモを起動してみます。object detection が走ります。
1 |
python3 depthai_demo.py |
物体検出されています。
顔識別をやってみる
OAK-D-LITEのFAQs & How-Toにdepthai-experimentへのリンクがあります。
ここには単体で動く多くのサンプルがあり、この中のgen2-face-recognitionを使います。
ライブラリ追加
1 |
pip3 install imutils |
まず、depthai-experimentsをクローンしておきます。
1 |
git clone https://github.com/luxonis/depthai-experiments.git |
depthai-experiments/gen2-face-recognition へ移動します。
1 |
cd depthai-experiments/gen2-face-recognition |
ご自分を識別する場合 以下のようなコマンドを発行(自分の名前でもいいです)
1 |
python3 main.py --name my_self |
カメラが起動するので、以下のような方向から自分の顔をフレーム内に入れます。unknownでバウンディングボックスが出てきます。精度も表示されますが気にしません。
適当なところでqキーでプロセスを落とします。
Youtube 動画で見ると分かりやすい?
depthai-experiments/gen2-face-recognitionにdatabasesという名前のフォルダーが作成され、my_self.npz というファイルが作成されています。だいたい100kB前後のサイズです。
以下のコマンドで自分を映してみると、そこそこの精度で認識されます。
1 |
python3 main.py |
cos類似度を使ってエンコーダファイルを作っているようです。複数ファイルを作ると、まだ登録していない顔は、似てるかもという名前を提示してきます。
Appendix
こんなことができるようです。ただし、OAK-D-LITEでは力不足(?)なものもあるようです。
例えば姿勢推定(gen2-human-pose)などは途中で落ちます。
-vid オプションでサンプルのビデオを使ってこういうことをやってみました。
落ちる場合のたいていの理由はこれです(まぁ、他にもありますが)。
サンプルのビデオがスローモーションなのはそれなりに意味があるようですが、それでも途中で落ちました。
Liteでpose_estimationする場合は以下を参照
Blazepose tracking with DepthAI
MoveNet Single Pose tracking on DepthAI
Jetson Nano 程度のGPUが必要なタスクもあるようです。
Jetson Nanoで学習済みモデルを使って、いろいろやってみる(4-1)姿勢推定(ResNet-18)
Jetson Nanoで学習済みモデルを使って、いろいろやってみる(4-2)姿勢推定(TensorRT)
どれなら実行可能か調べてみましょう。
gaze-estimation
gen2-age-gender
gen2-blur-faces
gen2-calc-spatials-on-host
gen2-camera-demo
gen2-class-saver-jpeg
gen2-collecting-training-data
gen2-color-isp-raw
gen2-coronamask
gen2-crowdcounting
gen2-cumulative-object-counting
gen2-custom-models
gen2-deeplabv3_depth
gen2-deeplabv3_multiclass
gen2-deeplabv3_person
gen2-depth-driven-focus
gen2-depth-mbnv2
gen2-display-detections
gen2-efficientDet
gen2-efficientnet-classification
gen2-emotion-recognition
gen2-face-detection
gen2-face-recognition
gen2-facemesh
gen2-fast-depth
gen2-fatigue-detection
gen2-fire-detection
gen2-gaze-estimation
gen2-head-posture-detection
gen2-human-machine-safety
gen2-human-pose
gen2-lanenet
gen2-license-plate-recognition
gen2-lossless-zooming
gen2-mask-detection
gen2-maskrcnn-resnet50
gen2-mega-depth
gen2-mjpeg-streaming
gen2-mobile-object-localizer
gen2-multiple-devices
gen2-nn-sync
gen2-ocr
gen2-palm-detection
gen2-pedestrian-reidentification
gen2-people-counter
gen2-people-tracker
gen2-play-encoded-stream
gen2-record-replay
gen2-road-segmentation
gen2-rtsp-streaming
gen2-seq-num-sync
gen2-social-distancing
gen2-spi
gen2-stereo-on-host
gen2-text-blur
gen2-tf-image-classification
gen2-triangulation
gen2-webrtc-streaming
gen2-wls-filter
gen2-yolo
imu-publishing
mjpeg-streaming
pcl-projection-rgb
pedestrian-reidentification
people-counter
people-tracker
point-cloud-projection
reshaping-openvino-model
rtsp-streaming
stereo_on_host
triangulation-3D-visualizer
two-stage-inference
Appendix2
Luxonis以外にもGitHub にHand tracking with DepthAIというのがあります。
OAK-D-LITE を使ってこういうことができます。
まずgitクローンしておきます。
1 |
git clone https://github.com/geaxgx/depthai_hand_tracker.git |
フォルダー移動
1 |
cd depthai_hand_tracker |
要件インストール
1 |
python3 -m pip install -r requirements.txt |
デモ実行
1 |
python3 demo.py -e -g |
じゃぁ、これを使ってどうすんの?については次の機会で….。
他に2種類のデモが用意されていますが、そのうちの1つ(3D Visualization)はNVIDIAのGPUが無いとスムースには動かないそうです(確かに、ラズパイだとしんどいです)。こんな感じのもの。
Jetson で試してみます。3D空間で手の動きをシミュレートしています(深度カメラならでは)、NVIDIA版のメタバース(Omniverse)に接続して何やらできそうな雰囲気です(^^)。…ただし、Omniverseを無料版で構築するにはRTX2080以上のGPUが必要なようですけど。
参
Jetson Nanoで学習済みモデルを使って、いろいろやってみる(4-3)手の形推定(trt_pose_hand)
Appendix3
Leave a Reply