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 件のコメント:
コメントを投稿