2016年9月20日火曜日

RASPBIAN JESSIEで自前のOpenCVを利用するには

RASPBIAN JESSIE の OpenCV に関して の解決編

OpenCVの有名な関数であるcv::CascadeClassifierが並列化されていないため、処理時間が長い。原因は、アプリケーション共有ライブラリがうまくリンクされていないためと思われる。
(この問題に関しては既視感があったことは解決後に気づいた)

原因

Linuxの共有ライブラリには、探索順番があり、アルファベット順とのこと
それゆえ、/usr/lib/arm-linux-gnueabihf/が、/usr/local/libの前に探索され、2.4.9.1がリンクされるためである。

解決方法

ターミナルで、アプリケーション実行前に
export LD_LIBRARY_PATH=/usr/local/lib
を実行することで、探索順番を変えることができる。

.bashrcに書いておくのがベター

結果

実行後、ldd リンクで確認すると所望のものに変更されている。

ldd cvbench
    linux-vdso.so.1 (0x7ef38000)
    /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76efd000)
    libopencv_calib3d.so.2.4 => /usr/local/lib/libopencv_calib3d.so.2.4 (0x76e34000)
    libopencv_contrib.so.2.4 => /usr/local/lib/libopencv_contrib.so.2.4 (0x76d58000)
    libopencv_core.so.2.4 => /usr/local/lib/libopencv_core.so.2.4 (0x76af7000)
    libopencv_features2d.so.2.4 => /usr/local/lib/libopencv_features2d.so.2.4 (0x76a4e000)
    libopencv_flann.so.2.4 => /usr/local/lib/libopencv_flann.so.2.4 (0x769df000)
    libopencv_highgui.so.2.4 => /usr/local/lib/libopencv_highgui.so.2.4 (0x7689f000)
    libopencv_imgproc.so.2.4 => /usr/local/lib/libopencv_imgproc.so.2.4 (0x76605000)
    libopencv_legacy.so.2.4 => /usr/local/lib/libopencv_legacy.so.2.4 (0x76500000)
    libopencv_ml.so.2.4 => /usr/local/lib/libopencv_ml.so.2.4 (0x76472000)
    libopencv_nonfree.so.2.4 => /usr/local/lib/libopencv_nonfree.so.2.4 (0x76449000)
    libopencv_objdetect.so.2.4 => /usr/local/lib/libopencv_objdetect.so.2.4 (0x763ca000)
    libopencv_photo.so.2.4 => /usr/local/lib/libopencv_photo.so.2.4 (0x7639d000)
    libopencv_stitching.so.2.4 => /usr/local/lib/libopencv_stitching.so.2.4 (0x76322000)
    libopencv_superres.so.2.4 => /usr/local/lib/libopencv_superres.so.2.4 (0x762f3000)
    libopencv_video.so.2.4 => /usr/local/lib/libopencv_video.so.2.4 (0x76294000)
    libopencv_videostab.so.2.4 => /usr/local/lib/libopencv_videostab.so.2.4 (0x7624f000)

0 件のコメント:

コメントを投稿