電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 2465|回復(fù): 0
收起左側(cè)

嘉定嵌入式培訓(xùn)_日照嵌入式培訓(xùn)_嵌入式視覺系統(tǒng)的構(gòu)建模塊

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-4 16:22:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
嘉定嵌入式培訓(xùn)_日照嵌入式培訓(xùn)_嵌入式視覺系統(tǒng)的構(gòu)建模塊,   



傳統(tǒng)嵌入式視覺系統(tǒng)采用FPGA/處理器組合來實現(xiàn),也有越來越多地使用將高性能處理器與FPGA相結(jié)合的片上系統(tǒng)來實現(xiàn)。在本文中我們將會介紹嵌入式視覺系統(tǒng)的高級元素;如何簡便快捷地使用軟件 API 和 IP 庫構(gòu)建嵌入式視覺系統(tǒng),如何把算法開發(fā)的增值部分添加到圖像處理鏈中。  

從監(jiān)控攝像頭等簡單監(jiān)控系統(tǒng)到更高級的應(yīng)用,例如當(dāng)今最新款汽車配備的高級駕駛員輔助系統(tǒng) (ADAS)和先進(jìn)生產(chǎn)設(shè)施及工廠里使用的機器視覺,嵌入式視覺系統(tǒng)已在一系列應(yīng)用中得到使用。不論何種應(yīng)用,嵌入式視覺系統(tǒng)都具備一些共同之處,總體來講它們可以分為下列三大類:  

設(shè)備接口 — 提供到所選成像設(shè)備的接口。根據(jù)選擇的設(shè)備類型,提供所需的時鐘、偏置和配置數(shù)據(jù)。這樣還可以從設(shè)備接收圖像數(shù)據(jù),根據(jù)需要進(jìn)行解碼和格式化,以供圖像處理鏈做進(jìn)一步處理。  

圖像處理鏈 — 通過設(shè)備接口接收圖像數(shù)據(jù)并進(jìn)行彩色濾波器陣列內(nèi)插和色域轉(zhuǎn)換(即從彩色轉(zhuǎn)換到灰度)等操作。這部分仍處于我們對接收到的圖像使用大量算法的圖像處理鏈內(nèi)。這些可以是降噪或邊緣增強等簡單算法,也可以是對象識別或光流等復(fù)雜得多的算法。常見情況是在圖像處理鏈的上游部分調(diào)用算法實現(xiàn)方案。當(dāng)然圖像處理鏈上游的實現(xiàn)復(fù)雜性取決于要實現(xiàn)的應(yīng)用。而輸出格式化部分(即將處理后的圖像數(shù)據(jù)轉(zhuǎn)換為正確格式,以輸出到顯示器或是通過通信接口輸出)被稱為下游部分。  

系統(tǒng)監(jiān)視與控制 – 這是一項獨立于設(shè)備接口和圖像處理鏈的類別,它從兩個方面提供系統(tǒng)監(jiān)視和控制。第一個位于設(shè)備內(nèi)部,它提供:
圖像處理鏈的配置
圖像分析功能
在算法執(zhí)行過程中根據(jù)要求更新圖像處理鏈  

第二個是更廣泛的嵌入式視覺系統(tǒng)的控制與管理,它提供:  

電源管理和圖像設(shè)備上電排序
執(zhí)行自檢及其他系統(tǒng)管理功能
網(wǎng)絡(luò)支持通信或點對點通信
在首次成像操作前通過 I2C 或 SPI 配置圖像設(shè)備  

部分應(yīng)用允許系統(tǒng)監(jiān)視功能訪問幀存儲器并在其中的幀上執(zhí)行算法。在這種情況下系統(tǒng)監(jiān)視能夠構(gòu)成圖像處理鏈的一部分。  

這三大類別因為每個階段內(nèi)在的難點不同,需要不同的實現(xiàn)方法。設(shè)備接口和圖像處理鏈都要求有能力處理帶寬高數(shù)據(jù),從而在內(nèi)部實現(xiàn)圖像處理鏈,在外部從系統(tǒng)傳輸圖像數(shù)據(jù)。而系統(tǒng)監(jiān)視與控制要求能夠處理和響應(yīng)通過通信接口接收到的命令并為外部通信提供支持。如果系統(tǒng)監(jiān)視也要構(gòu)成圖像處理鏈的組成部分,就需要一個高性能處理器。  

照此,傳統(tǒng)嵌入式視覺系統(tǒng)采用FPGA/處理器組合來實現(xiàn),也有越來越多地使用將高性能處理器與FPGA相結(jié)合的片上系統(tǒng)來實現(xiàn)。在我們演示上述幾個方面如何結(jié)合在一起之前,我們先來了解一下這三個類別中每一個的不同難點。  

