楊慧聞 張嘉琪
摘要:當(dāng)前各行業(yè)的各種類型的監(jiān)控攝像頭的安裝越來越普及,在交通測流、檢測車輛違章、銀行安保、工廠運行監(jiān)控、產(chǎn)品加工等各方面都需要進(jìn)行實時監(jiān)控,并且對所獲取到的監(jiān)控視頻進(jìn)行分析和視覺應(yīng)用(包括但不限于測量測定、顏色處理、識別處理、定位引導(dǎo)等),為了解決監(jiān)控攝像頭的實時監(jiān)控影像的在LabVIEW中的調(diào)用,提出了三種基于LabVIEW平臺上的針對兩種不同類型(ip攝像頭,usb攝像頭)的監(jiān)控視頻畫面的實時調(diào)用,利用LabVIEW平臺的視覺圖像處理模塊VDM(Vision Development Module)、視頻流SDK二次開發(fā)、VLC多媒體播放器調(diào)用等技術(shù)編寫程序模型,實現(xiàn)實時監(jiān)控畫面在LabVIEW中的調(diào)用。
關(guān)鍵詞:實時預(yù)覽;LabVIEW;SDK二次開發(fā);VDM
中圖分類號:TP311.1? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)36-0238-05
Abstract: at present, the installation of various types of surveillance cameras in various industries is becoming more and more popular, which needs real-time monitoring in traffic flow measurement, vehicle violation detection, bank security, factory operation monitoring, product processing and other aspects, as well as analysis and visual application of the obtained surveillance video (including but not limited to measurement and measurement, color processing, identification processing, setting In order to solve the call of the real-time monitoring image of the monitoring camera in LabVIEW, three kinds of real-time calls for two different types of monitoring video images (IP camera, USB camera) based on LabVIEW platform are proposed, and the vision development module VDM (vision development) of LabVIEW platform is used Module), secondary development of video stream SDK, call of VLC multimedia player and other technologies are used to write program models to realize the call of real-time monitoring screen in LabVIEW.
Key words: Live preview; LabVIEW; SDK secondary development; VDM
1 背景
當(dāng)前隨著我國經(jīng)濟(jì)的快速發(fā)展和消費者安全意識的逐漸提高,各個行業(yè)的根據(jù)其自身需求,都會大量使用到各種類型的實時監(jiān)控攝像頭,促使監(jiān)控攝像頭在視頻影像主流應(yīng)用層面快速發(fā)展。尤其是在這些場景下: 測定/測量包括原始零件的測量、關(guān)鍵尺寸的檢查、角度、范圍、直徑、尺寸、中心線、垂直等的測定;圖像識別和圖像處理包括圖像的標(biāo)識、字符、二維碼、條碼的定位、圖像的灰度化、二值化處理和圖像的準(zhǔn)確識別;定位/引導(dǎo)包括先進(jìn)的自動化技術(shù)或機器人設(shè)備、零部件的高精度裝配和完成其他精細(xì)生產(chǎn)工藝[1]。雖然實時監(jiān)控攝像頭產(chǎn)品作為前端應(yīng)用產(chǎn)品其技術(shù)的發(fā)展也已經(jīng)可以到達(dá)4k左右的規(guī)模,但對于其后端產(chǎn)品相關(guān)技術(shù)的深入研究和應(yīng)用存在一定的不足,尤其在如何實現(xiàn)實時的監(jiān)控視頻影像在其開發(fā)應(yīng)用平臺過程中的管理和調(diào)用是其面臨的主要技術(shù)問題之一。
LabVIEW是一種新興的網(wǎng)絡(luò)虛擬儀器(virtual instrumention),利用圖形化的編輯語言,采用框圖式的程序設(shè)計,將計算機開發(fā)平臺與實驗室虛擬儀器聯(lián)系起來,是未來儀器開發(fā)的一種新趨勢。LabVIEW集成了適用于多種協(xié)議的軟硬件開發(fā)和各種類型數(shù)據(jù)采集卡的應(yīng)用功能,內(nèi)置便于實際操作TCP/IP、ActiveX控件的庫函數(shù)。
本文針對兩種監(jiān)控攝像頭類型(IP網(wǎng)絡(luò)攝像頭[2]和USB攝像頭)實時畫面的調(diào)用,設(shè)計了三種模型進(jìn)行研究。在對網(wǎng)絡(luò)攝像頭實時畫面的調(diào)用研究中,設(shè)計了一種基于攝像頭設(shè)備視頻流源SDK二次開發(fā)的影像實時調(diào)用程序模型,另一種是基于VLC多媒體播放器的ActiveX控件在LabVIEW程序中的調(diào)用,通過RTSP取流協(xié)議實現(xiàn)IP攝像頭實時預(yù)覽的程序模型。此外,在對USB攝像頭的實時影像調(diào)用的研究中,設(shè)計一種基于LabVIEW中VDM(Vision Development Module)視覺開發(fā)工具實時調(diào)用監(jiān)控畫面的程序模型,三種模型如圖1所示:
2 針對IP網(wǎng)絡(luò)攝像頭實時調(diào)用的程序模型
2.1 設(shè)備介紹
海康威視—DS紅外點陣筒型網(wǎng)絡(luò)攝像機
設(shè)備型號DS-2CD3T86FWDV2-I3S? 6mm
電源:12V
如圖2、圖3所示:
2.2 基于攝像頭視頻源SDK二次開發(fā)的視頻實時調(diào)用程序模型
攝像頭SDK開發(fā)工具(software development kit)是由制造商??低暬谄渥杂蠭P通信協(xié)議自主研發(fā)的,為其產(chǎn)品包括不限于高清數(shù)字?jǐn)z像機、視頻監(jiān)控產(chǎn)品、網(wǎng)絡(luò)攝像機、無人機產(chǎn)品、客戶端視頻軟件、手持可穿戴產(chǎn)品等提供無線網(wǎng)絡(luò)配套服務(wù),用于對無線網(wǎng)絡(luò)或有線局域網(wǎng)的訪問和對產(chǎn)品控制軟件的應(yīng)用進(jìn)行二次開發(fā)。SDK主要的功能[3]包括實時預(yù)覽、產(chǎn)品控制、設(shè)備升級、設(shè)備的數(shù)據(jù)格式化和恢復(fù)、無線訪問和傳輸數(shù)據(jù)、設(shè)備使用情況日志等。程序設(shè)計模型要成功實現(xiàn)對監(jiān)控設(shè)備視頻的實時預(yù)覽和控制功能,需要基于制造商??低暤脑碨DK動態(tài)鏈接庫的實時預(yù)覽和控制功能,進(jìn)行二次開發(fā)。
DLL(Dynamic Link Library,動態(tài)鏈接庫)以后綴名.dll為格式[4],包含??低暜a(chǎn)品二次開發(fā)的代碼、數(shù)據(jù)、多個應(yīng)用程序的可執(zhí)行文件,程序的注冊登錄函數(shù)和實時預(yù)覽函數(shù)等函數(shù)名和變量符號都包含在其引入庫(.lib)中。所以當(dāng)程序需要使用一個DLL來調(diào)用數(shù)據(jù)庫函數(shù)執(zhí)行動態(tài)開發(fā)時,只需要手動鏈接一個DLL中的引入庫文件。其中的函數(shù)代碼和應(yīng)用程序運行時的數(shù)據(jù)不會同時被應(yīng)用程序復(fù)制,只有當(dāng)應(yīng)用程序運行時,才將自動加載所需DLL的引入庫文件。
設(shè)備的DLL動態(tài)鏈接庫在一般的情況下不能直接獨立的運行,也就是程序不會自行去發(fā)送或接收消息。動態(tài)鏈接庫往往看起來像是一些單獨的文件,內(nèi)包含有可鏈接的多個函數(shù),當(dāng)某一個庫函數(shù)名被調(diào)用,其才會在內(nèi)存中加載一次,避免了多次調(diào)用相同庫函數(shù)產(chǎn)生的資源冗余。程序按下列六步驟進(jìn)行編寫:
1)提前設(shè)置子VI,將所需控件添加到連接端。
2)在DLL庫中選擇調(diào)用函數(shù)名,所用到的庫函數(shù)見5),建立新的VI,選擇端口和路徑的時候我們需要指定該端口到??低暤腟DK文件夾。在使用函數(shù)值表示輸出的端口類型上,選擇新的輸出Pointto value,然后選中“Specify path or diagram”,表示系統(tǒng)會動態(tài)檢查和調(diào)用該輸出DLL文件,此時端口和路徑取決于最上端的路徑或者輸入端,Libraryname or path里輸入的端口和路徑可能無效。在輸出parameters頁,系統(tǒng)會自動檢查和添加DLL的輸入、輸出端口,如果添加不完整,則應(yīng)該需要手動檢查DBL,輸入:Value;DBL相應(yīng)輸出為Pointerto Value即可。
3)輸出終端前應(yīng)檢查是否有給每個DLL賦初始值,如果需要輸出的終端數(shù)組沒有初始值,則表示整個DBL數(shù)組以及不能正常進(jìn)行數(shù)據(jù)輸出。len、 len2分別為一個輸入數(shù)組、輸出數(shù)組的個數(shù),需將這兩個數(shù)組參數(shù)設(shè)置默認(rèn)為與實際的輸入數(shù)組初始值大小一致。
4)在調(diào)用規(guī)范中選擇stdcall調(diào)用方式。在sdk調(diào)用的規(guī)范里面分別規(guī)定了對庫函數(shù)的兩種執(zhí)行調(diào)用的方式,即分別執(zhí)行stdcall(WINAPI)和Call調(diào)用。兩者的主要區(qū)別在于是分別由被執(zhí)行的調(diào)用者或調(diào)用者自己負(fù)責(zé)清理和創(chuàng)建堆棧。此次程序采用的是??低晹z像頭提供的DLL,選擇了stdcall調(diào)用的規(guī)范。
5)對于線程選用默認(rèn)狀態(tài)為在UI線程中運行即可。
6)在庫名/路徑選項下選擇正確的sdk開發(fā)文件地址,以及實時調(diào)用所用到的庫函數(shù)。實時調(diào)用預(yù)覽需要通過庫函數(shù)名和運行流程如圖4所示。調(diào)用庫函數(shù)對話框中需要將調(diào)用規(guī)范設(shè)置為stdcall(WINAPI)調(diào)用,在參數(shù)頁中設(shè)置調(diào)用庫函數(shù)返回值的類型為Void,添加參數(shù)設(shè)置input參數(shù)設(shè)置為—維雙精度浮點型數(shù)組,數(shù)組返回值格式可以作為數(shù)組的數(shù)據(jù)指針。通過添加參數(shù)設(shè)置input length為整型傳值參數(shù),添加output參數(shù)為一維32位整型數(shù)組。
根據(jù)sdk二次開發(fā),所設(shè)計的實現(xiàn)實時調(diào)用監(jiān)控畫面的LabVIEW程序圖前后面板如圖5,圖6所示:
2.3 基于VLC多媒體播放器的程序模型
VLC(VideoLan)是一款支持多種視頻播放格式的開源播放器,可以實時解析通過URL(統(tǒng)一資源定位系統(tǒng),uniform resource locator)方式取流獲得的設(shè)備通道、地址、用戶名和密碼等信息。RTSP (Rapid Spanning Tree Protocol)為取流的協(xié)議,取到的碼流后需要經(jīng)過解碼才能顯示,可以通過 Activex顯示控件(ocx顯示控件)在程序中實現(xiàn)實時調(diào)用監(jiān)控影像的設(shè)計。LabVIEW中ActiveX程序允許播放動畫,可以加載VLC播放器實現(xiàn)取流過程。
RTSP取流 URL規(guī)定:
rtsp://username:password@
URL描述:
rtsp://設(shè)備用戶名和密碼@<設(shè)備IP地址>/
程序所使用的??低暰W(wǎng)絡(luò)攝像頭的RTSP取流為:rtsp://admin:asd123123@192.168.3.25:554/h264/ch33/main/av_stream
VLC的ActiveX控件
因為視頻編碼采用VLC進(jìn)行串流,所以在程序中設(shè)計實時預(yù)覽時相應(yīng)的也要使用VLC解碼(調(diào)用VLC Active X控件)。下圖7,8為實現(xiàn)基于VLC編寫的實時調(diào)用監(jiān)控畫面的LabVIEW程序圖,若復(fù)制程序,則可支持多路攝像頭;
3 針對USB網(wǎng)絡(luò)攝像頭實時調(diào)用的程序模型
3.1 基于LabVIE的VDM工具的USB攝像頭的實時預(yù)覽模型
VDM即Vision Development Module(視覺開發(fā)模塊)該模塊是用來在LabVIEW中實現(xiàn)對圖像和視頻流進(jìn)行開發(fā)的工具包,包含了圖像多種圖像處理和編輯的庫函數(shù)[6],程序按下述本程序按下七步驟進(jìn)行編寫:
1)首先使用圖像創(chuàng)建函數(shù)IMAQ Create,此函數(shù)主要參數(shù)為Border Size(邊界值的大小),當(dāng)使用圖像處理函數(shù)子選板進(jìn)行對像素的處理,需要確定一個參考圖中相鄰兩個像素的邊界值。當(dāng)給定了邊界的像素數(shù),而像素的值取決于所使用的圖像處理函數(shù)。對于圖像名默認(rèn)設(shè)置為任意字符串即可,而圖像類型要采用U32,因為調(diào)用的視頻圖像為彩色圖像。
2)使用攝像頭函數(shù)IMAQdx Open Camera VI為用戶打開現(xiàn)有的相機或其他設(shè)備,查看所有攝像頭,同時查看需要添加攝像頭的配置文件。
3)之后使用函數(shù)IMAQdx Close Camera VI為了停止對圖像的獲取,釋放出為讀取圖像數(shù)據(jù)所占用的設(shè)備所需資源,然后關(guān)閉相機。
4)使用加載和抓拍函數(shù)IMAQdx Configure Grab VI。其主要作用于在相機設(shè)備的緩沖區(qū)內(nèi)快速反復(fù)的加載和采集相機圖像,同時快速復(fù)制圖像。倘若在加載或調(diào)用函數(shù)時在IMAQdx Open Camera VI之前已經(jīng)加載或調(diào)用此了函數(shù)的VI,則IMAQdx Configure Grab VI意味著函數(shù)使用了默認(rèn)的相機設(shè)備cam0。取消函數(shù)IMAQdx Unconfigure Acquisition VI的加載和調(diào)用為了完全取消此函數(shù)在該步驟的配置獲取的圖像。
5)使用獲取圖像當(dāng)前幀數(shù)的函數(shù)IMAQdx Grab VI。在上一個攝像頭的函數(shù)中調(diào)用IMAQdx Configure Grab VI調(diào)用之后應(yīng)該再次調(diào)用此VI。當(dāng)圖像類型與視頻流輸出類型不匹配時,函數(shù)會默認(rèn)將圖像轉(zhuǎn)為合適格式。
6)刪除圖像函數(shù)IMAQ Dispose VI為設(shè)備釋放內(nèi)存空間。為使得程序運行的流暢且及時釋放其占據(jù)的內(nèi)存,新建的每一個圖像都需要重新建立一個這樣的VI。當(dāng)最后運行結(jié)束的程序不再需要調(diào)用所需要的映像時調(diào)用函數(shù)IMAQ Dispose。
7)程序使用While循環(huán)程序結(jié)構(gòu)方便連續(xù)同時運行多個圖像的采集程序,只有在出現(xiàn)錯誤或者手動點擊循環(huán)停止按鈕時,循環(huán)方才自動停止,采集程序隨即終止,且自動關(guān)閉已重新打開的攝像頭,清除所有圖像的緩存,釋放系統(tǒng)內(nèi)存[7]。
前面板:cam 0默認(rèn)為計算機自帶攝像頭。拍照:在前面板上增加一個拍照按鈕,在按下拍照按鈕時,負(fù)責(zé)采集圖像的程序啟動,拍下一張照片,并顯示到前面板,拍照功能通過Case結(jié)構(gòu)實現(xiàn),按鈕在默認(rèn)情況下,是0,按下時為1,松開又恢復(fù)為0。
LabVIEW的條件結(jié)構(gòu)相當(dāng)于C語言中的
if(表達(dá)式){……}
else{……}
和switch結(jié)構(gòu):
switch(表達(dá)式)
{case值1:語句1break;
case值2:語句2break;
…
default:語句nbreak;}
該設(shè)計有兩個Case,即1和0,當(dāng)輸入值為1(真)時,即按下拍照按鈕,拍照程序運行,否則,不運行拍照程序。
模型程序如圖9,10所示
4 模型驗證及結(jié)論
在調(diào)用海康威視高清攝像頭作為模型設(shè)備運行程序時,在地址處填入與電腦同局域網(wǎng)地址為192.168.1.1,用戶名為admin,設(shè)備密碼為asd123123,程序運行均顯示正確且流暢運行,運行結(jié)果如圖11,圖12,圖13所示,三種程序模型皆能完全實現(xiàn)該視頻設(shè)備監(jiān)控影像的實時調(diào)用和預(yù)覽。??低暿菄鴥?nèi)先進(jìn)監(jiān)控設(shè)備制造商和開發(fā)者,在實現(xiàn)該設(shè)備的IP和USB兩種類型的實時調(diào)用后,其他廠商的相同類型設(shè)備,只要基于設(shè)備源sdk或者編解碼流,在本程序模型中均能正確完成實時調(diào)用和預(yù)覽。
參考文獻(xiàn):
[1] 施瀅.智能視頻監(jiān)控與檢索系統(tǒng)開發(fā)[D].南京:南京理工大學(xué),2016.
[2] 曾帥,李樂民,廖丹.一種基于視頻轉(zhuǎn)碼與IP組播的媒體推送系統(tǒng)設(shè)計[J].計算機應(yīng)用研究,2013,30(2):521-524.
[3] 夏寅昕.大型客機駕駛艙機組行為監(jiān)測系統(tǒng)設(shè)計[D].上海:上海交通大學(xué),2011.
[4] 李高升,周東明,何建國,等.LabVIEW中DLL文件的創(chuàng)建及其應(yīng)用[J].現(xiàn)代電子技術(shù),2005,28(5):24-25,30.
[5] 謝其德,張云云.動態(tài)鏈接庫在LabVIEW中的高級應(yīng)用[J].微計算機信息,2004,20(10):45-46.
[6] 蘭晶.基于Labview的人臉識別系統(tǒng)的研究與實現(xiàn)[D].北京:北京郵電大學(xué),2015.
[7] 李德堯,李和平.基于LabVIEW VDM的鎖螺絲機器人控制系統(tǒng)設(shè)計[J].機床與液壓,2018,46(23):61-64.
【通聯(lián)編輯:謝媛媛】