因为国内网络原因,从树莓派官网下载太慢,而且可能下载到一半就会卡死,这里选择从清华大学开源软件镜像站下载,进入这个网站之后,找到下图中的三个项。
这里三项分别对应着树莓派官网的三种系统镜像。
因为我这里并不需要用到树莓派的推荐软件比如说libreoffice等,所以这里选择第二个只带图形桌面的系统镜像就好了。
然后进入界面,选择一个版本进入,我选择的是最新版。
这里选择直接下载zip压缩文件。
下载完成后,要把系统装进sd卡或者安装其它系统的话,可以参考这一篇文章,我这里就不再多写了。
最后还说一下,如果你玩过树莓派3b+或者之前的版本的话,当树莓派进行文件读取或写入的时候,绿灯会不停闪烁,这代表树莓派在进行读写。但是树莓派4b有一些不同,它是进入系统后只亮红灯,绿灯灭,其实这在树莓派4b上是正常的,不必担心。
注:需要多准备一张SD卡,不用太大,一般超过256M即可,大一点也没关系,不影响接下来的步骤。
树莓派4与以前的版本有一些不一样,在树莓派3B时代,设置U盘启动只需要设置program_usb_boot_mode=1,但在树莓派4中并不合适,Pi4使用与早期型号不同的引导加载程序。它存储在电路板上的eeprom中,而不是存储在芯片中。但也据说后期将会在树莓派4中提供类似的方法。
树莓派4B不能设置OTP位,但是可以使用旧的办法,通过SD卡引导位于U盘中的系统。
将系统镜像装进USB设备里,我这里用的是USB30.的固态硬盘,方法与装进SD卡一样,可以参考上面的部分,注意如果你要使用wifi和ssh的话,记得看我推荐的文章里面的步骤。
重点来了,装好之后是可以用你自己的电脑直接打开这个USB设备的,但是它会只显示200M大小的名叫boot的文件夹,这个不用紧张,你的设备大小并没有改变,只是你不能全部读取,这个文件夹对应的就是Linux系统的boot分区。然后把你的SD卡也接在你的电脑上,这里先格式化你的卡,然后打开它。
全选刚刚你能读取到的boot文件夹里面全部内容,复制到你空的已经格式化过的卡。
注意:这里要确保USB设备和SD卡里的文件一模一样,如果不一样,后面可能会无法启动。
现在完成了第一步,接下来修改这个SD卡文件夹里面的cmdline.txt文件,打开它,里面会显示如下一串文字:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=af1800e7-01 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
可能跟你的内容会略有不同,但是不要紧,不影响后面的步骤。把root=PARTUUID=af1800e7-01替换成root=/dev/sda2,如下在:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
这样子就大功告成了,装上SD卡和插入USB设备,上电,等待十秒钟左右(也可能会久一点点),这个阶段应该会看到树莓派的红灯亮起,这个是电源灯,代表电源正常,然后看到绿灯会无规律闪烁,这是正常的,继续等待即可,最后只亮红灯,绿灯不亮,这样就代表已经成功进入系统了。这里提一下,如果红灯与绿灯总是有规律地闪烁,如红灯闪一下,绿灯闪四下,这样就代表失败了,上面某一部分可能出错了。
如果要安装部署在树莓派的应用opencv和pytorch,不太要求版本问题的话,可以直接看最后面,有最简便的安装方法。
网上有许多树莓派安装opencv的教程,但是大多数是安装opencv3.4的教程,但是3.4版本毕竟是几年前的了,如果我们想安装更高的版本怎么办呢?
这里我找到一个非常好的教程,但是不要着急,这里有一些问题需要说明一下,就是cmake的的命令,虽然教程里已经有说明了,这里我再解释一下一个比较容易忽略的点。
CMAKE_BUILD_TYPE=RELEASE \ 代表编译类型为发行版本
CMAKE_INSTALL_PREFIX=/usr/local \ 安装路径
INSTALL_C_EXAMPLES=ON \ C demo
INSTALL_PYTHON_EXAMPLES=ON \ Python demo
OPENCV_EXTRA_MODULES_PATH=/home/pi/.../opencv/opencv_contrib/modules \ OpenCV Contrib路径
BUILD_EXAMPLES=ON \ 编译demo
WITH_LIBV4L=ON \ 开启Video for Linux
PYTHON3_EXECUTABLE=/usr/bin/python3.7 \ Python3.7路径
PYTHON_INCLUDE_DIR=/usr/include/python3.7 \ Python3.7 include文件夹
PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \ Python3.7库
PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ Python3 Numpy安装路径
..
就是第五行这里,它表示的是你下载解压的目录,你可以进入解压过的目录,然后输入pwd
显示当前目录,替换掉第五行即可。
这里有一篇很好的教程,按这个教程来,一遍就可以安装成功,然后在import torch
的时候,可能会报错,我当时也报错了,我找到了解决方法,如下:
Python 3.6.0 (default, Jan 16 2017, 12:12:55)
[GCC 6.3.1 20170109] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
File "" , line 1, in <module>
File "/usr/lib/python3.6/site-packages/torch/__init__.py", line 45, in <module>
from torch._C import *
ModuleNotFoundError: No module named 'torch._C'
官网上对此有一些说明:https://github.com/pytorch/pytorch/issues/574,即下面的这段话。
Yeah, so you can see that there’s _C.cpython-35m which means it will be loaded only by Python 3.5. As a quick hack you could try renaming
_C, _dl, and _thnn/_THNN to regular .so files (without that cpython-version-artch-platform part, just _C.so). But it’s a hack, we don’t provide further support if it fails
根据上面的这段话,也进行了ls -ll 查看:
/usr/local/lib/python3.6/site-packages/torch$ ls
输出如下:
autograd lib storage.py backends multiprocessing _tensor_docs.py _C.cpython-36m-x86_64-linux-gnu.so nn tensor.py cuda optim _tensor_str.py distributed pycache _thnn _dl.cpython-36m-x86_64-linux-gnu.so serialization.py _torch_docs.py functional.py _six.py utils init.py sparse _utils.py legacy _storage_docs.py version.py
发现_C, _dl两个so文件的文件名都太长了,需要进行修改。
采用cp 的方式复制两个文件:
$ sudo cp _C.cpython-36m-x86_64-linux-gnu.so _C.so
$ sudo cp _dl.cpython-36m-x86_64-linux-gnu.so _dl.so
然后,再重新import,果然顺利成功!
这里说的最简便安装指的是无需编译,像opencv和pytorch,一般是都需要在自己的机器上编译动不动就五六个小时,中间还经常会出现不知名的错误,很容易把人的心态搞崩。这里有大佬帮我们生成了whl文件,我们就可以直接用pip安装了。
在经历了多次踩坑之后,我找到了最简便的方法,就是这个教程。大家如不需要要求其他版本的话,直接用这个就好了。但是不要急,还有一些注意事项没有说完。
首先安装包依赖,这个是必需的,如果不安装则无法使用。
sudo apt-get install build-essential git cmake pkg-config -y
sudo apt-get install libjpeg8-dev -y
sudo apt-get install libtiff5-dev -y
sudo apt-get install libjasper-dev -y
sudo apt-get install libpng12-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libgtk2.0-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install libhdf5-dev -y
sudo apt-get install libqt4-test -y
sudo apt-get install libqtgui4 -y
最后按上面链接的教程下载下载完opencv之后,可能会出现像我这样的报错:
pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "" , line 1, in <module>
File "/home/pi/cv2/__init__.py", line 3, in <module>
from .cv2 import *
ImportError: /home/pi/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8
提示找到不到cv2.cpython-37m-arm-linux-gnueabihf.so 一个未定义的__atomic_fetch_add_8, 搜了一下发现github上面有官方的issue,里面说这个是一个bug, 难怪很多人抱怨安装不来opencv呢。
下面是解决方法。
把这一条加载到bashrc 或者 /etc/profile文件里面就好了,我是直接加载到root用户的初始化脚本里面了。
vim ~/.bashrc
最后一行添加:export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1
保存,退出。
source ~/.bashrc
然后进入python3的环境再测试。
root@pi:~# python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.1
终于成功了!
pytorch依赖相对来说比较少,而且安装好以来之后,再按上面链接的教程安装,一般能一次性成功。
下面安装pytorch所需要的依赖包。
sudo apt install libopenblas-dev libblas-dev m4 cmake cython
继续安装python的包。
pip install numpy pyyaml cython
按教程安装后,最后测试是否安装成功:
root@pi:~# python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import torchvision
>>> torch.__version__
'1.3.0a0+de394b6'
>>> torchvision.__version__
'0.4.1a0+a263704'