基于FPGA的高清低碼流H.264攝像機(jī)設(shè)計(jì)
摘要:本文提出了一種基于低成本FPGA的高清低碼流安防攝像機(jī)SoC實(shí)現(xiàn)方式,該設(shè)計(jì)已經(jīng)完全實(shí)現(xiàn),開創(chuàng)了高清低碼流安防攝像機(jī)SoC的先河。
本文引用地址:http://www.ex-cimer.com/article/247781.htm1. 概述
目前高清H.264攝像機(jī)的核心SoC基本上都是ASIC,而FPGA作為近年來發(fā)展迅速的可編程器件,在高清H.264攝像機(jī)的SoC領(lǐng)域如何能有一席之地?這是我們的設(shè)計(jì)需要實(shí)現(xiàn)的目標(biāo)。
2. 設(shè)計(jì)特點(diǎn)
與ASIC相比,FPGA的特點(diǎn)是功能強(qiáng),設(shè)計(jì)靈活,隨時(shí)升級(jí),工作成果可以積累,NRE低,但是芯片價(jià)格比ASIC貴,所以必須找到一個(gè)可以達(dá)到價(jià)格平衡的應(yīng)用領(lǐng)域,我們根據(jù)這幾年智能手機(jī)和3G網(wǎng)絡(luò)發(fā)展迅猛的情況,參考電信運(yùn)營(yíng)商第一代全球眼的技術(shù)指標(biāo),直接把設(shè)計(jì)指標(biāo)定位在碼流小于512kbps和分辨率為1280x720x25fps,目前在市面上可以實(shí)現(xiàn)這些指標(biāo)的攝像機(jī)幾乎沒有,這是FPGA的好機(jī)會(huì)。
512kbps的碼流限制主要是考慮到ADSL和家庭光端機(jī)的上傳能力,而且也能利用3G上傳視頻,減少了智能手機(jī)的碼流下載壓力;1280x720是智能手機(jī)的主流分辨率,自然需要相應(yīng)的視頻源,如果顯示D1或CIF,效果肯定不理想。
我 們的目標(biāo)是做一個(gè)可以直接用于生產(chǎn)的參考設(shè)計(jì),除了設(shè)計(jì)指標(biāo)先進(jìn),我們還要考慮價(jià)格和實(shí)用,所以我們選擇了低成本的CYCLONE IV系列,另外也實(shí)現(xiàn)了一般網(wǎng)絡(luò)攝像機(jī)的全部功能,如H.264壓縮、720p25幀三碼流、雙向語(yǔ)音、重要區(qū)域和隱私區(qū)域的定義、智能分析、移動(dòng)檢測(cè)、 聲音偵測(cè)、POE供電等;
3. 實(shí)現(xiàn)高清低碼流H.264攝像機(jī)SoC的關(guān)鍵
一般來說,1280×720×25fps的碼流在2Mbps左右,如何降低碼流?除了使用mail profile with cabac的H.264編碼器外,還需要對(duì)視頻圖像進(jìn)行分析,而且要在幀率、分辨率、視頻質(zhì)量等方面權(quán)衡折中,在512kbps碼流下獲得最好的視頻效果,為了達(dá)到這樣的目的,需要復(fù)雜靈活的控制,F(xiàn)PGA可以滿足這樣的需求。
4. 高清低碼流H.264攝像機(jī)的結(jié)構(gòu)
高清低碼流H.264攝像機(jī)的結(jié)構(gòu)簡(jiǎn)圖如下:
圖1 高清低碼流H.264攝像機(jī)的結(jié)構(gòu)圖
FPGA的內(nèi)部結(jié)構(gòu)如下圖所示:
圖2 FPGA的內(nèi)部結(jié)構(gòu)圖
FPGA的選用
在高清低碼流H.264攝像機(jī)的結(jié)構(gòu)中,除了圖像傳感器、存儲(chǔ)器、電源和模擬接口外,所有的功能如圖像處理、H.264編碼、協(xié)議處理、參數(shù)管理、媒體流發(fā)送等都由FPGA實(shí)現(xiàn),F(xiàn)PGA就是高清低碼流H.264攝像機(jī)的 SoC;目前世界上FPGA的生產(chǎn)商只有幾個(gè),可選擇的產(chǎn)品也不多,要用FPGA實(shí)現(xiàn)高清低碼流H.264攝像機(jī)的SoC,選擇一款合適的FPGA非常重要,F(xiàn)PGA的選擇主要考慮三方面的因素:速度、成本和結(jié)構(gòu);每個(gè)FPGA生產(chǎn)商都有多個(gè)FPGA系列,每個(gè)系列的速度、性能和價(jià)格都不同,要使高清低碼流H.264攝像機(jī)SoC的成本盡可能低,應(yīng)該選擇成本最低的系列,像我們選擇的FPGA是Altera公司的CYCLONE IV系列,型號(hào)是EP4CE115F23C8,CYCLONE IV是低成本系列,在同樣是低成本系列的FPGA中,CYCLONE IV的速度是最快的; FPGA的結(jié)構(gòu)對(duì)圖像處理也很重要,尤其是存儲(chǔ)器和乘法器的數(shù)量,H.264算法是以宏塊為單位,在處理過程中必然會(huì)涉及到宏塊的輸入輸出和緩存,1個(gè)宏 塊的數(shù)據(jù)為384字節(jié)(256字節(jié)亮度數(shù)據(jù)和128字節(jié)色度數(shù)據(jù)),如果考慮到輸入輸出和處理的并行,必須設(shè)置雙份,即768字節(jié),用CYCLONE IV的1個(gè)M9K存儲(chǔ)塊正好,從上面的分析可以看出適合圖像處理的FPGA對(duì)內(nèi)部存儲(chǔ)器的要求是存儲(chǔ)塊容量小(如1KB)、存儲(chǔ)塊數(shù)量多,另外,對(duì)乘法器的要求也是數(shù)量多;在我們選擇FPGA的時(shí)候,CYCLONE IV是在所有低成本FPGA中有最大的存儲(chǔ)器邏輯比和乘法器邏輯比,很適合做圖像處理。
圖像傳感器的選擇
為 了滿足1280x720x25fps的要求,只需要選擇百萬(wàn)像素的傳感器就可以了,我們最終選擇了300萬(wàn)像素的AR0331,還可以實(shí)現(xiàn) 1920x1088x11fps,在實(shí)現(xiàn)1280x720x25fps時(shí)還有電子PTZ功能,AR0331還有寬動(dòng)態(tài)功能,便于攝像機(jī)以后擴(kuò)充寬動(dòng)態(tài)功 能。
外部存儲(chǔ)器
外部存儲(chǔ)器有2片LP DDR SDRAM和1片串行FLASH,串行FLASH用于存儲(chǔ)FPGA的配置數(shù)據(jù)和NIOS的數(shù)據(jù)程序,1片LP DDR SDRAM用于存儲(chǔ)圖像數(shù)據(jù)和編碼結(jié)果,1片LP DDR SDRAM用于NIOSII運(yùn)行ucLinux。
FPGA實(shí)現(xiàn)的功能
FPGA作為高清H.264攝像機(jī)的SoC實(shí)現(xiàn)的功能如下:
① 圖像處理
● 邊緣檢測(cè)RAW插值計(jì)算
簡(jiǎn)單的RAW插值計(jì)算會(huì)造成邊緣模糊,增加邊緣檢測(cè)判斷可以避免造成邊緣模糊;
● 3D濾波
從圖像傳感器出來的圖像包含有噪聲,去噪同時(shí)在幀間和幀內(nèi)進(jìn)行;
● 2D銳化
由于鏡頭等因素影響,從圖像傳感器出來的圖像需要銳化才能清晰;
● GAMMA校正
從圖像傳感器出來的圖像灰度不正確,需要做GAMMA校正,獲得正確的灰度;
● 自動(dòng)曝光控制
根據(jù)亮度條件調(diào)節(jié)適合的曝光參數(shù);
● OSD顯示
可以疊加2048位圖像,圖像以宏塊為單位,結(jié)構(gòu)可以有128x1、64x2、32x4、16x8、8x16、4x32、2x64、1x128等選擇,在屏幕的位置可以設(shè)置;
● 區(qū)域管理
可以定義隱私區(qū)域、運(yùn)動(dòng)檢測(cè)區(qū)域等;
② 編碼處理
● 編碼格式
用H.264 main profile with cabac算法編碼,可以提高壓縮率,減少碼流;由于完全實(shí)現(xiàn)H.264的全部算法需要大量的資源,需要很大容量的FPGA,這是不現(xiàn)實(shí)的,如我們用1個(gè)測(cè)試序列做過測(cè)試,2個(gè)參考幀比1個(gè)參考幀的壓縮率提高了5%,但是2個(gè)參考幀的處理要比1個(gè)參考幀的處理需要多遠(yuǎn)不止5%的資源,對(duì)于一些很復(fù)雜而壓縮 率提高不多的方法我們暫時(shí)不采用,降低碼流是1個(gè)系統(tǒng)性的工作,需要從多個(gè)環(huán)節(jié)考慮;另外我們必須保證算法的準(zhǔn)確,以免在解碼端產(chǎn)生誤差;
● 編碼能力
最大為1280x720x25fps,如果需要同時(shí)編碼多路碼流,需要考慮3路碼流的每秒宏塊編碼數(shù)量之和不能大于90000,如 1280x720x23fps+320x180x23fps,1136x640x24fps+568x320x24fps+284x160x24fps 等;
● 圖像質(zhì)量控制
編碼量化參數(shù)調(diào)整范圍:24~41,值小碼流大,圖像質(zhì)量好,值大碼流小,圖像質(zhì)量差;
● 碼流控制
碼流控制方式為CBR,控制平均碼流;
③ 網(wǎng)絡(luò)處理
● 網(wǎng)絡(luò)速度峰值
目前網(wǎng)絡(luò)接口使用全雙工100M以太網(wǎng),由于圖像的編碼數(shù)據(jù)量是不均勻的,I幀的編碼數(shù)據(jù)量大,P幀的編碼數(shù)據(jù)量小,所以數(shù)據(jù)量呈脈沖式分布,在傳輸I幀的 編碼數(shù)據(jù)時(shí)盡量采用大的網(wǎng)絡(luò)速度有利于減少延遲,但是應(yīng)該考慮到ADSL的承受能力,可以設(shè)置1~70M的網(wǎng)絡(luò)速度峰值;
● 碼流均值
碼流均值是1秒種傳送的數(shù)據(jù)量,可以設(shè)置16Kbps~8128Kbps的碼流均值;CBR的碼流控制方式就是根據(jù)碼流均值來進(jìn)行的;
● 碼流緩沖
由于編碼數(shù)據(jù)量呈脈沖式分布,當(dāng)編碼的數(shù)據(jù)產(chǎn)生速度高于網(wǎng)絡(luò)速度峰值時(shí),編碼數(shù)據(jù)就需要緩存在LP DDR SDRAM,否則就會(huì)丟失;
● 協(xié)議
TCP、RTP、RTSP、DHCP、NTP、HTTP、FTP、SMTP和DDNS;
④ 管理
● NIOS II
NIOS II是內(nèi)置CPU,運(yùn)行ucLinux,負(fù)責(zé)媒體流數(shù)據(jù)的緩沖和打包發(fā)送;
● 參數(shù)(通過WEB提供)
接收參數(shù)設(shè)置和更新,保留2份參數(shù),1份是出廠時(shí)的參數(shù),1份是實(shí)際使用的參數(shù),在正常加電時(shí)實(shí)際使用的參數(shù)起作用,按復(fù)位鍵時(shí)出廠時(shí)的參數(shù)起作用;
● 升級(jí)(通過WEB提供)
FLASH里面保存兩個(gè)配置數(shù)據(jù),1個(gè)是出廠時(shí)的配置數(shù)據(jù),1個(gè)是升級(jí)后的配置數(shù)據(jù),當(dāng)按復(fù)位鍵和升級(jí)配置數(shù)據(jù)加載失敗時(shí)按出廠時(shí)的配置數(shù)據(jù)進(jìn)行加載,否則按升級(jí)配置數(shù)據(jù)加載;
● 報(bào)警接口(通過WEB提供)
提供報(bào)警信號(hào)的上傳功能;
⑤ 音頻
支持雙向64kbits ALaw和16kbits/32kbitsADPCM的收發(fā),聲音偵測(cè)。
5. 結(jié)束語(yǔ)
用FPGA作為SoC的高清低碼流H.264攝像機(jī)已經(jīng)完成設(shè)計(jì),達(dá)到設(shè)計(jì)目標(biāo),視頻質(zhì)量清晰流暢,完全滿足智能手機(jī)作為監(jiān)控終端的要求。
fpga相關(guān)文章:fpga是什么
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論