設(shè)備接口  

傳感器接口由應(yīng)用所選擇的設(shè)備決定,大多數(shù)嵌入式視覺應(yīng)用使用 CMOS 圖像傳感器 (CIS)。一般情況下這些傳感器使用 CMOS 并行輸出總線,用控制信號提示行和幀的有效順序,或者使用速率更高的串行通信,實現(xiàn)較簡單的系統(tǒng)接口,但會導(dǎo)致 FPGA 實現(xiàn)方案略顯復(fù)雜。與并行總線相比,這些串行數(shù)據(jù)流能通過更少數(shù)量的通道傳輸圖像,因為它們以快得多的數(shù)據(jù)速率運行,因此相比并行接口而言,能讓成像器支持更高的幀速率。為實現(xiàn)同步,常見的做法是讓包含圖像及其它數(shù)據(jù)字的數(shù)據(jù)通道與包含用于定義數(shù)據(jù)通道上的內(nèi)容的代碼字的同步通道相結(jié)合。與數(shù)據(jù)通道和同步通道結(jié)合的還有一個時鐘通道,因為該接口采用源同步。這些高速串行通道一般實現(xiàn)為 LVDS 或微擺幅差分信號 (Reduced Swing LVDS),以降低系統(tǒng)噪聲和功耗。  

不論輸出圖像格式如何,通常是 CIS 設(shè)備在獲取任何圖像之前需要由嵌入式視覺系統(tǒng)加以配置。這是由 CIS 設(shè)備的多功能性造成的。這種多功能性在提供強大的片上處理功能的同時,也需要在輸出圖像前使用正確的設(shè)置進(jìn)行配置。這些接口對帶寬的要求沒有圖像傳輸要求的那么高,因此常常使用 I2C 或 SPI 接口標(biāo)準(zhǔn)。  

因為所需的圖像數(shù)據(jù)帶寬較高,經(jīng)常把該接口實現(xiàn)在 FPGA 中,這樣更便于與圖像處理鏈集成。該 CIS 設(shè)備的配置接口一般使用 I2C 或 SPI,它們既可以用 FPGA 實現(xiàn),也可以用支持這種接口的系統(tǒng)監(jiān)視與控制處理器實現(xiàn)。  

圖像處理鏈  

圖像處理鏈由上下游元件和接口組成,像素數(shù)據(jù)通過設(shè)備接口輸出。但是接收到的像素的格式可能不能用于正確顯示圖像。我們可能需要進(jìn)行圖像校正,尤其是在使用彩色成像器的情況下。 為維持所需數(shù)據(jù)率下的吞吐量,圖像處理鏈常實現(xiàn)在 FPGA 中,以發(fā)揮其并行優(yōu)勢。這樣可以生成圖像處理流水線,使得處理鏈的每一步都將并行實現(xiàn),從而獲得更高的幀速率。但是對部分應(yīng)用我們必須考慮時延,尤其是對高級駕駛員輔助系統(tǒng) (ADAS) 這樣的系統(tǒng)而言。為有效建立圖像處理鏈,我們需要使用通用互聯(lián)協(xié)議作為圖像處理內(nèi)核的基礎(chǔ),從而方便處理 IP 的互聯(lián)。這樣可以帶來兩重好處:一是可以重復(fù)使用的庫;二是由于每個 IP 核旨在根據(jù)定義的標(biāo)準(zhǔn)接收和發(fā)送數(shù)據(jù),從而方便流水線的建立。這里有多種常用的協(xié)議可供選用,其中最常見的是 AXI,因其具有同時支持內(nèi)存映射接口和流接口的靈活性。  

圖像處理鏈內(nèi)的典型處理階段包括:  

彩色濾波器陣列 – 在CIS設(shè)備上用貝爾 (Bayer) 濾色片生成每個像素的彩色
色域轉(zhuǎn)換 – 從RGB轉(zhuǎn)換為YUV
色度重采樣 – 將 YUV 像素轉(zhuǎn)換為更高效的像素編碼
應(yīng)用圖像校正算法,比如色彩校正或伽馬校正,或是進(jìn)行圖像增強或降噪
在下游側(cè)我們可以配置視頻輸出時序,然后在輸出到指定的目標(biāo)前轉(zhuǎn)換回本機并行輸出視頻格式  

