樹莓派3B+新安裝系統+python+opencv要點

zhl555666發表於2019-05-15

從買到樹莓派開始折騰,遇坑無數。雖然網上有教程,還是很難順利安裝,各種錯誤不斷。這裡概括寫下安裝步驟,以避開坑點。程式來源於網上整理僅供個人參考。

(一)新卡無屏開機前準備

一、新卡準備
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 pi@192.168.1.100,輸入密碼也可以登入操作。(輸入密碼時不顯示)
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系統。

相關文章