EmguCV on the Raspberry Pi with Mono #2
In September 2014, I documented how to compile EmguCV on the Raspberry Pi. At the time I didn't even know if it would work and so hacked away removing code and compile errors until it finally compiled.
My old Pi died before Christmas and the model B replacement needed a new compile of EmguCV. Here is how I did it this time, in a more refined manner.
Install Mono
This time I compiled mono 3.12.0 from a tarball download. The sudo apt-get upgrade method for Debian didn't work on the pi with 'you have held broken packages' errors. I added an export to ~/.profile to make the path to the mono bin folder persist through reboots.
Compile EmguCV
Update April 2015: See these newer instructions
This time I used EmguCV master from commit 0a47c32492c336cedecdc191459956f67ad64edc from January 15 2015.
As before, this is documenting deviations from the Ubuntu 14.04 compile instructions.
The first deviation is to cmake in which we turn a few extra things off in the compile.
cmake -DBUILD_TESTS:BOOL=FALSE -DBUILD_DOCS:BOOL=FALSE -DEMGU_CV_WITH_TIFF:BOOL=FALSE -DWITH_TBB:BOOL=FALSE -DWITH_CUDA:BOOL=FALSE -DWITH_OPENCL:BOOL=FALSE -DWITH_IPP:BOOL=FALSE -DWITH_EIGEN:BOOL=FALSE -DEMGU_CV_WITH_TESSERACT:BOOL=FALSE -DBUILD_PERF_TESTS:BOOL=FALSE
After cmake is configured, make is executed and after some time this error happened:
In file included from /home/pi/emgucv/Emgu.CV.Extern/vector_ERStat.cpp:10:0: /home/pi/emgucv/Emgu.CV.Extern/vector_ERStat.h:17:37: fatal error: opencv2/text/erfilter.hpp: No such file or directory compilation terminated. Emgu.CV.Extern/CMakeFiles/cvextern.dir/build.make:701: recipe for target 'Emgu.CV.Extern/CMakeFiles/cvextern.dir/vector_ERStat.cpp.o' failed make[2]: *** [Emgu.CV.Extern/CMakeFiles/cvextern.dir/vector_ERStat.cpp.o] Error 1 CMakeFiles/Makefile2:4468: recipe for target 'Emgu.CV.Extern/CMakeFiles/cvextern.dir/all' failed make[1]: *** [Emgu.CV.Extern/CMakeFiles/cvextern.dir/all] Error 2 Makefile:146: recipe for target 'all' failed make: *** [all] Error 2
The fix was
mkdir -p ./Emgu.CV.Extern/opencv2/text cp ./opencv_contrib/modules/text/include/opencv2/text/erfilter.hpp ./Emgu.CV.Extern/opencv2/text
After that, there was only one more error.
Linking CXX shared library ../bin/libcvextern.so [100%] Built target cvextern Linking CXX executable ../../bin/cvextern_test ../../bin/libcvextern.so: undefined reference to `cv::text::ERStat::ERStat(int, int, int, int)' collect2: ld returned 1 exit status tests/cvextern_test/CMakeFiles/cvextern_test.dir/build.make:115: recipe for target 'bin/cvextern_test' failed make[2]: *** [bin/cvextern_test] Error 1 CMakeFiles/Makefile2:3288: recipe for target 'tests/cvextern_test/CMakeFiles/cvextern_test.dir/all' failed make[1]: *** [tests/cvextern_test/CMakeFiles/cvextern_test.dir/all] Error 2 Makefile:146: recipe for target 'all' failed make: *** [all] Error 2
Interestingly this is ERStat again. This time I removed these lines from the root CMakeLists.txt
IF(NOT (ANDROID OR IOS)) ENABLE_TESTING() ADD_SUBDIRECTORY(tests/cvextern_test) ENDIF()
Run cmake and then make and EmguCV compiles successfully.