树莓派3B+新安装系统+python+opencv要点

从买到树莓派开始折腾,遇坑无数。虽然网上有教程,还是很难顺利安装,各种错误不断。这里概括写下安装步骤,以避开坑点。程序来源于网上整理仅供个人参考。

(一)新卡无屏开机前准备

一、新卡准备
1、SD Formatter格式化tf卡。
2、win32diskimager写入官网img镜像,不能选错盘。
3、在windows下,在boot分区新建ssh空白文件,这是为了首次开机能使用ssh方式登录树莓派,避免权限不足无法登录。
4、开机wifi
( a)第二个linux格式分区在window下打不开,下载绿色版DiskGenius打开这个分区,提前将连接wifi的账号和密码写到文件wpa_supplicant.conf,格式为

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
	ssid="          "		#此处写你的wifi账号
	psk="          " 		#此处写wifi密码
    key_mgmt=WPA-PSK
     priority=1			#此处表示wifi连接优先级,可以不写
}
network={
	ssid="          "		#此处写你的wifi账号
	psk="          " 		#此处写wifi密码
    key_mgmt=WPA-PSK
     priority=2			
}

将几个常用的wifi都写进去。
为了携带到别处时可用ssh,有个方法,用笔记本电脑的热点,不管到哪都能用。

(b)用diskgenius将本文件拷进/ect/wpa_supplicant/,这样开机后能自动连接wifi
二、ssh登录树莓派
1、有路由器密码的话,在路由器管理界面查看ip地址,没有的话用ip地址扫描.找到ip地址。
2、打开SecureCRT或者putty,输入树莓派ip(这里假设地址为192.168.1.100)地址或者主机名称(我改成rpi了),再输入账号和密码,设置ssh登录树莓派。
3、在windowd控制台cmd命令行中输入ssh -p22 [email protected],输入密码也可以登录操作。(输入密码时不显示)
4、如果有笔记本热点,就不担心没有密码上不了网的问题。
5、在ssh界面输入vncserver,记下最后的地址和端口
6、打开VNC-Viewer,生成可视桌面。

(二)开机后操作

一、更新升级源
1、扩充卡容量

sudo raspi-config

查看tf卡容量的命令df -H(df -P也可以)
扩容后用df -H查看容量还不对,或者扩容出错,用

sudo resize2fs /dev/mmcblk0p2

刷新下试试
2、在linux控制台输入

sudo vi /etc/apt/sources.list

第一行改

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

就可以使用清华镜像源
再如中科大镜像源

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

我在华东,用的是浙江大学的源

deb http://mirrors.zju.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.zju.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

用”#“注释掉原来的源

#deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

3、再改另一处

sudo vi /etc/apt/sources.list.d/raspi.list

第一行改

deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ stretch main ui

4、执行更新

sudo apt-get update ; sudo apt-get upgrade ; sudo apt-get dist-upgrade ; sudo rpi-update -y

这里很坑,rpi-update用各个镜像源在家一晚没升级成功,改镜像为浙江大学,在学校里5分钟内升级完成。
二、系统备份
树莓派系统安装费时费力,一次不正常关机就可能启动不了,所以备份很有必要。请参考
https://blog.csdn.net/zhshh123/article/details/85063916
这个脚本是自动运行的,生成的备份镜像默认存储在U盘, 但是当镜像文件大小超过4G时,fat32格式U盘无法存放,我的树莓派又无法写入ntfs格式U盘。一个解决方法是U盘格式化为ext4,再用Ext2 Volume Manager打开备份文件复制到硬盘。一次备份约20分钟,文件大小约几个G

(三)安装程序和库

一、linux命令备忘

  • 一定要注意文件名的大小写
  • 当前目录**.**/、上一级目录../、根目录/、用户目录~/
  • 查找目录 sudo find ./ -type d -name “python*”
  • 查找文件 sudo find ./ -type f -name “.log” -print #将转义符“\”放在特殊符号“.”前面
  • 删除所有查找结果 sudo find / -name “test*” |xargs rm -rf #慎用
  • 输入命令注意引号、斜杠、反斜杠
  • 操作目录和文件:mkdir,cp,mv ,rm ,touch
  • 查看文件信息:which python3,ls -al /usr/bin/python3 ,
  • 链接 ln -sf /usr/bin/python3.5 /usr/bin/python
  • 命令行中光标操作 ↑、↓、ctrl+A、ctrl+E、ctrl+U,鼠标左键选择复制、右键粘贴
  • vi操作:esc→:进入命令模式,输入冒号,w保存,q退出,q!强制退出,set-nu显示行号,dd删除行,o新的一行
  • 修改权限 chmod 777 python3
  • CTRL+C中断执行命令
  • 关机 sudo shutdown -h now
    二、安装必要的库文件*
     sudo apt-get install tk-dev libncurses5-dev 
     sudo apt-get install libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev 
     sudo apt-get install libsqlite3-dev libbz2-dev libexpat1-dev 
     sudo apt-get install liblzma-dev zlib1g-dev libffi-dev libssl-dev
     sudo apt-get install build-essential cmake pkg-config
     sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
     sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
     sudo apt-get install libxvidcore-dev libx264-dev
     sudo apt-get install libgtk2.0-dev libgtk-3-dev  python3-dev
     sudo apt-get install libatlas-base-dev  liblapack-dev gfortran
    

-y 表示不提示直接安装
安装包缓存不够时

sudo apt-get clean

三、新安装python
1、如果想安装新版python,要先删除旧版python,这里要慎重,新版兼容可能不好,可能会安装不了库
删除旧版python

