麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Python > 正文

Python樹莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作詳解

2024-09-09 19:02:27
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python樹莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作。分享給大家供大家參考,具體如下:

因?yàn)槲以谧约汗P記本電腦上沒能成功安裝OpenCV-Contrib模塊,因此不能使用人臉識(shí)別等高級(jí)功能,不過已經(jīng)在樹莓派上安裝成功了,所以我想實(shí)現(xiàn)把樹莓派上采集的視頻幀傳輸?shù)絇C的功能,這樣可以省去給樹莓派配顯示屏的麻煩,而且以后可能可以用在遠(yuǎn)程監(jiān)控上。

1 UDP還是TCP

首先考慮用哪種傳輸方式,平常TCP用的非常多,但是像視頻幀這種數(shù)據(jù)用TCP不是太合適,因?yàn)橐曨l數(shù)據(jù)的傳輸最先要考慮的是速度而不是準(zhǔn)確性,視頻幀的數(shù)據(jù)量很大,幀間隔也非常短,需要盡量保證傳輸速度,同時(shí)丟失一些數(shù)據(jù)是無所謂的。TCP需要維護(hù)連接、保證數(shù)據(jù)包正確,會(huì)耗費(fèi)一些時(shí)間,因此應(yīng)該使用UDP,就像所有參考書上說的,UDP不在乎是否建立連接,也不管數(shù)據(jù)是否能被準(zhǔn)確接收,只關(guān)心能否把數(shù)據(jù)發(fā)送出去而已。

在Python的socket代碼中也可直觀地看到UDP的特點(diǎn),對(duì)于發(fā)送方,我們通過server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)創(chuàng)建UDP套接字對(duì)象,然后執(zhí)行server.connect((HOST,PORT)) 指定發(fā)送方地址,但其實(shí)connect函數(shù)直接就返回了,不像TCP中的客戶端會(huì)等待連接成功,接著就可直接在套接字對(duì)象上調(diào)用send函數(shù)發(fā)送數(shù)據(jù)了,這個(gè)過程根本沒確立連接。

2 圖像傳輸中的編解碼

但是用UDP傳輸圖像有一個(gè)很關(guān)鍵的問題需要考慮,就是圖像的大小。根據(jù)UDP協(xié)議,單個(gè)包的數(shù)據(jù)大小最大只能65507個(gè)字節(jié)(去掉包頭),而一般直接從攝像頭采集的圖像幀的大小比這個(gè)數(shù)要大得多,以我的邏輯C270為例,單幅圖像的大小為480X640X3個(gè)字節(jié),遠(yuǎn)大于65507,因此一個(gè)包是沒法發(fā)送完的。解決方法有兩種,一種是把圖像拆成幾次進(jìn)行發(fā)送,相應(yīng)的接收端用個(gè)循環(huán)多次接收,這種方法可以完整地接收數(shù)據(jù),但是速度肯定受到影響,而且可能要添加一些自定義規(guī)則,徒增麻煩;另一種方法就是發(fā)送前先對(duì)圖像進(jìn)行編碼壓縮,接收后再解碼,清晰度會(huì)有所下降,但是可以保持速度上的優(yōu)勢(shì),這種方式比較合適。

OpenCV中的imencode和imdecode方法可分別用于圖像的編碼和解碼。imencode根據(jù)指定的標(biāo)識(shí)將圖像數(shù)據(jù)編碼并存入緩存區(qū),函數(shù)原型為cv2.imencode(ext, img[, params]) → retval, buf,ext為文件擴(kuò)展名,指定了存儲(chǔ)格式,如'.jpg';img為需要編碼的圖像數(shù)據(jù); params為指定的編碼標(biāo)識(shí),其形式為paramId_1, paramValue_1, paramId_2, paramValue_2, ... ,對(duì)于jpg格式,可以指定標(biāo)識(shí)為CV_IMWRITE_JPEG_QUALITY ,其對(duì)應(yīng)的值在0到100之間,表示了壓縮質(zhì)量,值越大壓縮率越大,編碼后的數(shù)據(jù)量越小,但解碼后的圖像質(zhì)量也越差。

imdecode從緩存區(qū)讀取圖像數(shù)據(jù),通過指定標(biāo)識(shí),可以實(shí)現(xiàn)指定的解碼格式。imdecode的函數(shù)原型為cv2.imdecode(buf, flags) → retval ,其中flags指定圖像的讀取類型,實(shí)際上就是指定了以多少深度多少通道讀取圖像,比如CV_LOAD_IMAGE_ANYDEPTH(即整數(shù)2)表示單個(gè)通道,深度不變的灰度圖;CV_LOAD_IMAGE_COLOR(即整數(shù)1)表示3通道、8位深度的彩色圖。

3 樹莓派程序

結(jié)合套接字對(duì)象和編解碼函數(shù),就可以編寫發(fā)送端的代碼了,不過還有一個(gè)需要注意的地方是發(fā)送和接收的數(shù)據(jù)格式問題,套接字的發(fā)送和接收都是字節(jié)流,或者說是byte數(shù)組,發(fā)送數(shù)據(jù)時(shí)需要以字節(jié)流格式發(fā)送,接收數(shù)據(jù)后需要把字節(jié)流類型轉(zhuǎn)換成合適的數(shù)據(jù)類型。

從攝像頭獲取的圖像是480X640X3的numpy.ndarray類型,通過imencode編碼,得到?X1的numpy.ndarray對(duì)象,經(jīng)測(cè)試,這個(gè)對(duì)象可以直接發(fā)送出去;在接收端,獲得的是byte數(shù)組,這個(gè)數(shù)組直接做imdecode的參數(shù)會(huì)報(bào)錯(cuò),經(jīng)調(diào)試,發(fā)現(xiàn)還需要把數(shù)組轉(zhuǎn)換成numpy.ndarray類型。樹莓派作為發(fā)送端,其Python代碼如下:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人免费福利 | 福利免费在线观看 | 最新精品在线 | 蜜桃视频在线观看免费 | 色播视频在线播放 | 轻点插视频 | 精品一区二区三区在线观看国产 | 黄色大片在线免费观看 | 亚洲精品wwww | 久久久一区二区三区精品 | 亚州综合| 爱草成年 | 国语自产免费精品视频在 | 精品国产一区二区三区久久久蜜月 | 国内精品伊人久久 | 一级电影中文字幕 | 一区二区三区日韩电影 | 欧美一区二区网站 | 欧美在线观看视频一区二区 | 国产成人精品区一区二区不卡 | 欧美精品一区二区三区在线 | 精品国产视频一区二区三区 | 日韩视频1| 99国产精品白浆在线观看免费 | 视频一区二区三区视频 | 久久网日本 | 国产99页| 欧美黑大粗硬毛片视频 | 久久成人免费观看 | 综合在线一区 | 久久影院午夜 | 成人三级电影网址 | 北原夏美av| 麻豆视频在线观看 | 性欧美一区二区 | 成年免费视频黄网站在线观看 | 粉嫩蜜桃麻豆免费大片 | 精品一区二区三区在线播放 | 特级无码毛片免费视频尤物 | 欧美77 | 精品国产91一区二区三区 |