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