目錄
一、任務概述
二、環(huán)境安裝
三、實現
3.1 上位機端(PC服務器端)
3.2 樹莓派端(客戶請求端)
四、運行效果
一、任務概述
最近在做一個樹莓派自動駕駛小車,上位機使用windows10 PC電腦,下位機小車采用樹莓派4B,樹莓派上安裝了USB免驅攝像頭。上位機通過SSH來控制和分析樹莓派小車。樹莓派上使用python版的opencv讀取攝像頭圖像數據。
實驗時發(fā)現,上位機通過SSH控制樹莓派時會自發(fā)的將遠程圖像數據也顯示過來(調用cv2.imshow的時候),但是這種通過SSH傳輸圖像的方式會造成SSH卡頓,導致視頻圖像卡、下位機機電控制卡。但是在小車運行的時候它上面的樹莓派不方便連接顯示器,而我們又需要實時反饋運動中的小車圖像給上位機來調試分析。因此,需要一種高效的在樹莓派和PC之間通過無線局域網的視頻圖像傳輸方案。
網上方法有很多,這里介紹一種自己親身試驗過并且相對比較簡單的方法。
二、環(huán)境安裝
首先確保上位機(PC電腦)和下位機(樹莓派)均安裝好了python版的opencv和numpy。
接下來在上下位機均安裝幀傳輸模塊zmq:
sudo pip3 install zmq
然后在上下位機均安裝幀編解碼庫pybase64:
sudo pip3 install pybase64
到這里環(huán)境安裝結束。
三、實現
3.1 上位機端(PC服務器端)
import cv2
import zmq
import base64
import numpy as np
def main():
'''
主函數
'''
context = zmq.Context()
footage_socket = context.socket(zmq.PAIR)
footage_socket.bind('tcp://*:5555')
cv2.namedWindow('Stream',flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
while True:
print("監(jiān)聽中")
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(5) #延時等待,防止出現窗口無響應
if __name__ == '__main__':
'''
程序入口
'''
main()
然后在上位機上運行上述腳本代碼。
3.2 樹莓派端(客戶請求端)
import cv2
import zmq
import base64
def main():
'''
主函數
'''
IP = '192.168.2.148' #上位機視頻接受端的IP地址
# 創(chuàng)建并設置視頻捕獲對象
cap = cv2.VideoCapture(0)
print("攝像頭是否已經打開 ? {}".format(cap.isOpened()))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) # 設置圖像寬度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) # 設置圖像高度
# 建立TCP通信協議
contest = zmq.Context()
footage_socket = contest.socket(zmq.PAIR)
footage_socket.connect('tcp://%s:5555'%IP)
while True:
# 讀取圖像
ret, frame = cap.read()
# 轉換為流數據并編碼
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_test = base64.b64encode(buffer) #把內存中的圖像流數據進行base64編碼
# 發(fā)送數據
footage_socket.send(jpg_as_test) #把編碼后的流數據發(fā)送給視頻的接收端
cv2.waitKey(5) #延時等待,防止出現窗口無響應
if __name__ == '__main__':
'''
程序入口
'''
main()
在下位機端運行上述腳本代碼。
四、運行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-514935.html
?整體運行還是比較順暢的,解決了上下位機圖像實時顯示的問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-514935.html
到了這里,關于PC電腦實時接收樹莓派攝像頭圖像數據并顯示(Python實現)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!