序論
ボンジュールお姫様お殿様、マドモアゼル、ギークの皆様。久しぶりに投稿いたします。
今日はOpenCVにcontributeするぜ!と思ったときにunit test実行で引っかかった人向けの記事です。
背景
OpenCVにcontributeしようとすると、unit testを作ることを要求されます。まあ当然ですね。
その場合、自動で走るCIで行うテストではなく、事前に手元でunit testを実行したほうが速く開発できますね。
しかし、単純にopencvをビルドしただけの場合、build/bin/opencv_test_* を実行すると、大抵の場合大量のエラーがでます。
これについては正式documentには何も書かれていません。
そこで、ネットで色々検索して実行したのですが、情報が散らばっており、これでできる!というものが見当たらなかったのでここでまとめておきます。
そもそもopencvにcontributeしようとする人が少ないから情報も少ないのかもしれませんね。
単純にunit testを実行した際のエラーメッセージ
例えばbuild/bin/opencv_test_imgproc を単純に実行した際のエラーは下記のようなものです。
/opencv_test_imgproc実行時のエラーメッセージ
[ FAILED ] Imgproc_Canny.accuracy (23 ms)
[ RUN ] Imgproc_Canny.accuracy_deriv
[ WARN:0@9.352] global /home/hoge/opencv/modules/imgcodecs/src/loadsave.cpp (239) findDecoder imread_('shared/fruits.png'): can't open/read file: check file path/integrity
/home/hoge/opencv/modules/ts/src/ts.cpp:618: Failure
Failed
failure reason: cvError invoked
test case #0
seed: ffffffffffffffff
LOG:
Canny(size = 1 x 42, aperture_size = 5, threshold1 = 685.923, threshold2 = 160.56, L2 = TRUE) test_cpp = FALSE (test case #0)
OpenCV Error:
Assertion failed (!ssize.empty()) in resize, file /home/hoge/opencv/modules/imgproc/src/resize.cpp, line 4052
OpenCV Error:
Assertion failed (!ssize.empty()) in resize, file /home/hoge/opencv/modules/imgproc/src/resize.cpp, line 4052
エラーの原因
上記エラーの原因は、エラーメッセージに "can't open/read file" とあるとおり、データが無いからです。
OpenCVのunit testを行うのには、sampleの実行に必要なデータに加えて、追加のデータが必要です。
また、それがみえるようにする環境変数の設定も必要です。
具体的な解決法を以下にまとめます。
OpenCVのunit testの動かし方
-
opencv_extraのpull
はじめにopencvをpullしておき、pullしたopencvのdirectoryと同じ階層(並列)にopencv_extraを以下のようにpullします。
git pull git@github.com:opencv/opencv_extra.git
-
opencvのbuild
OpenCVのbuild時、cmakeに、以下のようにOPENCV_TEST_DATA_PATH optionをいれます。
下記で、${ROOTDIR}は自分がopencvを配置した上のdirectoryです。
cmake -D OPENCV_EXTRA_MODULES_PATH=${ROOTDIR}/opencv_contrib/modules \ -D OPENCV_TEST_DATA_PATH=${ROOTDIR}/opencv_extra/testdata \ -D BUILD_TESTS=ON -D BUILD_PERF_TESTS=ON \ -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=Debug \ ${ROOTDIR}/opencv
-
環境変数の設定
export OPENCV_TEST_DATA_PATH=${ROOTDIR}/opencv_extra/testdata/
-
unit testの実行
あとは通常通りunit testのバイナリを実行するだけです。
build/bin/opencv_test_imgproc
まとめ
以上、opencvのunit testの手動での実行方法でした。
次回は、見えそうで見えない、スカートでの座り方について書きたいと思います。