Search code examples
opencvraspberry-picondaopenvinoraspbian-buster

opencv import error (libopencv_dnn.so.4.5 undefined symbol)


I'd like to utilize my Movidius Neural Compute Stick 1 (NCS1) to learn deep learning.
However, when I run a sample code, the following import error occurs:

python3 emotion.py -i sample.jpg -o result.jpg
Traceback (most recent call last):
  File "emotion.py", line 1, in <module>
    import cv2
  File "/opt/intel/openvino/python/python3/cv2/__init__.py", line 129, in <module>
    bootstrap()
  File "/opt/intel/openvino/python/python3/cv2/__init__.py", line 112, in bootstrap
    import cv2
ImportError: /opt/intel/openvino/opencv/lib/libopencv_dnn.so.4.5: 
  undefined symbol: _ZN15InferenceEngine5TBlobIhSt9enable_ifILb1EvEED1Ev

I'm using a Raspberry Pi 3B.
The OS is Raspberry Pi OS 32-bit (Legacy) Buster because Bullseye doesn't support NCS1.
OpenVINO Version is l_openvino_toolkit_runtime_raspbian_p_2020.3.194.tgz, which is the last version that supports NCS1.

Here's how to reproduce.
I installed Raspberry Pi OS 32-bit (Legacy) Buster onto the microSD.
After some simple initial settings, I typed these commands to install the OpenVINO toolkit:

sudo mkdir -p /opt/intel/openvino
mkdir ~/download
cd ~/download
wget https://storage.openvinotoolkit.org/repositories/openvino/packages/2020.3/l_openvino_toolkit_runtime_raspbian_p_2020.3.194.tgz
sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_2020.3.194.tgz --strip 1 -C /opt/intel/openvino
echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc
source /opt/intel/openvino/bin/setupvars.sh
sudo usermod -a -G users "$(whoami)"
sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh

In order to set up the OpenCV environment, I typed:

sudo apt update
sudo apt install -y python3-pip
sudo apt install -y libopencv-dev
sudo apt install -y python3-numpy
pip3 install pillow

That's it.
Then, I downloaded necessary images and codes, and ran emotion.py.
The whole contents of emotion.py doesn't matter here because only the first line gives me the error.

more -10 emotion.py

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
import argparse
import sys
from openvino.inference_engine import IECore

frame_png =  cv2.imread("frame_main.png", cv2.IMREAD_UNCHANGED)
face_png =   cv2.imread("frame_face.png", cv2.IMREAD_UNCHANGED)
gender_png = cv2.imread("frame_gender.png", cv2.IMREAD_UNCHANGED)

Addtional Info:

pi@raspberrypi:~ $ python -VV
Python 2.7.16
pi@raspberrypi:~ $ python3 -VV
Python 3.7.3 (default, Oct 31 2022, 14:04:00) 
[GCC 8.3.0]

Also, I tried to use berry-conda to do a similar thing with this answer.
But, it failed because the package libprotobuf is missing:

(After berry-conda installation)
pi@raspberrypi:/tmp $ which python
/home/pi/berryconda3/bin/python
pi@raspberrypi:/tmp $ which conda
/home/pi/berryconda3/bin/conda
pi@raspberrypi:/tmp $ python --version
Python 3.6.1
pi@raspberrypi:/tmp $ conda install -c defaults libprotobuf protobuf
Fetching package metadata .....

PackageNotFoundError: Package missing in current linux-armv7l channels: 
  - libprotobuf

This berry-conda installation completely changed my previous environment above.
I don't know if I should keep using berry-conda or re-install Raspberry Pi OS 32-bit (Legacy) Buster again to do it from scratch.
Any suggestions would be greatly appreciated.


Solution

  • The error message is indicating that there is an issue with an undefined symbol in the libopencv_dnn.so.4.5 library, which suggests that there may be a compatibility issue between OpenVINO and the version of OpenCV installed on your system.

    You could try reinstalling OpenVINO and making sure that it is properly configured with your system's version of OpenCV. You could also try updating or reinstalling OpenCV.