树莓派4B如何安装mxnet

这期内容当中小编将会给大家带来有关树莓派4B如何安装mxnet,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前言

树莓派4B最高拥有4G内存,CPU,GPU也比3有了较高的进步,所以可以适合运行一些AI的识别任务。 但是,在树莓派上安装一个可用的环境,需要一定的准备工作。

系统准备

一般来说,我们都是用烧录软件,将raspbian系统烧录到自己的卡上的,但是为了更多用户可以使用, 一般使用8G卡做的镜像,而我们自己一般都是16G或者32G的卡,所以需要扩展。raspbian已经为我 们提供了工具,直接使用raspi-config,选择里面的Advanced Options里的Expand Filesystem,即 可使用全部TF卡空间。

安装准备

首先,我们采用pyenv来进行python版本的管理,默认python是2.7的。然后,我们用pipenv来进行python 包的管理。这里会有一些准备工作。

安装必要的依赖

pyenv安装python,是从官网下载gz包后,从源码进行安装的,编译过程中需要一些dev依赖,否则会编译失败, 或者少一些功能(如bzip2SQLite3等)

sudo apt update
sudo apt install -y libffi-dev  libbz2-dev libsqlite3-dev libatlas-base-dev libgfortran3

其中前三个是Python编译时使用的,libatlas-base-devnumpy启动时必需的包,不安装的话,之后import numpy 会出现以下错误

Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory

libgfortran3mxnet需要的库。

注意,pip install mxnet安装mxnet时,mxnet里的依赖声明,是需要不超过1.15.2numpy,所以会安装这个版本的 numpy,但实际上这个版本是不兼容的,会出现

ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 124 from C header, got 112 from PyObject

这样的报错。这时,再执行pip install -U numpy,安装最新版本的numpy(我这里是1.17.2),反而就没问题了。

安装PyQt5

我们准备用PyQt5做GUI,所以要安装,Raspbian自带PyQt5,不用安装。

但是,由于我们使用了virtualenv,在虚拟环境里,是无法直接使用系统路径下的PyQt5的,解决方法是做一个软链接到虚拟环境中。

ln -s /usr/lib/python3/dist-packages/PyQt5/ ~/.virtualenvs/cv/lib/python3.7/site-packages/
ln -s /usr/lib/python3/dist-packages/sipconfig_nd7.py ~/.virtualenvs/cv/lib/python3.7/site-packages/
ln -s /usr/lib/python3/dist-packages/sipconfig.py ~/.virtualenvs/cv/lib/python3.7/site-packages/
ln -s /usr/lib/python3/dist-packages/sip.py ~/.virtualenvs/cv/lib/python3.7/site-packages/
ln -s /usr/lib/python3/dist-packages/sip.cpython-37m-arm-linux-gnueabihf.so ~/.virtualenvs/cv/lib/python3.7/site-packages/

之后在虚拟环境cvpython中执行一下from PyQt5.QtWidgets import QApplication,看看是否正常import

安装python3-opencv

很多操作都是基于opencv完成的,所以我们还需要安装python3-opencv。虽然pip里可以查到opencv-python-armv71这个专为 树莓派的ARMv7芯片准备的包,但实际安装时显示找不到任何版本,无解,直接源码安装!

安装virtualenv环境

首先编译时需要设置python信息并安装numpy(编译opencv的python版本需要),我们这里利用virtualenv来构建相应 环境。

pip3 install virtualenv virtualenvwrapper

然后编辑~/.bashrc文件,在文末加上

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

然后可以source ~/.bashrc,也可以直接退出连接后重新进入一次。

注意 这里的pip3表示用python 3版本的pip,直接使用pip会安装2.7版本的,由于python 2将在2019年12月31日 走到生命尽头,不再进行任何的维护,所以我们都以python 3作为使用版本,目前是3.7。

接着可以执行mkvirtualenv cv -py python3,然后就会自动生成一个新的virtual environment —— cv。 执行完之后,会默认进入cv环境,以后再登录进来后,想进入cv环境,可以通过workon cv进入。

然后执行pip install numpy安装最新版本的numpy

注意 这里只需要使用pip就能调用python 3版本的了,因为我们的virtual environment创建时,指定使用3.7版本的 python

编译OpenCV

编译前准备

下载最新版本的OpenCV源码,这里包括opencv的代码和contrib的第三方贡献代码(其中包括很多不在核心内的算法)。

可以分别到 https://github.com/opencv/opencv/releases 和 https://github.com/opencv/opencv_contrib/releases 下载相应版本 (一般就是下载最新版)。注意,下载时因为文件名都是单纯的版本号加后缀名,所以请下载到不同子目录。

解压后,需要用cmake生成Makefile,所以先安装一下 sudo apt install cmake

由于我们之后的编译,将会利用全部的4个CPU核心,考虑到有些树莓派的内存只有1G,可能内存不足,而默认的交换分区 只有100MB,所以为了防止编译到一半内存溢出,可以将交换分区加大。现在新版本的Debian其实不用交换分区,而是使用 交换文件了。可以通过sudo vi /etc/dphys-swapfile,将其中的CONF_SWAPSIZE=100改成CONF_SWAPSIZE=2048来 加大交换文件。然后执行

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

来生效。记住,在编译完成之后记得重复以上操作,将交换文件大小改回100MB,因为一般来说这样就足够了。

生成Makefile

然后去opencv的目录下,执行以下命令

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE /
-D CMAKE_INSTALL_PREFIX=/usr/local /
-D OPENCV_EXTRA_MODULES_PATH=../../contrib/opencv_contrib-4.1.1/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_EXTRA_MODULES_PATH的路径,指向contrib的modules目录,请按照自己的目录结构设置。 注意 由于4.1.1版本有一个bug,所以需要修改build目录下的 modules/python3/CMakeFiles/opencv_python3.dir/link.txt的文件,将其中开头的 /usr/bin/c++ -fPIC -fsigned-char -W -Wall改为/usr/bin/c++ -fPIC -latomic -fsigned-char -W -Wall。 如果要让python 2.7版本的OpenCV也正常import,需要同样的方法修改 modules/python2/CMakeFiles/opencv_python2.dir/link.txt文件

编译并安装OpenCV

正常执行后,会生成一系列Makefile文件,然后可以执行以下操作,编译并安装OpenCV。

make -j4
sudo make install
sudo ldconfig

这样安装之后,系统会自动安装当前默认的系统版本(一般是python 2.7),所以也需要手动安装python3 的包。 我这里的方法是假设之前sudo make install安装的版本是2.7,所以这里展示安装到3.7版本。

sudo mkdir -p /usr/local/lib/python3.7/dist-packages/cv2/python-3.7
sudo ln -s /usr/local/lib/python3.7/site-packages/cv2/python-3.7/cv2.cpython-37m-arm-linux-gnueabihf.so /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.so

这样,利用以下命令可以检测是否安装成功

python2 -c "import cv2"
python3 -c "import cv2"

如果没有任何报错信息,则说明安装成功。

接着,我们还要安装到之前的cv环境下。执行以下命令即可: ln -s /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.so ~/.virtualenvs/cv/lib/python3.7/site-packages/cv2.so

然后可以通过workon cv命令切换到virtualenv下,执行python -c "import cv2",如果没有报错则说明安装成功。

上述就是小编为大家分享的树莓派4B如何安装mxnet了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/206640.html

(0)
上一篇 2021年12月3日
下一篇 2021年12月3日

相关推荐

发表回复

登录后才能评论