[ OpenCV 编译安装 ] OpenCV 3.2.0 + Contrib 在 Firefly RK3399 上编译安装

[ OpenCV 编译安装 ] OpenCV 3.2.0 + Contrib 在 Firefly RK3399 上编译安装_第1张图片


§   I . §\,\mathcal{I.} §I. General Purposes: Why I wrote this?


这几天在 Firefly RK3399 上部署需要 OpenCV 3.2.0 扩展版本的算法 Demo 。在Ubuntu 18.04 x86 架构下编译 OpenCV 3.2.0 + Contrib 比较容易,因此开发调试过程中没有什么问题,但是在 Firefly RK3399 上编译就出现了许多问题,我猜可能是因为 Contrib 库对系统的自带库很有版本依赖性,故此记录。这里先备注一下 Firefly RK3399 上的系统信息:

firefly@firefly:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic

Firefly 原装的 Ubuntu 应当是 16.04,但是后来由于同事对其进行了统一的系统升级,因此全部切换成了 18.04,如果用 apt install 进行 OpenCV 安装,对应版本应当是 3.2.0。因此我选用 OpenCV 3.2.0 + Contrib 源码在 Firefly 进行编译。


§   I I . §\,\mathcal{II.} §II. Compiling Details: How I successfully compiled Opencv3.2.0+contrib?


‡   i . \quad\ddagger\,\mathcal{i.} i. Required Packages

首先我们使用 apt install 安装一些必要的依赖库:

firefly@firefly:~$ sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

以上库都是基本上必须的。

‡   i i . \quad\ddagger\,\mathcal{ii.} ii. Optional Packages

以下依赖库不是必须但是可选:

firefly@firefly:~$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

‡   i i i . \quad\ddagger\,\mathcal{iii.} iii. Compile Option Settings

我们假设已经下载了正确的 OpenCV 3.2.0 + Contrib 源码包,可以从 OpenCV 官方 GitHub 以及 OpenCV Contrib 官方 GitHub 获取。

编译选项如下:(这里要注意Python版本、contrib 目录位置等等,请依据真实情况选择)

特别补充: 这里我选择的 Python 接口是 Python3.6.9,因此我事先安装了 python3-pip、Cython、numpy。

firefly@firefly:opencv-3.2.0/build/$ cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DPYTHON_EXECUTABLE=$(which python3) \
-DPYTHON_NUMPY_INCLUDE_DIRS=/home/firefly/.local/lib/python3.6/site-packages/numpy/core/include/ \
-DPYTHON_INCLUDE_DIR=/usr/include/python3.6m \
-DPYTHON_INCLUDE_DIR2=/usr/include/aarch64-linux-gnu/python3.6m \
-DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \
../

firefly@firefly:OPENCV/build/$ make -j$(nproc --all)

firefly@firefly:OPENCV/build/$ sudo make install

§   I I I . §\,\mathcal{III.} §III. Errors Unblock: How I unblock these errors?


这次编译遇到的最大的问题是:

//usr/lib/aarch64-linux-gnu/libatk-1.0.so.0: undefined reference to 'g_log_structured_standard'
//usr/lib/aarch64-linux-gnu/libgio-2.0.so.0: undefined reference to 'g_build_filename_valist'

可以搜到的最接近的问题可以参考如下:StackOverflow。问题原因:有个旧版本的glib不提供所示的函数实现,因此需要更新glib的链接。

# Some Useful Scripts:
pkg-config --modversion glib-2.0
pkg-config --cflags --libs glib-2.0
grep -l g_log_structured_standard /usr/lib/aarch64-linux-gnu/*glib*.so*

§   I V . §\,\mathcal{IV.} §IV. Summary: What I have done?


其实通篇看来也没做啥,主要就是成功在安装了 Ubuntu 18.04 的 Firefly RK3399 上成功编译了 OpenCV 3.2.0 + Contrib。其实在使用中还是有一些问题的,毕竟 contrib 库还是不如 core 稳定啊。有什么问题还望广大专家读者不吝斧正!

你可能感兴趣的:(Engineering,opencv,compiler,linux,ubuntu)