sudo apt-get remove --purge python3      #pip3 uninstall 删不掉

2、查看pip支持的安装包格式,确定是否能安装再下载

python3
import pip._internal
print(pip._internal.pep425tags.get_supported())

很多情况,pip install无法安装包,就要看版本支持
3、修改pip升级的包来源,使用国内镜像源

 sudo vi ~/.pip/pip.conf

输入

[global]
index-url = https://pypi.mirrors.ustc.edu.cn/simple/
[install]
trusted-host=pypi.mirrors.ustc.edu.cn

4、下载安装离线包Python

wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz

5、解压编译安装

tar xf Python-3.6.8.tar.xz
cd Python-3.6.8
./configure --prefix=/usr/local/opt/python-3.6.8
make -j 4
sudo make install   

6、修改python3.5和pip3.5的链接
7、多版本共存时,修改输入python时默认的python版本

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2  

在更改默认版本时输入命令选择需要的版本

update-alternatives --list python 
update-alternatives --config python

8、升级pip

sudo pip3 install --upgrade pip

如果出错,下载好新版本安装包,如pip-19.1.1-py2.py3-none-any.whl,输入

sudo pip install --upgrade pip-19.1.1-py2.py3-none-any.whl

(四)、安装科学工具包
在这几个软件安装过程中遇坑无数,不是无法编译,就是版本不兼容、缺少库文件等,有时安装一小时屏幕都不动,树莓派假死了,ssh断开连接了。
一、安装numpy
先删除旧版,不是用pip3 uninstall命令(卸载不掉),改为

sudo apt-get remove python3-numpy

pip3安装新版numpy

sudo pip3 install --upgrade numpy

出错的话,下载安装

wget https://files.pythonhosted.org/packages/93/48/956b9dcdddfcedb1705839280e02cbfeb2861ed5d7f59241210530867d5b/numpy-1.16.3.zip
 sudo pip3 install --upgrade numpy-1.16.3.zip

若还出错,那只能安装旧版(一定要加上数字3

sudo apt-get install python3-numpy

二、安装scipy

sudo pip3 install --upgrade scipy

出错就用

wget https://www.piwheels.org/simple/scipy/scipy-1.2.1-cp35-cp35m-linux_armv7l.whl
sudo pip3 install --upgrade scipy

三、安装matplotlib

wget https://files.pythonhosted.org/packages/26/04/8b381d5b166508cc258632b225adbafec49bbe69aa9a4fa1f1b461428313/matplotlib-3.0.3.tar.gz
sudo pip install --upgrade  matplotlib

四、安装pyaudio

sudo apt-get install portaudio19-dev
pip3 install pyaudio

不要安装python-pyaudio,因版本问题安装会出错,还导致其它包的安装都提示错误
五、安装opencv
1、更改swap文件大小
(1)默认为 CON_SWAPSIZE= 100 M的交换空间, 更改为1024 M

 sudo vi /etc/dphys-swapfile

修改CON_SWAPSIZE= 1024 M,记得要改回
(2)重新启动dphys-swapfile 文件服务
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
2、cmake预编译

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_opencv_python2=OFF \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv4_contrib/modules \
-D BUILD_EXAMPLES=ON ..

反斜杠“\”前面有空格,后面没有空格,命令结尾有两个点
此时会下载一些文件,最后会提示generate成功
3、漫长的编译
编译命令

sudo make && make install
sudo ldconfig

如果中途断开连接或者cpu假死,还要重来。
4、swap文件改回100M
5、测试摄像头
首先要raspi-config打开摄像头硬件camera
1) 拍照在终端执行:

  raspistill -o image.jpg

2) 摄像在终端执行:

    raspivid -o video.h264 -t 10000     #  拍10秒视频

6、cv2调用摄像头

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height

while(True):
  ret, frame = cap.read()
  frame = cv2.flip(frame, -1) # Flip camera vertically
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  cv2.imshow('frame', frame)
  cv2.imshow('gray', gray)
  k = cv2.waitKey(30)  & 0xff
  if k == 27: # press 'ESC' to quit
    break
cap.release()
cv2.destroyAllWindows()

waitKey(30)可改大点waitKey(300),我用waitKey(30)时会自动重启。
六、系统崩溃重启和无法启动
1、有时树莓派工作中就重启了,想知道是否温度过高,用命令

cat /sys/class/thermal/thermal_zone0/temp

或者

vcgencmd measure_temp
watch -n 2 "vcgencmd measure_temp"

-n 2 表示显示速度为2秒自动刷新
2、如果树莓派不能启动,出现

KERNEL PANIC: VFS Unable to mount root fs on unknown-block(179,2)

这多数是分区坏了。要有两张可启动的tf卡,或者一个linux虚拟机,尝试启动进入linux系统修复损坏卡的分区,启动linux挂载损坏卡的读卡器,输入

fdisk -l

查看分区标记为sda2,此处sda2由fsidk读出,每次开机可能不一样。分区扫描操作可能有风险。
先卸载分区sda2。
sudo umount /dev/sda2
再扫描分区sda2
sudo fsck -f -v -r /dev/sda2
3、树莓派正常工作,足额输出的电源很重要
劣质电源输出电流不够,会导致无法启动,摄像头不能正常工作,反复重启。即使5V2A电源加上摄像头后都不一定够用。
(六)、小结
到这里总算能让树莓派工作了,前后花了两周时间。想学习物联网,要学的很多,第一步是熟悉linux系统。

你可能感兴趣的:(python,linux,树莓派,opencv)