| Ubuntu 18.04, opencv-3.4.0, MATLAB / R2018a | make завершается ошибкой при неопределенной ссылке на cv :: dnn :: eperimental - PullRequest
0 голосов
/ 05 сентября 2018

Я выполнил шаги вики, чтобы установить mexopencv , но я получаю следующую ошибку:

$ make MATLABDIR=/usr/local/MATLAB/R2018a WITH_CONTRIB=true all contrib    

/tmp/mex_17713079591682_20541/Net_.o: In function `mexFunction':
    Net_.cpp:(.text+0x10dd): undefined reference to `cv::dnn::experimental_dnn_v3::Net::Net()'
    Net_.cpp:(.text+0x11ac): undefined reference to `cv::dnn::experimental_dnn_v3::readNetFromCaffe(cv::String const&, cv::String const&)'
    Net_.cpp:(.text+0x122a): undefined reference to `cv::dnn::experimental_dnn_v3::Net::~Net()'
    .. and so on

Если я вижу, что должно быть встроено в opencv, присутствует модуль dnn, что заставляет меня задуматься.

-- General configuration for OpenCV 3.4.0 =====================================

--   OpenCV modules:
--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dpm face features2d flann freetype fuzzy hdf highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python_bindings_generator reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    js python2 python3 world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv dnn_modern java matlab ovis sfm ts viz

Встроенные модули:

$ pkg-config --cflags --libs opencv
-I/usr/local/include/opencv ..etc.. -lopencv_dnn .. etc

Текущая версия opencv:

$ pkg-config --modversion opencv
3.4.0

Вопрос есть; Есть ли способ обойти / исправить это, то есть отключить / отменить связь dnn?

Или как мне на самом деле скомпилировать файл dnn, необходимый для работы этой ссылки?

{edit 1} файл фактически скомпилирован в:

$ ls /usr/local/include/opencv2/
...
bioinspired      dnn             fuzzy         imgproc              optflow               saliency      superres              videoio          xphoto.hpp
bioinspired.hpp  dnn.hpp         fuzzy.hpp     imgproc.hpp   
...

{edit 2} Отключение -lopencv_dnn в make-файле mexopencv путем добавления:

CV_LDFLAGS := $(filter-out -lopencv_dnn,$(CV_LDFLAGS))

не вариант, так как по-прежнему происходит сбой компиляции по неопределенной ссылке на cv :: dnn :: экспериментальный_днн_v3. Так что, думаю, мне нужно исправить это.

1 Ответ

0 голосов
/ 05 сентября 2018

Нашел решение моей проблемы. Причина слепо следовала за mexopencv для части установки Opencv. На шаге cmake мне пришлось использовать следующее:

# build and compile opencv-3.4.0:
$ cmake -G "Unix Makefiles" \
    -DBUILD_DOCS=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_JAVA=OFF \
    -DWITH_CUDA=OFF \
    -DWITH_CUBLAS:BOOL=OFF \
    -DWITH_CUFFT:BOOL=OFF \
    -DWITH_NVCUVID:BOOL=OFF \
    -DBUILD_opencv_cudaarithm:BOOL=OFF \
    -DBUILD_opencv_cudabgsegm:BOOL=OFF \
    -DBUILD_opencv_cudacodec:BOOL=OFF \
    -DBUILD_opencv_cudafeatures2d:BOOL=OFF \
    -DBUILD_opencv_cudafilters:BOOL=OFF \
    -DBUILD_opencv_cudaimgproc:BOOL=OFF \
    -DBUILD_opencv_cudalegacy:BOOL=OFF \
    -DBUILD_opencv_cudaobjdetect:BOOL=OFF \
    -DBUILD_opencv_cudaoptflow:BOOL=OFF \
    -DBUILD_opencv_cudastereo:BOOL=OFF \
    -DBUILD_opencv_cudawarping:BOOL=OFF \
    -DBUILD_opencv_cudev:BOOL=OFF \
    -DBUILD_opencv_java=OFF \
    -DBUILD_opencv_js=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=OFF \
    -DBUILD_opencv_ts=OFF \
    -DBUILD_opencv_world=OFF \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DOPENCV_ENABLE_NONFREE=ON \
    -DOPENCV_EXTRA_MODULES_PATH=~/cv/opencv_contrib-3.4.0/modules ~/cv/opencv-3.4.0
$ make -j8  # -j$(nproc)
$ sudo make install

# compile mexopencv = OK
$ make MATLABDIR=/usr/local/MATLAB/R2018a WITH_CONTRIB=true all contrib

Основное отличие от вики заключается в удалении следующих двух строк из шага cmake:

-DWITH_MATLAB=OFF \
-DBUILD_opencv_matlab=OFF \
...