首先 我们需要以下东西:
0.一块树梅派3B+
1.一个内存卡(速度越快越好,博主使用的三星64Gevo U4卡 写入大约30MB/s
2.一台能用的电脑(本文章所用电脑为Windows10系统)
3.显示屏 鼠标 键盘 一个好用的电源(以树梅派不提示欠压为准)
有了硬件之后,我们需要准备以下软件(软件版本可能不同,博主不保证不同版本的可用性)
@Windows平台 需要准备:
1.解压缩软件(推荐:7-Zip)用于解压系统包".xz"文件。
2.Win32DiskImager 用于将".img"磁盘映像文件写入TF卡中。
3.DiskGenius 用于TF卡需要恢复为单分区重新写入系统时。
4.Raspbian系统包
<注意> 博主不温馨的提示:数据无价,在进行本章节的操作时,请务必留意每步操作是否正确。由于自己疏忽所导致的数据丢失请自行承担痛苦:)
无论新旧TF卡,博主都建议使用DiskGenius将TF卡所有分区删除并重新建立分区。以避免不可预料的分区错误问题。
最后,保存分区表,退出。
1.将TF卡格式化后,使用7-Zip将下载好的".xz"文件打开,解压缩包内的".img"磁盘映像文件。
2.打开Win32DiskImager,选择".img“磁盘映像文件,选择正确的TF磁盘盘符,点击写入按钮等待数据写入。
3.写入完成后,Windows系统可能会提示需要格式化磁盘,此时务必选择不格式化。因为写入了树梅派系统的TF卡由两个分区组成。第一个分区为Boot引导分区,可被Windows系统识别,而第二个分区为系统运行分区,此分区无法被Windows系统识别,Windows默认会提示用户格式化为Windows可识别分区。如不慎格式化,请从2.1节再来一遍:)
将写入了系统文件的TF卡插入树梅派TF卡槽,连接好显示屏,鼠标,键盘(缺少三个外设的操作方法不在本博客中讨论),连接电源,等待树梅派初始化开机。
<注意> 如果显示屏右上角出现黄色闪电图标,说明树梅派当前处于欠压状态,请更换优质电源与优质数据线,直至欠压图标消失。如果在欠压模式下初始化/运行系统,系统很可能会在高负载时断电重启。此情况可能会导致不可预料的系统问题。如果系统黑屏,红色电源灯断续点亮,则系统可能严重欠压导致无法正常初始化硬件,也请更换电源与数据线。
<建议> 博主推荐使用5V 2.4A的充电器作为电源,最好具备线损补偿功能。有关充电器的相关信息,建
议移步至充电头网了解详情。
<建议> 通过Preferences-Raspberry Pi Configuration中的Resolution选项可改变分辨率,通过Disable Overscan来去除屏幕黑边。
等待系统更新软件包以及语言包后,重启树莓派。
系统重启后,通过以下命令检查更新。
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
为了时刻了解树莓派的工作状态,我们可以使用一个python脚本来监控树莓派的温度,CPU用量,内存用量,磁盘用量:
cd ~
touch hw_info.py
使用编辑器打开home目录下的hw_info.py,写入如下内容:
import os
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
def getRAMinfo():
p = os.popen('free')
i = 0
while 1:
i = i + 1
line = p.readline()
if i==2:
return(line.split()[1:4])
def getCPUuse():
return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))
def getDiskSpace():
p = os.popen("df -h /")
i = 0
while 1:
i = i +1
line = p.readline()
if i==2:
return(line.split()[1:5])
CPU_temp = getCPUtemperature()
CPU_usage = getCPUuse()
RAM_stats = getRAMinfo()
RAM_total = round(int(RAM_stats[0]) / 1000,1)
RAM_used = round(int(RAM_stats[1]) / 1000,1)
RAM_free = round(int(RAM_stats[2]) / 1000,1)
DISK_stats = getDiskSpace()
DISK_total = DISK_stats[0]
DISK_used = DISK_stats[1]
DISK_perc = DISK_stats[3]
if __name__ == '__main__':
print('')
print('CPU Temperature = '+CPU_temp)
print('CPU Use = '+CPU_usage)
print('')
print('RAM Total = '+str(RAM_total)+' MB')
print('RAM Used = '+str(RAM_used)+' MB')
print('RAM Free = '+str(RAM_free)+' MB')
print('')
print('DISK Total Space = '+str(DISK_total)+'B')
print('DISK Used Space = '+str(DISK_used)+'B')
print('DISK Used Percentage = '+str(DISK_perc))
保存后,在终端使用命令:
watch -n 5 python3 hw_info.py
<提示> 本文章所使用的Python版本为Python3.5.3
由于Raspbian自带的pip3为9.0.1版本,较为老旧,我们使用以下命令来更新pip3:
python3 -m pip install --upgrade pip
<雷区> 尝试在更新完pip3后,键入命令:
pip3 list
查看是否能返回Python3已安装模块列表,如果返回错误信息:
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in
from pip import main
ImportError: cannot import name 'main'
请坐和放宽,使用以下命令:
sudo nano /usr/bin/pip3
将内容:
from pip import main
if __name__ == '__main__':
sys.exit(main())
修改为:
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
Ctrl+O保存 Ctrl+X退出
再次尝试:
pip3 list
出现模块列表说明修改成功。
此时 尝试键入命令:
sudo pip3 list
如果出现跟刚才相似的错误,请再次坐和放宽,并执行以下命令:
sudo visudo
将:
Defaults env_reset
修改为:
Defaults !env_reset
Ctrl+O保存
<雷区> 保存时记得将系统自动添加的后缀名".tmp"去掉,系统询问是否覆写,按Y确认。
Ctrl+X退出
再执行:
sudo nano .bashrc
在文件末尾添加:
alias sudo='sudo env PATH=$PATH'
Ctrl+O保存 Ctrl+X退出
执行:
source ~/.bashrc
再次测试:
sudo pip3 list
出现模块列表,即可正常使用pip3。
<雷区> 博主在安装Keras环境的过程中,被Numpy模块卡住很久,具体表现为import numpy的时候,或者其他模块需要import numpy的时候,会ImportError:
ImportError:
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control). Otherwise reinstall numpy.
Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory
发生此问题的原因是Numpy版本>=1.14.0时,Numpy需要调用atlas-base库,我们现在先将旧版本的Numpy卸载,等待下一步Tensorflow将Numpy作为依赖库安装。
执行指令:
sudo pip3 uninstall numpy
卸载完成后,进行下一步安装。
执行以下命令安装Tensorflow:
sudo pip3 install Tensorflow
安装完成后 使用python3检查是否能正常import Tensorflow
python3
>>>import tensorflow
如果出现3.2节提到的Numpy错误,请继续往下看。
解决此问题十分简单,使用以下指令安装libatlas3-base软件包:
sudo apt-get install libatlas3-base
安装完成后,再次import Tensorflow测试是否能正常import
<问题> 如果import Tensorflow后,出现以下RuntimeWarning:
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5
return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompatibility. Expected 432, got 412
return f(*args, **kwds)
是可以正常使用Tensorflow的(Keras例程可用,但不能保证有潜在问题发生。欢迎讨论此问题!)
在确认Tensorflow可用后,我们进行Keras的安装:
sudo pip3 install Keras
安装完成后,使用命令:
python3
>>>import keras
如果没有出现错误,就可以使用keras的官方例程来测试keras是否能正常工作。
Keras官方GitHub链接:https://github.com/keras-team/keras
可使用此命令下载Keras源码:
sudo git clone https://github.com/keras-team/keras.git
注:本节引用博主Joeya_ICT的博客内容,原帖地址:https://blog.csdn.net/leaves_joe/article/details/67656340
安装build-essential、cmake、git和pkg-config:
sudo apt-get install build-essential cmake git pkg-config
安装jpeg、tif、jpeg-2000、png图像工具包
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng-dev
安装视频I/O包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
安装gtk2.0
sudo apt-get install libgtk2.0-dev
安装优化函数包
sudo apt-get install libatlas-base-dev gfortran
<雷区> 由于OpenCV源码编译需要消耗大量的内存空间,而树莓派3B+内存容量只有1GB,不足以支持OpenCV的编译需求。Raspbian在TF卡内默认使用了100MB的空间作为Swap(虚拟内存),用于将内存里没有活跃使用的代码迁移保存,把内存空间腾给正在运行的程序使用。但这个Swap空间实际上是不足以缓存编译时产生的数据的。如果内存以及Swap分区都被装满了,就会导致树莓派死机,虽然系统仍然在运行,但毫无性能可言。所以,我们在进行编译OpenCV源码之前,先将Swap进行扩容。
我们先打开dphys-swapfile文件:
sudo nano dphys-swapfile
找到文件内容:
CONF_SWAPSIZE=100
将100更改为期望的Swap空间大小,博主使用了2048MB,即2G空间。
然后Ctrl+O保存,Ctrl+X退出。
现在重启dphys-swapfile服务:
sudo /etc/init.d/dphys-swapfile restart
现在可以使用命令确认Swap是否为更改后的大小了:
free -h
确认Swap分区扩容后,我们就可以进行下一步的编译了。
<建议> 由于树莓派性能限制及内存限制,编译源码可能会消耗大量时间,以及产生大量热量。请确保您的树莓派配备了稳定的电源系统与散热系统。
使用下列命令,获取OpenCV源码:
cd ~
wget -O opencv-3.4.2.zip https://github.com/Itseez/opencv/archive/3.4.2.zip
unzip opencv-3.4.2.zip
wget -O opencv_contrib-3.4.2.zip https://github.com/Itseez/opencv_contrib/archive/3.4.2.zip
unzip opencv_contrib-3.4.2.zip
在完成了源码的下载以及解压后,执行下列命令:
cd ~
cd opencv-3.4.2
mkdir release
cd release
执行完上述命令后,便在OpenCV的源码目录下新建了名为release的文件夹,此文件夹用于接下来的编译以及安装。
接下来执行以下命令:
/** CMAKE_BUILD_TYPE是编译方式
* CMAKE_INSTALL_PREFIX是安装目录
* OPENCV_EXTRA_MODULES_PATH是加载额外模块
* INSTALL_PYTHON_EXAMPLES是安装官方python例程
* BUILD_EXAMPLES是编译例程(这两个可以不加,不加编译稍微快一点点,想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON \)
**/
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.2/modules \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
如果卡在download某个文件的状态,请尝试更换一个Wi-Fi网络。
如果cmake的过程中出现了错误,请检查是否完整的安装之前的依赖包。
无论何种情况导致cmake没有完整的执行完毕,请使用以下命令清空release文件夹下的内容。注意,请确认终端的当前路径是release文件夹内:
sudo rm -rf *
清空了所有文件后可重新开始cmake编译。
如果cmake成功编译了,博主建议将release复制一份备份至opencv-3.4.2文件夹下,以备接下来的make命令出错时能够恢复release文件夹内容。
接下来进行下列命令:
sudo make
对release进行make编译操作。
<注意> 这条命令会消耗相当长时间(好几小时),请确保树莓派具备良好的供电及散热,避免从头再来:)
当然,可以通过-j参数来指定make操作使用的核心数,树莓派3B+具备4个核心,即可以使用如下命令调用4个核心进行四线程同步编译:
sudo make -j 4
核多力量大嘛:)