这期内容当中小编将会给大家带来有关树莓派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依赖,否则会编译失败, 或者少一些功能(如bzip2
,SQLite3
等)
sudo apt update sudo apt install -y libffi-dev libbz2-dev libsqlite3-dev libatlas-base-dev libgfortran3
其中前三个是Python
编译时使用的,libatlas-base-dev
是numpy
启动时必需的包,不安装的话,之后import numpy
会出现以下错误
Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory
而libgfortran3
是mxnet
需要的库。
注意,pip install mxnet
安装mxnet
时,mxnet
里的依赖声明,是需要不超过1.15.2
的numpy
,所以会安装这个版本的 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/
之后在虚拟环境cv
的python
中执行一下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