Build error with Opencv with Inference Engine backend on raspberry
I install OpenCV 4.0.1 followed Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi , successfully compiled and installed on my raspberry. But when I want compiled Opencv with Inference Engine backend, got some error.
my env:
- Raspberry 3b+
- OS: Raspbian 9.8
- Python: 3.5.3
- GCC: 6.3.0
- Make: 4.1
- Cmake: 3.7.2
Here is my code:
install dependencies(python’s dep already done):
bash
sudo apt-get install \
cmake pkg-config \
libjpeg-dev libtiff5-dev libjasper-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev \
libgtk2.0-dev libgtk-3-dev \
libatlas-base-dev gfortran \
build-essential \
xz-utils \
libgtk2.0-dev:armhf \
libgstreamer1.0-dev:armhf \
libgstreamer-plugins-base1.0-dev:armhf
cmake param:
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="../opencv_install" \
-DOPENCV_CONFIG_INSTALL_PATH="cmake" \
-DWITH_IPP=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DPYTHON3_EXECUTABLE=/usr/bin/python3.5 \
-DPYTHON3_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so \
-DPYTHON3_INCLUDE_DIR=/usr/include/python3.5m \
-DPYTHON3_INCLUDE_DIR2=/usr/include/arm-linux-gnueabihf/python3.5m \
-DPYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
-DPYTHON3_CVPY_SUFFIX=".cpython-35m-arm-linux-gnueabihf.so" \
-DENABLE_NEON=ON \
-DCPU_BASELINE="NEON" \
-DWITH_INF_ENGINE=ON \
-DINF_ENGINE_LIB_DIRS="/home/pi/inference_engine_vpu_arm/deployment_tools/inference_engine/lib/raspbian_9/armv7l" \
-DINF_ENGINE_INCLUDE_DIRS="/home/pi/inference_engine_vpu_arm/deployment_tools/inference_engine/include" \
-DCMAKE_FIND_ROOT_PATH="/home/pi/inference_engine_vpu_arm/" \
-DENABLE_CXX11=ON ..
then make -j4
, come out a error:
bash
[ 62%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/dnn.cpp.o
cd /home/pi/opencv/opencv_build/modules/dnn && /usr/bin/c++ -DCVAPI_EXPORTS -DCV_OCL4DNN=1 -DHAVE_INF_ENGINE=1 -DHAVE_PROTOBUF=1 -DINF_ENGINE_RELEASE=2019010000 -D_USE_MATH_DEFINES -D__OPENCV_BUILD=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/pi/opencv/opencv_build -I/home/pi/opencv/modules/dnn/src -I/home/pi/opencv/modules/dnn/include -I/home/pi/opencv/opencv_build/modules/dnn -I/home/pi/opencv/modules/core/include -I/home/pi/opencv/modules/imgproc/include -I/home/pi/opencv/modules/dnn/misc/caffe -I/home/pi/opencv/modules/dnn/misc/tensorflow -I/home/pi/opencv/modules/dnn/misc/onnx -I/home/pi/opencv/3rdparty/include/opencl/1.2 -isystem /home/pi/opencv/3rdparty/protobuf/src -isystem /home/pi/inference_engine_vpu_arm/deployment_tools/inference_engine/include -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wundef -Winit-self -Wpointer-arith -Wsign-promo -Wuninitialized -Winit-self -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -mfpu=neon -mfp16-format=ieee -fvisibility=hidden -fvisibility-inlines-hidden -Wno-deprecated -Wno-missing-declarations -Wno-shadow -Wno-unused-parameter -Wno-sign-compare -Wno-invalid-offsetof -O3 -DNDEBUG -DNDEBUG -fPIC -std=c++11 -Winvalid-pch -include "/home/pi/opencv/opencv_build/modules/dnn/precomp.hpp" -o CMakeFiles/opencv_dnn.dir/src/dnn.cpp.o -c /home/pi/opencv/modules/dnn/src/dnn.cpp
/home/pi/opencv/modules/dnn/src/dnn.cpp: In member function ‘void cv::dnn::dnn4_v20190122::Net::Impl::initInfEngineBackend()’:
/home/pi/opencv/modules/dnn/src/dnn.cpp:1708:68: error: ‘class InferenceEngine::Paramete
’ has no member named ‘as’
InferenceEngine::Blob::Ptr bp = it->second.as<InferenceEngine::Blob::Ptr>();
^~
/home/pi/opencv/modules/dnn/src/dnn.cpp:1708:97: error: expected primary-expression before ‘>’ token
InferenceEngine::Blob::Ptr bp = it->second.as<InferenceEngine::Blob::Ptr>();
^
/home/pi/opencv/modules/dnn/src/dnn.cpp:1708:99: error: expected primary-expression before ‘)’ token
InferenceEngine::Blob::Ptr bp = it->second.as<InferenceEngine::Blob::Ptr>();
...
/home/pi/inference_engine_vpu_arm/deployment_tools/inference_engine/include/ie_parameter.hpp:42:71: error: no matching function for call to ‘to_string ...
@potoo, it looks like a conflict with IE versions. Please show which you downloaded and which is detected by OpenCV (see CMake summary). BTW, we just updated a wiki today and most likely you downloaded 2018R5 but OpenCV switched to 2019R1. So you need to download newer version of IE or specify it's older version manually with cmake flag:
-DINF_ENGINE_RELEASE=2018050000
.@dkurt Yes, my IE version is 2018_R5, and opencv is newest version. Thanks for you answer, I am trying your approach.
@dkurt It works, you saved me. But got another situation: open camera very slowly, cam.set() always return False no matter whether it takes effect, cam.get() can't get truth param of camera. Just like IE's built-in opencv. Is there any way to solve it?
@potoo, Have you followed https://github.com/opencv/opencv/wiki... Try different camera backends (i.e. GStreamer, CAP_GSTREAMER, of Video for Linux, CAP_V4L2). You camera might be slow due to big frame resolution and you cannot change it because of FFMPEG backend. Please check which backend is used by getting CAP_PROP_BACKEND.
@dkurt Thank you for your patience and time. I'll have a try.
Usb camera's FPS, width, height could change if I use
cam.set()
, although it always return andcam.get()
cann't get the value what I set.The truth is everything works fine when I compile opencv without IE backend, I didn't specify or change any camera backend.
@dkurt The following code is without my IE backend version:
cmake \ -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DINSTALL_PYTHON_EXAMPLES=OFF \ -DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -DBUILD_EXAMPLES=OFF \ *PYTHON's stuff* ..
@dkurt Oh my god! Thank for you advice, when I specify V4L backend, everything just liek what I long for. Thanks again.
em... I'm sorry, another error...
out = net.forward()
will raise[1] 20767 segmentation fault
@potoo, Unfortunately I can say nothing without reproducer. Let's create a separate thread if you don't mind.
thanks....