部分系統(tǒng)也使用外部內(nèi)存,例如DDR 的內(nèi)存作為幀存儲,在 SoC 內(nèi)部 DDR 內(nèi)存也往往提供給 SoC 的處理器側(cè)。共享內(nèi)存空間的能力讓系統(tǒng)監(jiān)視側(cè)能通過千兆位以太網(wǎng)或 USB 傳輸數(shù)據(jù),或成為圖像處理鏈的延伸。  

系統(tǒng)監(jiān)視  

傳統(tǒng)上該功能實現(xiàn)在處理器內(nèi)部,能夠處理相關(guān)命令,以按應(yīng)用需求對圖像處理鏈進(jìn)行配置。為接收和處理命令,系統(tǒng)監(jiān)視功能必須能夠支持從簡單的 RS232、千兆位以太網(wǎng)、USB、PCIe 到 CAN 汽車專用接口等一系列不同的通信接口。  

只要嵌入式視覺系統(tǒng)的架構(gòu)能夠支持,我們就能使用處理器來生成圖像疊加信息,可供疊加在輸出圖像上。在能夠訪問圖像數(shù)據(jù)的條件下,我們也能夠使用處理器對圖像開展進(jìn)一步處理,或是收集統(tǒng)計數(shù)據(jù)(像素值分布柱狀圖等)。這樣系統(tǒng)監(jiān)視就成為圖像處理鏈的一部分,讓開發(fā)人員能利用各種開源圖像處理庫,如OpenCV、OpenCL 和 OpenVX。  

EVK使用實例  

在闡明嵌入式視覺系統(tǒng)的基本元素后,下文將示范這些概念,展現(xiàn)如何綜合運用它們創(chuàng)建出可工作的系統(tǒng)。該實例將展示我們?nèi)绾问褂冒哺焕?MicroZed 嵌入式視覺套件 (EVK)創(chuàng)建嵌入式視覺系統(tǒng)。  

該套件使用安森美 Python 1300C 成像設(shè)備和賽靈思 Zynq 7020。 Python 1300C 是一個 1280 像素&TImes;1024行的色彩圖像傳感器,通過 SPI 接口配置。此型號傳感器使用串行輸出實現(xiàn)高幀率,同時EVK 支持通過 HDMI 接口輸出圖像到顯示器。  

Zynq 7020 為嵌入式視覺系統(tǒng)的實現(xiàn)提供了一個極好的平臺,因為我們能使用 FPGA 架構(gòu)中的可編程邏輯 (PL) 實現(xiàn)該設(shè)備的接口和圖像處理鏈。而 FPGA 架構(gòu)中的 ARM A9雙核處理器(即處理系統(tǒng) (PS))可用于根據(jù)我們的需要實現(xiàn)系統(tǒng)監(jiān)視功能和圖像處理鏈延伸。  

為開發(fā)該應(yīng)用,我們將用到兩個 SoC 開發(fā)工具。一個是賽靈思 Vivado 2015.4,另一個是賽靈思SDK 2015.4。在 Vivado 中我們將實現(xiàn)設(shè)備的接口、圖像處理鏈,在 Zynq 內(nèi)配置 PS,建立 PS 到 PL 存儲器映射以完成下列操作:  

根據(jù)圖像大小和幀速率所要求的參數(shù)以及所需操作在圖像處理鏈內(nèi)配置 IP。為此我們將在 PS和 PL 間使用通用 AXI 互聯(lián),以 PS 為主設(shè)備。使用該接口我們能在 PS 和 PL 間實現(xiàn) 高達(dá) 1,200Mbps 的傳輸速率。  

如有必要,將處理器的 DDR 內(nèi)存置于圖像處理鏈中,以便處理器訪問。為此我們將在 PL 和 PS 間使用高性能 AXI 互聯(lián),以 PL 為主設(shè)備。使用該接口我們能在 PL 和 PS DDR 內(nèi)存間實現(xiàn)高達(dá) 2,400Mbps 的傳輸速率。  

該演示將使用 HDMI 展示如何將圖像輸出到顯示器上。相當(dāng)有用的是,EVK 制造商安富利為Python 1300C 提供了一個設(shè)備接口 IP 模塊,并為在 EVK 上接口輸出到 HDMI 設(shè)備提供了一個 HDMI 輸出 IP 模塊。我們將本實例中使用所有這些模塊。在 Vivado 中我們可以使用 IPXact 格式把這些 IP 模塊添加到 Vivado IP 目錄中。  

圖像處理鏈將與安森美設(shè)備接口并執(zhí)行下列處理階段,除了 Python 1300C 和 HDMI IP 核,所有使用的 IP 核均來自 Vivado 中的標(biāo)準(zhǔn)賽靈思圖像處理 IP 庫(實際 IP 核的名稱在下面顯示):  

   

