混合第三方庫(kù)視頻系統(tǒng)接口設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引 言
現(xiàn)有物聯(lián)網(wǎng)監(jiān)控系統(tǒng)的功能正在日益多元化。例如后臺(tái)服務(wù)器算法與深度學(xué)習(xí)相結(jié)合,使得監(jiān)控的智能水平取得了長(zhǎng)足進(jìn)步 [1] ;主從 -PTZ 攝像頭的引入形成了多個(gè)攝像頭組,能夠完成之前單個(gè)攝像頭無(wú)法完成的工作 [2] ;具有深度信息的攝像頭能夠從三維立體的角度重新進(jìn)行監(jiān)控 [3]。同 時(shí),與視頻監(jiān)控系統(tǒng)有關(guān)的其他技術(shù)也在迅猛的發(fā)展之中,例如基于 FPGA,DSP 芯片,每個(gè)攝像頭能夠完成若干前端處理,從而降低對(duì)通信帶寬的要求 [4] ;基于 USB 2.0 數(shù)據(jù)傳輸技術(shù),可使視頻數(shù)據(jù)傳輸的速度成倍提高 ;基于云存儲(chǔ)技術(shù)使得視頻數(shù)據(jù)的存儲(chǔ)、訪問(wèn)與相關(guān)運(yùn)算能夠并行、遠(yuǎn)程處理,同時(shí)實(shí)現(xiàn)了海量視頻數(shù)據(jù)以及相關(guān)若干技術(shù) ;基于 GPU芯片性能的提升,視頻、圖像的處理速度較之前有了很大提高 [5-6]。
對(duì)現(xiàn)有監(jiān)控系統(tǒng)而言,新的功能、應(yīng)用領(lǐng)域正在形成,而這些新應(yīng)用解決方案的實(shí)現(xiàn)既需要新的硬件,又需要新的軟件 ;既可以選擇自行開(kāi)發(fā),也可以直接集成第三方軟硬件包。自行開(kāi)發(fā)與集成第三方軟件包相比,各有優(yōu)劣。
以計(jì)算機(jī)視覺(jué)應(yīng)用中的第三方軟件包為例,現(xiàn)有第三方算法庫(kù)較多,能夠支持的應(yīng)用也較多,如目標(biāo)識(shí)別、行為檢測(cè)、深度學(xué)習(xí)、深度信息等。如果均采用自行研發(fā)的方式進(jìn)行實(shí)現(xiàn),應(yīng)用程序的穩(wěn)定性與處理速度將完全取決于開(kāi)發(fā)者自身的能力與水平 ;如果開(kāi)發(fā)者水平高,不僅能夠在功能的選擇上擁有絕對(duì)的自主權(quán),還可以通過(guò)優(yōu)化與功能裁剪實(shí)現(xiàn)更高的系統(tǒng)穩(wěn)定性與運(yùn)行速度 ;但如果研發(fā)者水平受限,則程序的表現(xiàn)將無(wú)法預(yù)測(cè)。
系統(tǒng)集成直接使用第三方軟件包,其程序代碼的編寫水平完全取決于第三方軟件包,在搭設(shè)系統(tǒng)的同時(shí),其應(yīng)用服務(wù)的質(zhì)量是同質(zhì)化的,難分伯仲 ;對(duì)用戶的服務(wù)支持則完全取決于第三方軟件包,無(wú)過(guò)多自主權(quán)。
至于涉及的第三方硬件的軟件開(kāi)發(fā)包無(wú)需多言,絕大多數(shù)研發(fā)者都無(wú)力進(jìn)行新硬件的設(shè)計(jì)、制造與相應(yīng)軟件開(kāi)發(fā),均以使用第三方硬件為主。
1 深度相機(jī)
以深度算法的應(yīng)用作為案例進(jìn)行現(xiàn)有視頻系統(tǒng)接口的案例解析。
在原有視頻監(jiān)控系統(tǒng)中添加深度信息,需要進(jìn)行相關(guān)功能的研發(fā),首先需要硬件的支持,而新的硬件往往自帶第三方開(kāi)發(fā)包,可供開(kāi)發(fā)者二次開(kāi)發(fā)。
深度相機(jī)(又名 3D 相機(jī))是指可通過(guò)距離信息獲取物體之間的位置關(guān)系,能夠區(qū)分前景與后景 ;使用相機(jī)獲取的深度信息對(duì)目標(biāo)圖像的分割、標(biāo)記、識(shí)別、跟蹤等傳統(tǒng)應(yīng)用仍然有效,而且可以根據(jù)深度信息進(jìn)行改進(jìn)與提高 ;借助深度信息與 2D 相機(jī)無(wú)法獲取數(shù)據(jù)與信息,但進(jìn)行算法的設(shè)計(jì)與改進(jìn)后便能夠快速完成對(duì)目標(biāo)的識(shí)別與追蹤,進(jìn)行復(fù)雜目標(biāo)的狀態(tài)行為判讀 [7-8]。
目前深度相機(jī)包括 TOF(Time of Fligh,TOF)、結(jié)構(gòu)光、激光掃描等,主要用于機(jī)器人、互動(dòng)游戲等。其中較多指 TOF 相機(jī) [9-10],微軟第二代 Kinect v2 采用的就是 TOF 技 術(shù),在 30 fps 條件下能夠?qū)崿F(xiàn) 1 920×1 080 的顏色分辨率、512×424 的深度分辨率,最多支持 6 人的姿態(tài)識(shí)別,每人25 個(gè)關(guān)節(jié)點(diǎn),檢測(cè)范圍最遠(yuǎn)可達(dá) 4 m,水平有效角度最大為70°,垂直有效角度最大為 60°。
以激光散斑圖像深度信息獲取方法為例,深度相機(jī)實(shí)現(xiàn)這些功能的工作原理 :經(jīng)過(guò)圖像預(yù)處理后的輸入散斑圖和參考散斑圖寫入多條行形成輸入散斑窗、參考散斑窗,在輸入散斑窗中提取中心相同、窗口大小不同的圖像塊,對(duì)應(yīng)參考散斑窗的匹配散斑窗,以搜索策略并且求最小 SAD 方法,搜索最佳匹配塊,得到最佳偏移量,再通過(guò)參考閾值進(jìn)行篩選,自適應(yīng)選擇某一圖像塊對(duì)應(yīng)的最佳偏移量作為當(dāng)前圖像塊中心點(diǎn)的最佳偏移量,然后通過(guò)深度計(jì)算公式得到其深度信息 [11-12]。
由上可見(jiàn),該方法涉及的數(shù)學(xué)公式較多,運(yùn)算量較大,同時(shí),類似 30 fps 條件的視頻參數(shù)對(duì)相關(guān)計(jì)算的實(shí)時(shí)性提出了較高要求?,F(xiàn)在一般的解決方案為依靠 FPGA,DSP 進(jìn)行相關(guān)運(yùn)算,這就涉及到了與硬件相關(guān)的第三方開(kāi)發(fā)包。以第三方 OpenCV 軟件包與硬件相關(guān)的 HLS 算法庫(kù)進(jìn)行接口設(shè)計(jì)層次化、模塊化說(shuō)明。
2 接口的層次化、模塊化設(shè)計(jì)
現(xiàn)有視頻監(jiān)控系統(tǒng)在進(jìn)行接口層次化、模塊化設(shè)計(jì)時(shí)可以參考 HLS 算法庫(kù)與 OpenCV 軟件包進(jìn)行集成的案例。在該案例應(yīng)用中,支持深度相機(jī)的系統(tǒng)被設(shè)計(jì)用來(lái)實(shí)現(xiàn)深度相關(guān)算法。
Vivado 高層次綜合(Vivado High-Level Synthesis,HLS)在所有 HLx 版本中可直接使用 C,C++ 以及 System C 語(yǔ)言規(guī)范對(duì) Xilinx 可編程器件進(jìn)行編程,HLS 使系統(tǒng)和設(shè)計(jì)架構(gòu)師支持 ISE® 和 Vivado 設(shè)計(jì)環(huán)境,無(wú)需手動(dòng)創(chuàng)建 RTL 便能夠快速創(chuàng)建 IP,包含 HLS 流庫(kù),HLS Math,HLS 視頻,HLS IP,HLS 線性代數(shù),HLS DSP 庫(kù)等內(nèi)容。HLS 在該案例中的主要功能是利用硬件加速相應(yīng)的 OpenCV 應(yīng)用。
OpenCV(Open Source Computer Vision Library,OpenCV)是一個(gè)基于 BSD 許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可運(yùn)行在 Linux,Windows,Android 和 Mac OS 操作系統(tǒng)上。OpenCV 輕量級(jí)且高效—由一系列 C 函數(shù)和少量 C++ 類構(gòu)成, 同時(shí)提供 Python,Ruby,Matlab等語(yǔ)言接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的諸多通用算法。OpenCV 在該案例中的主要功能是進(jìn)行深度信息相關(guān)算法設(shè)計(jì)與應(yīng)用。系統(tǒng)層結(jié)構(gòu)與模塊接口示意如圖 1所示。
由圖 1 可知,不同第三方庫(kù)進(jìn)行集成時(shí),彼此之間的業(yè)務(wù)流按照數(shù)據(jù)類型的不同需要選擇不同的接口 —在OpenCV 與 HLS 之間進(jìn)行圖像處理時(shí)需要 Axivideo2Mat 與Mat2Axivideo 接口。而在 OpenCV 與 HLS 之間進(jìn)行視頻處理時(shí),僅需 Mat2Axivideo 接口。其接口類型根據(jù)數(shù)據(jù)類型的不同而變化。OpenCV 與 HLS 部分接口函數(shù)示意如圖 2所示。
從圖 2 中可以看出,在視頻與圖像分析的應(yīng)用中,為能夠充分利用深度相機(jī)的深度信息,需要 OpenCV 與 HLS 各自按照數(shù)據(jù)類型的不同采用不同的接口函數(shù)進(jìn)行處理,并根據(jù)需要進(jìn)行不同數(shù)據(jù)類型之間的轉(zhuǎn)換,例如從 Mat 到video, 從 Mat 到 hlsMat, 或者從 video 到 Mat, 從 hlsMat到 Mat。
由此可見(jiàn),接口就是進(jìn)行的一系列數(shù)據(jù)類型轉(zhuǎn)換,轉(zhuǎn)換的最終目的是為不同算法提供符合其輸入要求的數(shù)據(jù)。
3 數(shù)據(jù)接口的標(biāo)準(zhǔn)化
接口(Interface)是一系列操作的集合,在軟件架構(gòu)中,強(qiáng)調(diào)模塊之間的數(shù)據(jù)交換操作。為拓展模塊應(yīng)用范圍、進(jìn)行二次開(kāi)發(fā)、與其他系統(tǒng)集成,尤其要適應(yīng)未來(lái)的技術(shù)趨勢(shì),就需要進(jìn)行數(shù)據(jù)接口的標(biāo)準(zhǔn)化 [8]。
數(shù)據(jù)接口的標(biāo)準(zhǔn)化首先需要明確數(shù)據(jù)的類型。在視頻監(jiān)控系統(tǒng)中,有效數(shù)據(jù)類型主要包括圖像、視頻以及其他數(shù)據(jù)、狀態(tài)數(shù)據(jù)四大類。作為數(shù)據(jù)接口的標(biāo)準(zhǔn)化內(nèi)容之一,首先需要統(tǒng)一的內(nèi)容較多,如圖像大小、圖像類型、視頻幀數(shù)、色彩模型、數(shù)據(jù)格式、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)實(shí)時(shí)性等,數(shù)據(jù)類型與業(yè)務(wù)流程相同,是進(jìn)行劃分的兩大要素。
對(duì)不同型號(hào)、不同設(shè)備、不同參數(shù)的視頻,需根據(jù)效果以及實(shí)驗(yàn)進(jìn)行對(duì)比,降高升低。高參數(shù)設(shè)備采集的視頻信息需進(jìn)行預(yù)處理,以達(dá)到同一標(biāo)準(zhǔn) ;同樣,對(duì)達(dá)不到參數(shù)要求的設(shè)備,可結(jié)合金字塔法等進(jìn)行預(yù)處理,使之達(dá)到同一標(biāo)準(zhǔn)。標(biāo)準(zhǔn)統(tǒng)一后,對(duì)數(shù)據(jù)的通信速度、數(shù)據(jù)的后期處理速度、處理精確度、存儲(chǔ)速度、讀取速度等多項(xiàng)指標(biāo)都有明顯改進(jìn)。
統(tǒng)一視頻處理輸出后的數(shù)據(jù)格式是標(biāo)準(zhǔn)化的重點(diǎn)。視頻監(jiān)控系統(tǒng)采集視頻信息,然后交由后臺(tái)服務(wù)器進(jìn)行視頻信息的處理,其處理結(jié)果(系統(tǒng)輸出)是應(yīng)用層其他系統(tǒng)需要的輸入,因此需進(jìn)一步規(guī)范視頻監(jiān)控系統(tǒng)處理后的數(shù)據(jù)格式。
對(duì)視頻監(jiān)控系統(tǒng)處理后的數(shù)據(jù),可采用視頻、圖像、與文本 /XML 等結(jié)合的方式。其中,對(duì)視頻而言,需要規(guī)范每秒多少幀、每一幀的寬高、色彩模型、ROI 位置及長(zhǎng)寬等 ;對(duì)圖像而言,需要規(guī)范寬高、色彩模型、ROI 位置及長(zhǎng)寬等,這里的參數(shù)應(yīng)該與視頻參數(shù)完全吻合,只是視頻的參數(shù)多于圖像參數(shù)而已 ;對(duì)于文本 /XML 而言,需要對(duì)視頻、圖像進(jìn)行編號(hào),對(duì)應(yīng)編號(hào)保留所有視頻、圖像處理后的相關(guān)信息。
為最大限度保持算法設(shè)計(jì)上的靈活性,可對(duì)同一視頻 /圖像利用算法庫(kù)進(jìn)行多種不同數(shù)據(jù)格式的轉(zhuǎn)換,通過(guò)不同的算法得到不同的輸出 ;與不同參數(shù)需求的新設(shè)備進(jìn)行數(shù)據(jù)通信 ;集成不同的第三方庫(kù),從而較好地解決系統(tǒng)的二次開(kāi)發(fā)問(wèn)題。圖 3 所示為一種混合第三方庫(kù)支持的車牌定位算法及其得到的車牌定位效果。對(duì)于成功定位的車牌,使用了文獻(xiàn) [13] 中提到的車牌字符分割算法并將字符以二值化方式顯示。
第三方視頻處理庫(kù)為 OpenCV2.4.9,在 Windows 7 操作系統(tǒng)上借助 Qt5.0 實(shí)現(xiàn),其中部分功能函數(shù)使用了 GPU 加速實(shí)現(xiàn)。主要硬件環(huán)境為 ThinkPad x230 筆記本電腦,Core i3(2.4 GHz)四核 CPU,8G 內(nèi)存。實(shí)驗(yàn)數(shù)據(jù)集包含 800 幅含車牌的圖像以及 400 幅不含車牌的圖像。
實(shí)驗(yàn)測(cè)試對(duì)象中包含了大部分復(fù)雜環(huán)境,如顏色干擾(“湘 BY2054”和“粵 JPG999”的車身均為藍(lán)色),傾斜的車牌(“粵 CFL980”“遼 ANB082”“粵 B0PA09”),復(fù)雜的背景和光照條件(“遼 M66B66”和“浙 BY1V13”)等。從結(jié)果可以看出 :混合第三方庫(kù)支持的車牌定位算法在復(fù)雜條件下均能夠準(zhǔn)確定位車牌,并能夠從車牌上準(zhǔn)確讀取車牌字符 [13]。
4 結(jié) 語(yǔ)
不同第三方庫(kù)進(jìn)行集成時(shí),彼此之間的業(yè)務(wù)流需按照數(shù)據(jù)類型的不同來(lái)選擇接口。在軟件架構(gòu)中,強(qiáng)調(diào)模塊之間的數(shù)據(jù)交換操作。為拓展模塊應(yīng)用范圍、進(jìn)行二次開(kāi)發(fā)、與其他系統(tǒng)集成,就需要進(jìn)行數(shù)據(jù)接口的標(biāo)準(zhǔn)化。數(shù)據(jù)接口的標(biāo)準(zhǔn)化首先需要明確數(shù)據(jù)類型,然后盡量統(tǒng)一模塊之間處理輸出的數(shù)據(jù)格式。
在系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)中采用論文中提到的解決方案,在一定程度上解決了原有系統(tǒng)架構(gòu)適應(yīng)性差、調(diào)整困難的缺陷,能夠借助分層次與模塊化手段來(lái)提高系統(tǒng)穩(wěn)定性,并借助第三方庫(kù)提高系統(tǒng)核心運(yùn)算的速度,易于二次開(kāi)發(fā)。在工程應(yīng)用中,該方法可作為一種快速軟件原型開(kāi)發(fā)的輔助手段,具有較為廣泛的應(yīng)用場(chǎng)景。