OpenCV AI Kit が届いたので、早速動かしてみた。


## OpenCV AI Kit(OAK)とは
OpenCVのコンピュータービジョン開発キット「OpenCV AI Kit」のこと
https://www.kickstarter.com/projects/opencv/opencv-ai-kit?lang=ja

kickstarterでだいぶ前に注文していたものが、本日、届きました。

今回、私が購入したのは「OAK-D」 というタイプのもので、真ん中のRGBカメラに加えてステレオのカメラがあり、このステレオカメラを使って、物体認識に加えて、物体までの距離も同時に測定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535710/9f99d69a-7aac-3f69-4514-196be6d7e74c.png)

4Kカメラと距離測定用のステレオカメラ、AIプロセッサを低コストで一つのデバイスで行えるところが、OAK-Dの売りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535710/4fc084cb-64aa-f92b-9e25-b0131a383c50.png)
出典: https://www.kickstarter.com/projects/opencv/opencv-ai-kit?lang=ja


## 環境セットアップ
こちらのサイトを参考に必要なツールをインストール
https://docs.luxonis.com/en/latest/pages/api/

Macとラズパイの両方で試してみて、どちらでも問題なく動きました。

macOS/Raspberry Pi OS

~~~bash
sudo curl -fL http://docs.luxonis.com/_static/install_dependencies.sh | bash
python3 -m pip install depthai
~~~

## Demoを動かしてみる。
OAKのデバイスとPCをUSB type-C で繋いでみました。
以下のコマンドでデモを動かせます。

mac OSの場合は特に問題なく動かせましたが、

~~~bash
git clone https://github.com/luxonis/depthai.git
cd depthai
python3 install_requirements.py
python3 depthai_demo.py
~~~

ラズパイの方は、以下のようなエラーが出てudevのルール追加をするように言われますので、

~~~
python3 depthai_demo.py
No calibration file. Using Calibration Defaults.
Using depthai module from:  /usr/local/lib/python3.7/dist-packages/depthai.cpython-37m-arm-linux-gnueabihf.so
Depthai version installed:  0.4.0.0
Depthai version required:   0.4.0.0

WARNING: Usb rules not found

Set rules: 
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules 
sudo udevadm control --reload-rules && udevadm trigger 
Disconnect/connect usb cable on host! 
~~~

エラーメッセージにあるように、以下を実行して、udevルールを追加すればOKです。

~~~bash
$ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules 
$ sudo udevadm control --reload-rules && udevadm trigger 
~~~

実行すると、縦横のX,Y軸だけでなく、距離のZ軸も同時に表示されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535710/bb249590-abc6-0c95-8b2b-b7a41849ce02.png)

子供までの距離は、1.470 m で、奥にある椅子は、2.768 m と表示されています。
実際には、子供までの距離は、1メートルもないので、近距離の精度は低いです。
奥にある椅子は、2.3 メートルくらいで、精度は十分では無いですが、距離が遠くなるほど、精度は上がると思います。

fpsに関しても、問題なく30fpsは出ています。

depthai_demo.pyを実行するときに、-cnn オプションをつけると、モデルを変更することができるようで、
以下のモデルがサポートされていました。defaultでは、mobilenet-ssd です。
全部は確認して無いですが、他のいろんなモデルも動きました。
AIプロセッサーは、インテルのMyriad Xが搭載されているので、OpenVINOのモデルを動かせます。

~~~
{
facial-landmarks-35-adas-0002,
landmarks-regression-retail-0009,
person-vehicle-bike-detection-crossroad-1016,
tiny-yolo-v3,
vehicle-detection-adas-0002,
openpose,
emotions-recognition-retail-0003,
mobilenet-ssd,
openpose2,
deeplabv3p_person,
person-detection-retail-0013,
face-detection-retail-0004,
face-detection-adas-0001,
yolo-v3,
age-gender-recognition-retail-0013,
vehicle-license-plate-detection-barrier-0106,
mobileNetV2-PoseEstimation,
human-pose-estimation-0001,
pedestrian-detection-adas-0002
}
~~~

こちらに、Social Distanceが十分に取れているかもわかるデモ等が用意されています。
https://github.com/luxonis/depthai-experiments

##まとめ
OpenCV AI Kitが届いたので、早速試してみました。
環境のセットアップも非常に簡単でした。

物体認識の精度やFPS に関しては、他のAIキットと大きな差はなさそう。
1デバイスで、距離も同時に測れるので、これからいろんなアプリケーションに応用できそう。