Jetson NanoでOAK-D OpenCV DepthAIカメラを使ってみる!
はじめに
Deep learning技術はたくさんのコンピュータリソースが必要なため, それを効率的に演算するFPGA, GPU, TPU, VPU等のプロセッサがいます. それらのプロセッサはエッジデバイスにも搭載され, Nvidia製のJetsonシリーズのボードやIntel 製のVPUを備えたカメラがあります. 今回はそうしたデバイスを組み合わせたDeep learning を行うのに適した環境を構築したので, それを紹介します.
今回試した組み合わせ
今回はGPUを備えているJetson NanoとVPUを備えているOpenCV AI Kitを組み合わせてみました. それぞれ単体で効率的にDeep learningの推論を行うことができます.
ボード | CUDAコア128基(Jetson Nano) |
カメラ | Intel® Movidius™ Myriad™ X Vision Processing Units(OpenCV AI Kit) |

準備したもの
セットアップ
OAK-D OpenCV DepthAIカメラでMediaPipe実行用にDepthAI, Jetson Nanoで推論用にTensorflowをインストールします.
DepthAI
# Disable ZRAM:
sudo systemctl disable nvzramconfig
# Create 4GB swap file
sudo fallocate -l 4G /mnt/4GB.swap
sudo chmod 600 /mnt/4GB.swap
sudo mkswap /mnt/4GB.swap
sudo -H apt install -y python3-pip
#Download and install the dependency package
sudo wget -qO- http://docs.luxonis.com/_static/install_dependencies.sh | bash
#Clone github repository
git clone https://github.com/luxonis/depthai.git
cd depthai
echo "export OPENBLAS_CORETYPE=ARMV8" >> ~/.bashrc
python3 install_requirements.py
Tensorflow
# dependency
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
# update pip
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools==49.6.0
sudo pip3 install -U --no-deps numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig
# tensorflow
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 tensorflow
サンプル
Jetson Nano + OpenCV AI Kitで手のジェスチャー認識を試してみます.
手の形の認識ができれば成功です.
git clone --recursive https://github.com/tech-life-hacking/HandGestureRecognition.git
cd HandGestureRecognition
python3 example.py
検証
手のジェスチャー認識は
- 手の画像から手の代表点の座標を抽出
- その座標をクラスタリングしてどんなジェスチャーをしているか判別
ということをしています.
前者はOpenCV AI Kitに搭載されているVPUが行っており, この処理におおよそ20msくらいかかっています.
後者はJetson NanoのGPUが行っており, おおよそ0.7msかかっています.
このようにJetson NanoとOAK-Dカメラを組み合わせると, 手のジェスチャー認識の処理時間は20ms程度になります. 他に処理をいれなければ40-50FPS程度でることになります.
OAK-D vs Raspberry Pi
手の画像から手の代表点の座標を抽出する部分の処理時間をOAK-DとRaspberry Piで実行したときで比較しました. Raspberry Pi 4によるCPU推論に比べてOAK-DのVPU推論の方が40msほど早いです.

おわりに
Jetson NanoとOAK-Dカメラを組み合わせると, 手のジェスチャー認識の処理時間は20ms程度になり, エッジデバイスでも40-50FPS出すことができました. エッジデバイスでDeep learning技術を実装する場合はRaspberry Pi以外のものも選択肢に入ってくると思います.