JetsonTX2でOpenCVをビルド
発端
ChainerCVのチュートリアル*1をJetson TX2で試したところ、「OpenCVが入ってないから処理時間かかるよ」みたいなWarningが表示された。
「OpenCV4Tegra入ってるのでは?」と思って調べてみたところ、Python2からは呼び出せるがPython3からは呼べなかった。(Python2から呼ぶ場合、あらかじめpython-opencvをpipしておく必要がある)
NVIDIAのフォーラム*2を見た感じだと、OpenCV4Tegraはpython3には対応してない模様。「自分でビルドしたらいけるよ」的な感じで一瞬途方に暮れたけど、フォーラムの最後に偉大なる先駆者の方が「ブログに書いたよ」と報告されていた。
そこで今回は先駆者の方に従ってTX2にOpenCVを入れてみた。
手順(の補足)
ということで、インストール手順そのものは先駆者の方*3をなぞれば基本的に大丈夫。ここではわかりにくかった箇所、つまったところを中心に補足する。
matplotlibrc の編集内容
以下に示した通り、「gtk3agg」箇所を「TkAgg」に変更する。
backend : gtk3agg # 変更後 # backend : TkAgg # 変更前
cuda_gl_interop.h の編集内容
以下のようにaarch64時にコンパイルエラーになるようになっているのをコメントアウトしまくって常にGL/gl.hをincludeするように変更する。
#if defined(__APPLE__) #include <OpenGL/gl.h> #else /* __APPLE__ */ //#if defined(__arm__) || defined(__aarch64__) //#ifndef GL_VERSION //#error Please include the appropriate gl headers before including cuda_gl_interop.h //#endif //#else #include <GL/gl.h> //#endif #endif /* __APPLE__ */
make中にコンパイルエラーになる
gccのバグレポートがどうこうってエラーでビルドができない。関係あるのか不明だけど、プリコンパイルヘッダでやたらWarningでていた。
ためしにcmakeに「-D ENABLE_PRECOMPILED_HEADERS=OFF」を追加して「make -j6」ならビルドできた。「make -j」だとメモリを使いきって同じくエラーになってしまう。プリコンパイルヘッダを使った場合も、もしかしたらメモリを使いきっていた?
インストール中もなぜかビルドが走る
よくわからないけど、「sudo make install」した時になぜかいくつかビルドが走った。そのあとインストールが走ったから特に問題なさそう。
venv環境からcv2が見えない
そのままだとvenvからcv2がimportできなかった。
pyvenv.cfgを編集して「include-system-site-packages」を「true」にしてからactivateしたらimportできた。