樹莓派入坑總結與小案例實時視頻監控


硬件:樹莓派3B,攝像頭500W像素,4.5寸觸摸屏。(屏幕驅動以及攝像頭驅動商家提供)

入坑樹莓派挺久了,一直沒有記錄一些問題,今天有時間把問題總結記錄一下。

一.樹莓派更換源

由於樹莓派官方源在國外太卡太慢,所以我們把源更換為阿里源或者清華或者中科大的。

   步驟1.確保樹莓派網絡連接上wifi或者寬帶

     2.在命令行窗口內輸入 sudo vim /etc/apt/sources.list 並回車,進入編輯器。(如果沒有安裝vim建議用 sudo apt-get vim安裝)

    3.接着編輯這個文件,如下圖所示,把原來的內容注釋掉(最前面加 # 號),在文件最頂部添加下面的內容:

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

    4.vim命令模式按wq退出並保存

    5.同樣的方法,把 /etc/apt/sources.list.d/raspi.list 文件也替換成下面的內容:

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

    5.然后樹莓派更新源下載源都改好了,后面下載安裝就會更快。

二.樹莓派安裝opencv和python以及一些必要的庫

  a) 安裝:opencv
  sudo apt-get install -y libopencv-dev python3-opencv
  b) 安裝計算庫:numpy
  sudo pip3 install numpy
  c) 安裝幀傳輸模塊:zmq
  sudo pip3 install zmq
  d) 安裝幀的編碼和解碼的庫:
  sudo pip3 install pybase64
  e) 安裝picamera  sudo pip3 install picamera

三.測試opencv庫以及python

# -*- coding: utf-8 -*-
__author__ = "kyoRan"
import cv2 cap = cv2.VideoCapture(0)                                        # 打開攝像頭
print("VideoCapture is opened?", cap.isOpened()) while(True): ret, frame = cap.read()                                      # 讀取攝像頭圖像
    center = (frame.shape[1]//2, frame.shape[0]//2)              # 圖像中心點位置
    # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 轉灰度
    cv2.circle(frame, center=center, radius=100, color=(0,0,255)) # 畫圓
    cv2.imshow("frame", frame)                                    # 顯示圖片
    if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 釋放攝像頭
cv2.destroyAllWindows()  # 關閉所有窗口

 

 

 

四.實時監控代碼

樹莓派客戶端

#!/usr/bin/env python # -*- coding=utf-8 -*-

import cv2 import zmq import base64 import picamera from picamera.array import PiRGBArray IP = '192.168.31.84' #視頻接受端的IP地址

"""初始化攝像頭部分""" camera = picamera.PiCamera() camera.resolution = (640,480) camera.framerate = 20 rawCapture = PiRGBArray(camera, size = (640,480)) """實例化用來發送幀的zmq對象""" contest = zmq.Context() """zmq對象使用TCP通訊協議""" footage_socket = contest.socket(zmq.PAIR) """zmq對象和視頻接收端建立TCP通訊協議""" footage_socket.connect('tcp://%s:5555'%IP) print(IP) """循環從攝像頭采集圖像 由於使用的是樹莓派攝像頭,因此需要把use_video_port設置為True frame為采集到的圖像"""
for frame in camera.capture_continuous(rawCapture, format='bgr', use_video_port=True): frame_image = frame.array #把采集到的圖像進行轉換為numpy array
    encoded, buffer = cv2.imencode('.jpg', frame_image) #把轉換后的圖像數據再次轉換成流數據,
                                                        # 並且把流數據儲存到內噸buffer中
    jpg_as_test = base64.b64encode(buffer) #把內存中的圖像流數據進行base64編碼
    footage_socket.send(jpg_as_test) #把編碼后的流數據發送給視頻的接收端
    rawCapture.truncate(0) #釋放內存,准備進行下一幀的視頻圖像傳輸

電腦端代碼

import cv2 import zmq import base64 import numpy as np """實例化用來接收幀的zmq對象""" context = zmq.Context() """zmq對象建立TCP鏈接""" footage_socket = context.socket(zmq.PAIR) footage_socket.bind('tcp://*:5555') while True: print("listion") frame = footage_socket.recv_string() #接收TCP傳輸過來的一幀視頻圖像數據
    img = base64.b64decode(frame) #把數據進行base64解碼后儲存到內存img變量中
    npimg = np.frombuffer(img, dtype=np.uint8) #把這段緩存解碼成一維數組
    source = cv2.imdecode(npimg, 1) #將一維數組解碼為圖像source
    cv2.imshow("Stream", source) #把圖像顯示在窗口中
    cv2.waitKey(1) #延時等待,防止出現窗口無響應

 

問題

a.ssh總是斷連或者連接不上

1.長時間連接如果電腦網絡切換,比如說原來我電腦開的熱點,后面我手機開的熱點或者后面用了寬帶,都有可能改變樹莓派或者主機的IP地址,需要改一下在連接

2.樹莓派的ssh服務沒有開啟,在樹莓派上啟用 SSH. SSH 在樹莓派上是默認關閉的,因此在你安裝好全新的 Raspbian 后打開樹莓派時,你需要啟用它。. 首先通過菜單進入樹莓派的配置界面。. 現在進入接口interfaces標簽,啟動 SSH 並重啟你的樹莓派。. 你也可以通過終端直接啟動 SSH。. 僅需輸入命令 sudo raspi-config 然后進入高級設置以啟用 SSH。.

3.防火牆打開了,最好關閉掉。

  樹莓派安裝防火牆 sudo apt-get install ufw
  防火牆狀態查看 sudo ufw status active是開啟 inactive是未開啟
  防火牆開啟 sudo ufw enable
  防火牆關閉 sudo ufw disable
  開放端口號8090 sudo ufw allow 8090


b.樹莓派安裝包依賴問題的解決

當在樹莓派安裝軟件時,時常遇到因安裝包依賴問題導致無法成功安裝的問題,此時可以使用aptitude (Debian系統的包管理工具)。
與 apt-get 不同的是,aptitude 在處理依賴問題上更佳一些。舉例來說,aptitude 在刪除一個包時,會同時刪除本身所依賴的包。這樣,系統中不會殘留無用的包,整個系統更為干凈。
安裝指令:sudo apt-get install aptitude
語法:aptitude(選項)(參數)

注意,安裝了aptitude后,apt-get無法使用,有些安裝包的情況下aptitude安裝不了,這時候就很麻煩需要把aptitude卸載再找回apt-get,所以一般情況下還是用apt-get

c.在xshell中無法連接 Gtk-WARNING **: 15:12:08.891: cannot open display: localhost:10.0
,如下圖

 解決辦法,使用VNC虛擬桌面或者直接接鍵盤鼠標到樹莓派

 

  

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM