智能硬件与机器视觉:基于树莓派、Python和OpenCV
上QQ阅读APP看书,第一时间看更新

3.2.4 构建和编译OpenCV 4

在这一步中,我们将首先使用CMake构建OpenCV 4,之后使用make命令进行编译,这一步将会比较耗时间。

首先,在~/opencv目录下创建一个build子目录:


 $ cd ~/opencv
$ mkdir build
$ cd build

使用CMake来构建OpenCV 4:


 $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

注意

OPENCV_ENABLE_NONFREE=ON这个选项,把它设置为True时,可以使用SIFT、SURF以及其他具有专利的算法。

在这里,要确认OPENCV_EXTRA_MODULES_PATH的目录是我们之前下载的opencv_contrib的解压目录,如果读者在之前的小节中执行了重命名的步骤,则无须修改。如果没有重命名,则需要根据自己的情况把路径改为opencv_contrib的解压目录。

CMake执行完毕后,终端输出应当如图3-6所示,请在这里停下来确认一下Interpreter的路径是否为正确的Python 3路径,以及Numpy是否被成功安装在了虚拟环境中。

图3-6 确认是否为解压目录对应的路径

在编译之前,我们需要扩大一下交换空间(swap space),这样可以使得在编译OpenCV 4时使用树莓派的全部4核,节约时间。首先,打开文件/etc/dphys-swapfile:


 /etc/dphys-swapfile:
$ sudo nano /etc/dphys-swapfile

然后编辑CONF_SWAPSIZE:


 # set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

这样我们就把交换空间的大小由100MB增加到2048MB了。重启swap服务:


 $ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

注意

增加swap空间的大小可能会烧毁micro-SD卡,这是由于Flash存储器对数据写入具有一定的限制。当然,短时间内扩大交换空间是允许的。无论怎样,希望读者可以备份系统文件,如果在安装OpenCV和Python的过程中出现树莓派的存储卡崩溃的情况,则需要读者重新刻录系统。

接下来开始编译:


 $ make -j4

参数-j4的命令表示使用4核来编译,如果这一步命令报错,尝试去掉“-j4”再运行。

编译完成且没有报错以后,执行如下命令:


 $ sudo make install
$ sudo ldconfig

最后,不要忘记修改交换空间的大小。


 $ sudo nano /etc/dphys-swapfile

编辑CONF_SWAPSIZE变量:


 # set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100
# CONF_SWAPSIZE=2048

这样我们就把交换空间的大小由2048MB改回100MB了。重启swap服务:


 $ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

最后我们将OpenCV 4链接至创建的Python 3虚拟环境中,这一步十分重要,我们需要把OpenCV 4链接至虚拟环境的site-packages。为了保证链接的路径适应于你的树莓派,在输入下列命令的过程中建议使用Tab键自动补全目录:


 $ cd ~/.virtualenvs/py3cv4/lib/python3.5/site-packages/
$ ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
$ cd ~