構(gòu)建一個(gè)基于實(shí)時(shí)以太網(wǎng)的JPEG流媒體系統(tǒng)
1. 項(xiàng)目概述
本項(xiàng)目演示了一個(gè)基于實(shí)時(shí)以太網(wǎng)的JPEG流媒體系統(tǒng),該系統(tǒng)使用WIZnet Pico (RP2040/RP2350)板結(jié)合ArduCAM快速啟動(dòng)300萬像素DVP攝像機(jī)構(gòu)建。
該系統(tǒng)由兩個(gè)主要部分組成:
攝像頭側(cè)(Pico):通過8位DVP接口捕獲JPEG幀,并將數(shù)據(jù)分成UDP數(shù)據(jù)包通過以太網(wǎng)傳輸。
PC端(Python):接收數(shù)據(jù)包,使用報(bào)頭信息重新組裝完整的幀,并使用OpenCV實(shí)時(shí)解碼jpeg。
通過該項(xiàng)目,創(chuàng)客可以全面了解通過以太網(wǎng)傳輸?shù)膶?shí)時(shí)嵌入式攝像頭,為物聯(lián)網(wǎng)視覺、機(jī)器人和遠(yuǎn)程監(jiān)控應(yīng)用奠定基礎(chǔ)。
核心關(guān)鍵詞:RP2040 DVP PIO DMA / UDP JPEG流/幀重組/ OpenCV實(shí)時(shí)解碼
2. 硬件模塊
WIZnet Pico (RP2040 / RP2350)
支持RP2040和RP2350(最高200MHz系統(tǒng)時(shí)鐘)
嵌入式以太網(wǎng)選項(xiàng):
W5100S / W5500 / W6100 - SPI (40MHz)
W6300 - QSPI Quad (37.5MHz)
完全兼容Pico SDK 1.5.1
支持同時(shí)使用DVP攝像機(jī)+以太網(wǎng)+ SPI Flash + UART
Arducam物聯(lián)網(wǎng)快速啟動(dòng)300萬像素DVP攝像頭
【Arducam物聯(lián)網(wǎng)快速啟動(dòng)300萬像素DVP攝像頭】
該模塊具有300ms的瞬時(shí)啟動(dòng)能力和超低功耗設(shè)計(jì),是“即時(shí)響應(yīng)物聯(lián)網(wǎng)視覺應(yīng)用”的理想選擇。
3. 性能比較(Sys Clock 200MHz)
W6300 QSPI變體即使在實(shí)時(shí)應(yīng)用程序中也能提供平滑的高清流。
這些值代表了典型的jpeg壓縮幀大小和在W6300-EVB-Pico2板上37.5 MHz QSPI操作下測(cè)量的吞吐量。
4. 引腳映射(Pico?ArduCAM)
每個(gè)PCLK上升沿采樣一個(gè)像素(8位數(shù)據(jù)),而VSYNC HIGH定義活動(dòng)幀傳輸窗口。
5. JPEG幀捕獲序列(在Pico上)
PIO處理時(shí)序邏輯,而DMA連續(xù)地將32位數(shù)據(jù)塊(每行512字節(jié))傳輸?shù)絉AM中。
如果在前4行(512B × 4)中未檢測(cè)到SOI標(biāo)記(0xFFD8),則系統(tǒng)將重試,直到捕獲有效幀為止。
6. 最終流處理(基于udp的傳輸)
由于JPEG幀的大小不同(從幾KB到幾十KB),單個(gè)UDP數(shù)據(jù)包不能包含整個(gè)圖像。
因此,Pico將每個(gè)幀分成≤1400字節(jié)的有效負(fù)載,并為每個(gè)幀附加一個(gè)小的4字節(jié)報(bào)頭。
T傳輸(Pico)
R匯編(Python)
在接收端,每個(gè)數(shù)據(jù)包根據(jù)幀ID和包ID重新組裝。Assembler類重建完整的JPEG幀如下:
然后,OpenCV對(duì)幀進(jìn)行解碼并實(shí)時(shí)顯示。
即使在UDP傳輸下,本設(shè)計(jì)也通過基于id的智能重排序?qū)崿F(xiàn)了幀的無損拼接。
7. 如何運(yùn)行(執(zhí)行指南)
按照以下步驟構(gòu)建、flash和運(yùn)行ArduCAM × WIZnet Pico JPEG Streaming演示。
①在Top-Level CMakeLists.txt中選擇您的Board
打開項(xiàng)目的根目錄CMakeLists.txt。
取消評(píng)論您的目標(biāo)板(例如,W6300-EVB-PICO2)并注釋掉其他板。
這確保了正確的引腳映射、SPI/QSPI模式和驅(qū)動(dòng)程序的使用。
例子:
然后,打開
例子/ WIZnet_ArduCAMMega_UDP_Streaming / c
并根據(jù)需要修改如下參數(shù):
IP地址/網(wǎng)關(guān)/子網(wǎng)
UDP端口號(hào)(默認(rèn)為5000)
系統(tǒng)時(shí)鐘頻率(默認(rèn)200mhz)
編輯完成后保存文件。
②構(gòu)建固件
在項(xiàng)目目錄下打開終端,運(yùn)行:
這將生成編譯后的固件文件:
③將固件Flash到Pico
通過USB連接您的WIZnet Pico (RP2040/RP2350),同時(shí)按住BOOTSEL按鈕。
該板將顯示為USB驅(qū)動(dòng)器(例如,RPI-RP2)。
復(fù)制生成的main。Uf2文件到這個(gè)驅(qū)動(dòng)器。
單板將自動(dòng)重啟并開始運(yùn)行流固件。
④在PC上運(yùn)行Python GUI
移動(dòng)到示例目錄并運(yùn)行GUI流查看器:
這個(gè)GUI將:
?連接到Pico的UDP流媒體服務(wù)器
?重新組裝傳入的JPEG數(shù)據(jù)包
?解碼和顯示他們?cè)趯?shí)時(shí)使用OpenCV
8. 關(guān)鍵要點(diǎn)
本文編譯自hackster.io