圖1:圖像處理流程  


將來自 Python 接口 IP 的并行視頻和水平及垂直同步轉(zhuǎn)換為 AXIS Stream,以便我們能夠?qū)⑵渑c后續(xù)的圖像處理IP核接口。 視頻輸入到 AXIS (Video in to AXIS)  

彩色濾波器陣列使用貝爾濾色片為每個輸出像素賦予一個 RGB 值(僅以 R、G 或 B 表示)。彩色濾波器陣列插值 (Color Filter Array interpolaTIon)  

RGB 到 YUV色域轉(zhuǎn)換,將 RGB 色域轉(zhuǎn)換為 HDMI 驅(qū)動器優(yōu)選的 YUV 色域輸出格式。RGB 到 YCRCB色域轉(zhuǎn)換器 (RGB to YCRCB Color-Space Convertor)  

將 YUV 從 4:4:4 格式重新縮放為 4:2:2 格式。 色度重采樣 (Chroma Resampler)  

配置視頻 DMA 以傳輸圖像幀到 PS DDR。 AXI VDMA 上海嵌入式linux, 嵌入式sim卡技術(shù), 工業(yè)4.0與嵌入式, 嵌入式應(yīng)用實戰(zhàn), 網(wǎng)絡(luò)可視化嵌入式, 嵌入式英文全稱, 嵌入式培訓(xùn)韋東山, 碼農(nóng)和嵌入式, 嵌入式psu, 嵌入式光引擎, 嵌入式軟件開發(fā)哦, 嵌入式開發(fā)中級簡歷, 嵌入式軟件開發(fā)目標(biāo), 嵌入式音箱開孔要求, 電氣嵌入式設(shè)計方案, stm32嵌入式書, 嵌入式win7精簡, 網(wǎng)絡(luò)工程移動嵌入式, 嵌入式平油網(wǎng), 嵌入式應(yīng)用層與底層, 嵌入式教學(xué)系統(tǒng), 嵌入式qt遠(yuǎn)程調(diào)試, 嵌入式內(nèi)核特點, 嵌入式軟件開發(fā)知乎, 清華嵌入式教授, 四級嵌入式合格條件, 科遠(yuǎn)嵌入式筆試題, 嵌入式硬件系統(tǒng)特點, 嵌入式點歌系統(tǒng)導(dǎo)歌, 汽車嵌入式無線, 方太嵌入式寬330, 純嵌入式軟件, 為什么會有嵌入式, 嵌入式軟件的優(yōu)勢, 我眼中的嵌入式系統(tǒng), 華諾星空嵌入式, 嵌入式變量柱塞泵, iar嵌入式開發(fā), 怎樣學(xué)習(xí)嵌入式系統(tǒng), 嵌入式匯編程序設(shè)計, 嵌入式消火栓和明裝, 嵌入式開發(fā)工作年薪, 嵌入式串行口實驗, 嵌入式主板底層驅(qū)動, 嵌入式工作十年,

配置同一視頻 DMA,以從 PS DDR 讀取圖像幀。 AXI VDMA  

將 AXI Stream 轉(zhuǎn)換回并行格式。 AXIS 到視頻輸出  

為輸出視頻時序提供時序參考生成器。 視頻時序控制器  

除了確保系統(tǒng)正常運行,我們還需要兩個 AXI 互聯(lián)。一個是高性能 AXI 互聯(lián),另一個是通用AXI 互聯(lián),以及每個時鐘域所需的復(fù)位模塊。  

圖像處理應(yīng)用需要一系列的時鐘域,大部分時鐘域我們可以使用 Zynq 內(nèi)部的 PS 提供給 PL的時鐘。就該應(yīng)用而言,我們需要下列時鐘:  

108 MHz – 這是以 1280x1024 分辨率和 60 Hz幀速率輸出圖像所需的像素時鐘速率。  

75 MHz – 用于存儲器映射的 AXI 和 AXI Lite 接口。  

150 MHz – 用于圖像處理鏈,也稱為AXI Streaming時鐘。AXI Stream 時鐘的速率必須至少與像素速率相同。但是我們必須考慮處理鏈中的所有 IP 核的吞吐量。雖然大多數(shù)模塊能夠每時鐘周期處理一個像素,留出部分裕度并減少所需的緩存是明智的做法。  

200 MHz – 提供給 Python 1300C CIS 設(shè)備作為基準(zhǔn)。  

