胡 鵬,宋 超,張 鑫
(1.湖北文理學(xué)院 圖書館,湖北 襄陽(yáng) 441053;2.襄陽(yáng)職業(yè)技術(shù)學(xué)院 汽車工程學(xué)院,湖北 襄陽(yáng) 441050)
隨著人工智能技術(shù)的發(fā)展,計(jì)算機(jī)在圖像識(shí)別這一領(lǐng)域的應(yīng)用得到了更加快速的發(fā)展。人工智能算法的改進(jìn)使得圖像識(shí)別的速度和準(zhǔn)確率越來(lái)越高,而在圖像識(shí)別領(lǐng)域模板匹配是常用的一種基礎(chǔ)方法,很多高級(jí)算法均是以此方法為基礎(chǔ)發(fā)展而來(lái)。然而對(duì)于模板匹配而言,隨著目標(biāo)圖像規(guī)模比如像素的增長(zhǎng),計(jì)算機(jī)對(duì)圖像識(shí)別處理的時(shí)間和所需存儲(chǔ)空間以幾何倍數(shù)增長(zhǎng)。當(dāng)面對(duì)目標(biāo)圖像過(guò)大時(shí),由于單臺(tái)計(jì)算機(jī)處理能力有限,會(huì)導(dǎo)致處理時(shí)間和所需要的存儲(chǔ)空間急劇增加以至于無(wú)法進(jìn)行處理。面對(duì)這種情況,單純從算法方面進(jìn)行改進(jìn)收效甚微,而使用計(jì)算能力更強(qiáng)的計(jì)算機(jī)則會(huì)花費(fèi)更多的成本,因此需要引入分布式處理的方式,利用多臺(tái)電腦對(duì)目標(biāo)圖像進(jìn)行分布式處理,以節(jié)省處理所需的時(shí)間和空間,更重要的是可以將單臺(tái)計(jì)算機(jī)無(wú)法完成的圖像處理任務(wù)變得可以處理。
目前構(gòu)建分布式計(jì)算平臺(tái)且易于部署和實(shí)現(xiàn)的技術(shù)方案有微軟公司.NET平臺(tái)下的Web服務(wù)技術(shù)與遠(yuǎn)程框架技術(shù)。
Web服務(wù)技術(shù)是一種將應(yīng)用程序以軟件組件的方式進(jìn)行發(fā)布,并通過(guò)網(wǎng)絡(luò)為用戶提供服務(wù),以XML、HTTP、SOAP等業(yè)界標(biāo)準(zhǔn)為基礎(chǔ)的技術(shù)。以Web服務(wù)技術(shù)封裝的應(yīng)用程序叫做Web Service,它可以是某臺(tái)計(jì)算機(jī)上的某個(gè)組件,這個(gè)組件可以為其它調(diào)用它的計(jì)算機(jī)提供服務(wù)。Web Service采用XML格式來(lái)作為數(shù)據(jù)描述的統(tǒng)一格式,以WSDL文檔來(lái)描述自身定義,使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SIMPLE OBJECT ACCESS PROTOCOL,SOAP)來(lái)進(jìn)行調(diào)用,以取代傳統(tǒng)的組件調(diào)用方式。而且基于XML的Web service往往以一個(gè)功能模塊來(lái)提供一個(gè)服務(wù),因此多個(gè)Web service則表現(xiàn)為多個(gè)的功能模塊,并能夠通過(guò)標(biāo)準(zhǔn)接口進(jìn)行訪問(wèn)。Web Service為互聯(lián)網(wǎng)應(yīng)用程序提供了一種非常有效的方式來(lái)共享數(shù)據(jù)和功能,因此Web Service能夠較好地解決異構(gòu)應(yīng)用程序之間松散耦合環(huán)境下的互操作、集成和協(xié)作問(wèn)題。[1~3]基于XML的Web Service的一大特點(diǎn)在于其跨平臺(tái)性,無(wú)論以什么語(yǔ)言在什么平臺(tái)上編寫的應(yīng)用程序,只要它以Web服務(wù)技術(shù)進(jìn)行封裝,那么無(wú)論是Windows系統(tǒng)還是Linux系統(tǒng)或者其它的系統(tǒng)都可以通過(guò)互聯(lián)網(wǎng)對(duì)該Web Service進(jìn)行訪問(wèn)和調(diào)用。而且只要發(fā)布的Web Service的調(diào)用接口不發(fā)生變化,那么即使改變其內(nèi)部封裝的應(yīng)用程序比如變更編寫語(yǔ)言或者變更使用的算法,調(diào)用該Web Service的用戶程序均不需要進(jìn)行改變。因此Web服務(wù)技術(shù)便成為整合異構(gòu)數(shù)據(jù)庫(kù)、搭建網(wǎng)絡(luò)分布式平臺(tái)尤其是在互聯(lián)網(wǎng)上搭建分布式平臺(tái)的重要技術(shù)。
.Net遠(yuǎn)程框架技術(shù)是.Net提供的一種用于替代DCOM的技術(shù),[4]這種技術(shù)是可以實(shí)現(xiàn)構(gòu)建分布式平臺(tái)系統(tǒng)的一種編程框架。該技術(shù)可以實(shí)現(xiàn)同一局域網(wǎng)下不同的計(jì)算機(jī)上運(yùn)行同是.Net框架的程序間相互通信,可以將需要遠(yuǎn)程處理的對(duì)象與選定的客戶端或服務(wù)端的應(yīng)用程序和通信機(jī)制隔離開(kāi)來(lái)。這樣服務(wù)端的程序和遠(yuǎn)程處理對(duì)象以及客戶端程序的耦合性就變得很低,對(duì)調(diào)用該遠(yuǎn)程對(duì)象向網(wǎng)上客戶提供服務(wù)的應(yīng)用程序的要求就很簡(jiǎn)單,幾乎任何應(yīng)用程序都可以完成調(diào)用。.Net遠(yuǎn)程框架提供了System.Runtime.Remoting命名空間,這個(gè)空間中的類可以處理所有與通信相關(guān)的底層細(xì)節(jié)。一般而言,要構(gòu)造一個(gè)分布式系統(tǒng),就需要從網(wǎng)絡(luò)上其他的計(jì)算機(jī)中調(diào)用方法,訪問(wèn)其中的對(duì)象。通常,進(jìn)行方法調(diào)用的計(jì)算機(jī)叫做客戶端,而實(shí)現(xiàn)該方法并遠(yuǎn)程完成該調(diào)用具體操作的計(jì)算機(jī)叫服務(wù)端,而通過(guò)System.Runtime.Remoting命名空間所提供的方法接口就可以實(shí)現(xiàn)客戶端與服務(wù)端的通信如參數(shù)傳遞等工作。和Web服務(wù)技術(shù)相比,.Net遠(yuǎn)程框架技術(shù)在客戶端與服務(wù)端的通信方式上具有更加靈活的選擇,當(dāng)客戶端與服務(wù)端使用的通信通道為Http時(shí),消息則被序列化為XML格式通過(guò)SOAP傳輸;而當(dāng)客戶端與服務(wù)端使用的通信通道為Tcp時(shí),消息則被序列化為二進(jìn)制格式進(jìn)行傳輸。[5]從技術(shù)特點(diǎn)上來(lái)分析,對(duì)于圖像處理的運(yùn)算更多的是通過(guò)局域網(wǎng)的多臺(tái)計(jì)算機(jī)構(gòu)建的計(jì)算平臺(tái)來(lái)實(shí)現(xiàn),因此,可以使用二進(jìn)制編碼的.Net遠(yuǎn)程框架應(yīng)用程序更適合構(gòu)建分布式計(jì)算平臺(tái)。
.Net遠(yuǎn)程框架會(huì)根據(jù)需要提供服務(wù)的內(nèi)容創(chuàng)建一個(gè)遠(yuǎn)程服務(wù)對(duì)象,然后將該服務(wù)對(duì)象部署到一臺(tái)計(jì)算機(jī)上,該計(jì)算機(jī)即為服務(wù)端。部署好后,服務(wù)端啟動(dòng)后先進(jìn)行注冊(cè)并等待即將連入的客戶端。當(dāng)客戶端接到用戶指令后就需要調(diào)用遠(yuǎn)程對(duì)象的某個(gè)方法用以處理具體的運(yùn)算。在.Net遠(yuǎn)程框架中客戶端中的程序和服務(wù)端中的程序都處于不同的程序域即AppDomain中。在.Net體系中,應(yīng)用程序域指的是一個(gè)應(yīng)用程序的邏輯進(jìn)程,.Net體系通過(guò)應(yīng)用程序域可以實(shí)現(xiàn)運(yùn)行時(shí)各應(yīng)用程序間的代碼相互隔離,每個(gè)應(yīng)用程序域均可以在進(jìn)程中被創(chuàng)建、啟動(dòng)、運(yùn)行、調(diào)試和終止,一個(gè)應(yīng)用程序域中的應(yīng)用不會(huì)影響其他應(yīng)用程序域中應(yīng)用的執(zhí)行。[6]因此一個(gè)AppDomain中的對(duì)象,只是在自己的AppDomain中才存在,在服務(wù)端的遠(yuǎn)程服務(wù)對(duì)象客戶端是無(wú)法直接訪問(wèn)的??蛻舳嗽谡{(diào)用遠(yuǎn)程對(duì)象的方法時(shí),必須要通過(guò)代理對(duì)象來(lái)實(shí)現(xiàn),而且在使用代理對(duì)象訪問(wèn)遠(yuǎn)程對(duì)象之前必須先激活才能使用。客戶端的代理一般包含兩種,一種是透明代理。這種代理就表示它是一個(gè)遠(yuǎn)程對(duì)象的精確副本,而遠(yuǎn)程對(duì)象所具有的可以調(diào)用和使用的方法它也都可以使用和調(diào)用,這樣用戶對(duì)遠(yuǎn)程對(duì)象方法的調(diào)用都會(huì)被它獲取并將該調(diào)用傳遞給真實(shí)代理,這種代理和其代理的對(duì)象幾乎無(wú)區(qū)別。另一種就是真實(shí)代理。這種代理是對(duì)用戶調(diào)用進(jìn)行具體處理,它會(huì)接收透明代理所發(fā)出的消息,并將該消息最終傳遞給遠(yuǎn)程對(duì)象。因此當(dāng)在客戶端使用Activator.GetObject()和 Activator.CreateInstance()方法時(shí),會(huì)返回給客戶兩個(gè)代理對(duì)象,透明代理和真實(shí)代理。為了描述方便,本文把透明代理和真實(shí)代理統(tǒng)一稱為代理對(duì)象。當(dāng)激活遠(yuǎn)程對(duì)象后,代理對(duì)象將用戶指令以及調(diào)用遠(yuǎn)程方法所必須的參數(shù)封裝成消息通過(guò)信息通道發(fā)送到服務(wù)端,服務(wù)端接受到消息后先對(duì)消息進(jìn)行解碼,然后根據(jù)傳遞過(guò)來(lái)的指令和參數(shù)調(diào)用對(duì)象相應(yīng)的方法,并將運(yùn)行結(jié)果封裝成消息通過(guò)信息通道發(fā)送到客戶端,客戶端的代理對(duì)象將消息解碼后把結(jié)果返回給用戶。
在構(gòu)建遠(yuǎn)程服務(wù)體系時(shí)必須注意:①遠(yuǎn)程對(duì)象的激活分為兩種方式:服務(wù)器激活和客戶端激活。其中客戶端激活是指服務(wù)端根據(jù)客戶端的調(diào)用請(qǐng)求來(lái)創(chuàng)建服務(wù)對(duì)象,而服務(wù)端激活則是遠(yuǎn)程服務(wù)對(duì)象在服務(wù)端啟動(dòng)時(shí)自動(dòng)創(chuàng)建。一般而言,客戶端激活的對(duì)象生存期在客戶調(diào)用結(jié)束后便終止,而服務(wù)端激活的則可以在每次調(diào)用時(shí)為每個(gè)調(diào)用的客戶端均能生成一個(gè)新的對(duì)象實(shí)例。這樣在構(gòu)建遠(yuǎn)程服務(wù)體系時(shí)可以根據(jù)需要選擇不同的激活方式。②在服務(wù)器端構(gòu)建的遠(yuǎn)程對(duì)象都必須派生于MarshalByRefObject這個(gè)類,客戶端則可以通過(guò)調(diào)用 CreateInstance、GetObject、New 等方法來(lái)激活遠(yuǎn)程對(duì)象的代理,并通過(guò)代理與遠(yuǎn)程對(duì)象進(jìn)行交互。③部署服務(wù)端的遠(yuǎn)程對(duì)象時(shí),需要將這些對(duì)象的相關(guān)特定信息如加載何種名稱的程序集才能夠激活該對(duì)象,以及該對(duì)象的命名空間和類型注冊(cè)到.Net框架的公共語(yǔ)言運(yùn)行庫(kù),以便于用戶的調(diào)用并確保同一對(duì)象不會(huì)重復(fù)注冊(cè)。
利用.Net遠(yuǎn)程框架技術(shù)構(gòu)建的分布式計(jì)算平臺(tái)一搬以樹(shù)狀結(jié)構(gòu)為主,其根節(jié)點(diǎn)主要起接收?qǐng)D像、圖像分塊、調(diào)度計(jì)算節(jié)點(diǎn)對(duì)分塊圖像進(jìn)行處理、接收處理后的分塊圖像并將圖像合并并返回給用戶等作用。而其葉子節(jié)點(diǎn)則起計(jì)算作用,比如在計(jì)算節(jié)點(diǎn)裝入圖像識(shí)別的程序,便可以將無(wú)法在一臺(tái)計(jì)算機(jī)上進(jìn)行的圖像識(shí)別處理,分布在若干臺(tái)作為葉子節(jié)點(diǎn)的計(jì)算機(jī)上完成。分布式計(jì)算系統(tǒng)的基本結(jié)構(gòu)如圖1所示。
圖1 分布式計(jì)算平臺(tái)基本模型
圖像分布式計(jì)算平臺(tái)的構(gòu)建方式是,首先將處理圖像的方法封裝到遠(yuǎn)程服務(wù)對(duì)象中,將其部署在作為計(jì)算節(jié)點(diǎn)的計(jì)算機(jī)上,然后在作為客戶端的計(jì)算機(jī)上部署客戶端即可。由此可見(jiàn),部署基于.Net遠(yuǎn)程框架技術(shù)的分布式計(jì)算平臺(tái)是非常容易的。下面詳細(xì)描述下該平臺(tái)的工作過(guò)程。首先在部署完作為計(jì)算節(jié)點(diǎn)的服務(wù)端程序后,需要運(yùn)行其注冊(cè)功能,這里的注冊(cè)功能是用于將服務(wù)端所要使用的通訊通道以及遠(yuǎn)程服務(wù)對(duì)象的類通過(guò)RegisterChannel和RegisterWellKnownServiceType函數(shù)注冊(cè)到.Net框架的公共語(yǔ)言運(yùn)行庫(kù)中,以便于客戶端的調(diào)用。在部署完客戶端后便可利用客戶端的程序?qū)D像打開(kāi),并根據(jù)計(jì)算節(jié)點(diǎn)部署情況,對(duì)圖像進(jìn)行分塊,然后通過(guò)Activator.GetObject函數(shù)來(lái)建立代理,并通過(guò)代理來(lái)調(diào)用遠(yuǎn)程服務(wù)的方法,通過(guò)通訊通道將待處理的圖像信息傳遞給計(jì)算節(jié)點(diǎn),在計(jì)算節(jié)點(diǎn)處理完后將處理結(jié)果再次通過(guò)通道返回給客戶端。當(dāng)每個(gè)節(jié)點(diǎn)的結(jié)果均返回后,客戶端便會(huì)將處理過(guò)的分塊圖像進(jìn)行整合,從而完成整個(gè)圖像處理過(guò)程。這里需要注意的是,我們?cè)诳蛻舳藢?duì)計(jì)算節(jié)點(diǎn)進(jìn)行調(diào)用時(shí)需要使用異步調(diào)用技術(shù)來(lái)提高平臺(tái)的運(yùn)行效率,異步調(diào)用技術(shù)在Web service構(gòu)建的分布式系統(tǒng)中應(yīng)用非常廣泛。[3]若不使用異步調(diào)用技術(shù),則客戶端在調(diào)用計(jì)算節(jié)點(diǎn)A進(jìn)行圖像處理后會(huì)等待A節(jié)點(diǎn)返回處理結(jié)果,再去調(diào)用B節(jié)點(diǎn),然后等待B返回結(jié)果后再調(diào)用C依次經(jīng)行,這樣明顯效率很低。而使用異步調(diào)用技術(shù),客戶端在調(diào)用A后不需等待A的結(jié)果就可接著調(diào)用B、C以及后續(xù)節(jié)點(diǎn),等到所有節(jié)點(diǎn)返回結(jié)果后再進(jìn)行整合處理,這樣各計(jì)算節(jié)點(diǎn)可以在相差無(wú)幾的時(shí)間中同時(shí)運(yùn)行。當(dāng)n個(gè)節(jié)點(diǎn)性能相同時(shí),平臺(tái)所花費(fèi)的時(shí)間是未使用異步技術(shù)計(jì)算平臺(tái)處理時(shí)間的1/n,無(wú)疑使用異步技術(shù)對(duì)系統(tǒng)性能的提高是巨大的。
由于條件所限,下面以3臺(tái)i3電腦構(gòu)建的局域網(wǎng)分布式系統(tǒng)來(lái)對(duì)圖像處理進(jìn)行測(cè)試。其中一臺(tái)為客戶端用于計(jì)算節(jié)點(diǎn)的調(diào)用、圖像的分割與整合,另外兩臺(tái)為計(jì)算節(jié)點(diǎn)進(jìn)行圖像的模板匹配,模版大小不變?yōu)?*3像素,改變目標(biāo)圖像的大小進(jìn)行測(cè)試。單機(jī)完成圖像識(shí)別處理所需的時(shí)間如表1所示。
表1 單機(jī)測(cè)試結(jié)果
下面以三臺(tái)電腦構(gòu)成的分布式圖像處理系統(tǒng)來(lái)對(duì)圖像處理進(jìn)行測(cè)試,完成圖像識(shí)別處理所需的時(shí)間如表2所示
表2 分布式平臺(tái)測(cè)試結(jié)果
通過(guò)圖像處理測(cè)試表明,使用異步技術(shù)的分布式計(jì)算平臺(tái)在有兩個(gè)計(jì)算節(jié)點(diǎn)時(shí)對(duì)圖像識(shí)別處理完成的時(shí)間,基本接近單機(jī)處理時(shí)間和未使用異步技術(shù)構(gòu)建的分布式計(jì)算平臺(tái)的一半,而且當(dāng)圖像越大越接近一半。因此,使用異步技術(shù)的分布式計(jì)算平臺(tái)在處理大型圖像的識(shí)別中是具有優(yōu)勢(shì)的。
當(dāng)然本文所討論的只是基于.Net遠(yuǎn)程框架技術(shù)的初步分布式計(jì)算平臺(tái),該平臺(tái)的缺點(diǎn)很明顯。首先圖像處理程序需要封裝于遠(yuǎn)程對(duì)象的方法中,如果圖像處理要求有所變化,便需要修改該遠(yuǎn)程對(duì)象的方法,使用起來(lái)很不靈活。其次,該平臺(tái)的容錯(cuò)性較差,如果局域網(wǎng)內(nèi)的計(jì)算機(jī)出現(xiàn)故障便無(wú)法完成圖像處理任務(wù)。因此,對(duì)分布式圖像處理平臺(tái)還需要更深入的研究和完善。
參考文獻(xiàn):
[1]顧寧,劉家茂,柴曉路.Web Services原理與研發(fā)實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2006:7-9.
[2]呂曦,王化文.Web Service 的架構(gòu)與協(xié)議[J].計(jì)算機(jī)應(yīng)用,2002(12):62-65.
[3]胡鵬.構(gòu)建基于WEB服務(wù)的SOA信息集成系統(tǒng)—以襄樊學(xué)院圖書館為例[J].襄樊學(xué)院學(xué)報(bào),2012(2):21-24.
[4]田梅.MS.NET Remoting在圖書管理系統(tǒng)中的應(yīng)用[J].河南農(nóng)業(yè)大學(xué)學(xué)報(bào),2011(8):463-466.
[5]范文廣,黃存東.分布式系統(tǒng)的新型框架—.Net Remoting[J].長(zhǎng)春大學(xué)學(xué)報(bào),2012(10):1198-1206.
[6]邢志紅,王鳳偉.基于.Net Remoting的溯源證書評(píng)價(jià)管理系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2015(10):37-39.