OpenCVコンパイルと Python Darknet - JETSON NANO 開発者キット その4

Darknet の Python スクリプトを、WEBカメラで試したい。

OpenCV

Jetson pack には、opencv 3.3 が有効化されているけれども、Pythonから呼び出す方法がわからなかったので、コンパイルしました。

しかし、OpenCVコンパイルは大変です。。。

準備

デフォルトの設定のままだと、RAMが不足するらしい。

スワップを作っておきます。

JETSON NANO 開発者キット を試す その3 - 機械学習備忘録

で、起動時に 6G のスワップメモリを確保しています。

自動コンパイル&インストールスクリプト

JEP/script at master · AastaNV/JEP · GitHub

こちから、 install_opencv4.0.0_Nano.sh を取得します。

改変

Version 4.0 から 4.1へ変更し、PKGCONFIG を吐き出すようにします。

改変作業

version の 4.0 の文字列を全て 4.1 に変更。

make の引数に、

-D OPENCV_GENERATE_PKGCONFIG=ON

を追加。

そして、

$ mkdir opencv
$ sh install_opencv4.0.0_Nano.sh opencv

 ...

$ python3 -c "import cv2; print (cv2.__version__)"
4.1.0

4時間ほどかかりました。

Darknet

インストール

通常パッケージではなく、こっちを使う。

github.com

こことの関連は、調査中

https://github.com/pjreddie/darknet

pkg-config --modversion opencv

ldd darknet

などすると、見当たらないので、.bashrc に path を追加し、

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

ファイル名を合わせる。(シンボリックリンクの方が良いかも)

$ cd /usr/local/lib/pkgconfig/
$ sudo cp opencv4.pc opencv.pc

Python から Darknet を使用する

めも (要整理)

疑問

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)

しても、 cap.get(cap.set(cv2.CAP_PROP_FRAME_WIDTH) すると、デフォルト値から変わっていない。
だが、

ret, frame = cap.read() print( frame.shape )

すると、ちゃんと変わっている。なんだろうか。