為實現(xiàn)像素時鐘,我們需要使用時鐘向?qū)砩稍?108MHz 像素時鐘,因為該時鐘需要極為準(zhǔn)確的設(shè)置。雖然在用 PL 架構(gòu)時鐘設(shè)置時,75MHz和150MHz時鐘允許部分容差,但 200MHz時鐘也要求精確。與 108MHz 時鐘不同的是該時鐘可由 PL 架構(gòu)時鐘精確生成。  

所使用的 IP 模塊的時鐘結(jié)構(gòu)如下表所示:  

   



在 Vivavdo 方框圖編輯器中的整個實現(xiàn)方案如下面兩個圖所示。這兩個圖分別顯示的是圖像處理鏈的上游和下游。您還能夠看到使用通用 AXI 互聯(lián)和高性能 AXI 互聯(lián)實現(xiàn)的 ARM 內(nèi)核處理器的互聯(lián)情況。  

   

圖2:EVK實例設(shè)計 — 突出顯示的是上游圖像處理鏈  

   

圖3:EVK實例設(shè)計 — 突出顯示的是下游圖像處理鏈  

一旦我們完成設(shè)計驗證,并為AXI外設(shè)分配地址(可自動完成)后,我們就能在 Vivado 2015.4 中構(gòu)建硬件并將其導(dǎo)入到 SDK 2015.4 軟件開發(fā)環(huán)境中。我們需要在該環(huán)境中編寫一些簡單軟件,讓系統(tǒng)啟動并運行。  

在 SDK 內(nèi)部,我們不僅需要在 Zynq 內(nèi)配置設(shè)計,還需要在使用設(shè)計之前在 EVK 上配置部分元素。記住在本實例中 PS 起著系統(tǒng)監(jiān)視和控制功能,因此必須對整個嵌入式視覺系統(tǒng)進(jìn)行配置,而不僅僅是在 Zynq 中配置 Vivado 設(shè)計。  

我們需要開發(fā)用于配置下列內(nèi)容的軟件:  

使用SPI 接口的 Python 1300C 攝像頭
AXI Python 1300C 接口模塊
AXI VDMA,從 DDR 內(nèi)存讀取和向 DDR 內(nèi)存寫入幀
AXI 彩色濾波器陣列
用于 AD7511 的 HDMI 輸出設(shè)備。該設(shè)備使用 I2C 進(jìn)行配置
I2C 多路復(fù)用器及其連接的相關(guān)外設(shè)
用于控制 Python 1300C 設(shè)備電源軌的 I2C IO 擴(kuò)展器  

該 EVK 使用 Zynq PS I2C 控制器對 HDMI 輸出設(shè)備進(jìn)行配置,來對 Python 設(shè)備供電。安富利還向我們提供了能用來控制 I2C 并進(jìn)行如下配置的 API:  

ADV7511 – 用于 HDMI 輸出的 API
CAT9554 – 用于位于攝像頭模塊上的 I2C I/O 擴(kuò)展器的 API
TCA9548 – 用于位于 EVCC 上的 I2C 多路復(fù)用器的 API
PCA9534 – 用于位于 EVCC 上的 I2C IO 擴(kuò)展器的 API
OnSemi_Python_SW – 用于 Python 1300C 的 API
XAXIVDMA_EXT – 用于配置 VDMA 的 API
XIICPS_EXT – 用于驅(qū)動外部 I2C 的 API  

我們所需做的就是將這些 API 與賽靈思軟件 API 耦合,用于圖像處理鏈中的 IP,這樣我們就能快速創(chuàng)建軟件可執(zhí)行文件。要創(chuàng)建軟件應(yīng)用,我們需要將硬件設(shè)計導(dǎo)入到 SDK 中,為硬件創(chuàng)建板級支持包 (BSP)。該 BSP 內(nèi)置所有所需的賽靈思 API,在與安富利的 API 耦合后,就能夠驅(qū)動圖像處理鏈中的硬件和 Zynq。  

軟件本身需要執(zhí)行下列步驟:  

初始化所有的 AXI 外設(shè)  

   



為圖像傳感器軌加電  

   





對安森美 Python 1300C、彩色濾波器陣列和 VDMA 進(jìn)行配置

   



完成這些步驟后,當(dāng)軟件運行在 EVK 上您將看到圖像正被輸出到您所選定的 HDMI 監(jiān)控器上,如下圖所示。  

   

圖4:使用演示系統(tǒng)抓取的居民區(qū)場景的一幀圖像  

結(jié)論  

在本文中我們介紹了嵌入式視覺系統(tǒng)的高級元素;如何簡便快捷地使用軟件 API 和 IP 庫構(gòu)建嵌入式視覺系統(tǒng),如何把算法開發(fā)的增值部分添加到圖像處理鏈中。  0次
回復(fù)

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表