本發(fā)明屬于信息處理技術(shù)領(lǐng)域,尤其涉及目標(biāo)檢測方法及系統(tǒng)。
背景技術(shù):
智能視頻檢測系統(tǒng)利用計算動詞理論體系,可以讓自然語言為計算機(jī)所理解,因而計算機(jī)更準(zhǔn)確模擬人的認(rèn)知過程,實現(xiàn)對目標(biāo)的識別。視頻檢測技術(shù)一般要經(jīng)歷如下5個步驟:系統(tǒng)初始化,圖像采集,圖像預(yù)處理,目標(biāo)檢測與跟蹤,圖像后處理。圖像預(yù)處理功能是圖像平滑、去噪、增強(qiáng)。目標(biāo)檢測與跟蹤算法是視頻檢測技術(shù)的基礎(chǔ),這一步需要發(fā)現(xiàn)目標(biāo),并獲取其軌跡。
目標(biāo)檢測技術(shù)首先對視頻序列圖像進(jìn)行處理,將感興趣的目標(biāo)物體區(qū)域從背景區(qū)提取出來,得到目標(biāo)的位置,大小等數(shù)據(jù)。為后續(xù)目標(biāo)跟蹤、目標(biāo)識別與分析提供支持。視頻目標(biāo)檢測主要利用計算機(jī)視覺、數(shù)字圖像處理、模式識別等技術(shù)。目標(biāo)檢測方法可以分為基于非模型的檢測方法和基于模型的檢測方法,主要有幀間差分法、光流差場法、背景差分法。
目標(biāo)跟蹤指在圖像序列中持續(xù)地估計出感興趣的運動目標(biāo)所在區(qū)域(位置),形成目標(biāo)的運動軌跡。目標(biāo)跟蹤方法有卡爾曼濾波、貝葉斯理論、均值偏移算法等。
全量數(shù)據(jù)處理使用的大多是hadoop,storm或者spark,作為一個批處理系統(tǒng),hadoop以其吞吐量大、自動容錯等優(yōu)點,在海量數(shù)據(jù)處理上得到了廣泛的使用。但是,hadoop不擅長實時計算,因為它天然就是為批處理而生的,Hadoop的缺點也和它的優(yōu)點同樣鮮明——延遲大,響應(yīng)緩慢,運維復(fù)雜。Storm是一個免費開源、分布式、高容錯的實時計算系統(tǒng)。Storm令持續(xù)不斷的流計算變得容易,彌補(bǔ)了Hadoop批處理所不能滿足的實時要求。Storm經(jīng)常用于在實時分析、在線機(jī)器學(xué)習(xí)、持續(xù)計算、分布式遠(yuǎn)程調(diào)用(DistributedRemote Procedure Call,DRPC)和抽取、轉(zhuǎn)換、加載(Extract、Transform、Load,ETL)等領(lǐng)域。Storm的部署管理非常簡單,而且,在同類的流式計算工具,Storm的性能也是非常出眾的。Spark是內(nèi)存分布式框架,試圖吞并Hadoop的Map-Reduce批處理框架和Storm的流處理框架,但是Spark已經(jīng)做得很不錯了,批處理方面性能優(yōu)于Map-Reduce,但是流處理目前還是弱于Storm。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例的目的在于提供一種目標(biāo)檢測方法及系統(tǒng),旨在解決目前實時檢測目標(biāo)計算復(fù)雜的問題。
本發(fā)明實施例是這樣實現(xiàn)的,一種目標(biāo)檢測方法,包括:
獲取目標(biāo)的視頻源文件;
接收所述視頻源文件并對所述視頻源文件進(jìn)行預(yù)處理,輸出幀塊;
接收輸出的幀塊,并以隊列的形式存儲輸出的幀塊;
從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。
本發(fā)明實施例的另一目的在于提供一種目標(biāo)檢測系統(tǒng),包括:
第一獲取單元,用于獲取目標(biāo)的視頻源文件;
預(yù)處理單元,用于接收視頻源文件并對所述視頻源文件進(jìn)行預(yù)處理,輸出幀塊;
存儲單元,用于接收輸出的幀塊,并以隊列的形式存儲輸出的幀塊;
第一檢測單元,用于從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。
在本發(fā)明實施例中,通過對視頻源文件進(jìn)行預(yù)處理,并輸出為幀塊;將幀塊以隊列的形式存儲,對隊列的形式的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。本發(fā)明實施例使得實時檢測目標(biāo)的計算流程簡單、高效。
附圖說明
圖1是本發(fā)明實施例提供的目標(biāo)檢測方法的流程圖;
圖2是本發(fā)明實施例提供的目標(biāo)檢測方法預(yù)處理的流程圖;
圖3是本發(fā)明實施例提供的目標(biāo)檢測方法的后處理的流程圖;
圖4是本發(fā)明實施例提供的目標(biāo)檢測方法的代碼結(jié)構(gòu)圖;
圖5是本發(fā)明實施例提供的目標(biāo)檢測系統(tǒng)的系統(tǒng)架構(gòu)框圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用于解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,是本發(fā)明實施例提供的目標(biāo)檢測方法的流程圖。
在S101中,獲取目標(biāo)的視頻源文件。
所述視頻源文件為視頻流文件,可以是來自攝像裝置的視頻流或者是一個視頻文件,即輸入源為攝像裝置或者視頻文件。
在S102中,接收所述視頻源文件并對所述視頻源文件進(jìn)行預(yù)處理,輸出幀塊。
如圖2所示,是本發(fā)明實施例提供的目標(biāo)檢測方法預(yù)處理的流程圖。優(yōu)選地,所述預(yù)處理功能在客戶端組件實現(xiàn)。
在S201中,抓取視頻源文件中的幀并逐步掃描抓取到的幀。
對于從攝像裝置獲取的視頻流文件,視頻流應(yīng)該在確定的機(jī)器上運行,所述確定的機(jī)器指的是連接所述攝像裝置并安裝有圖像處理庫的電腦,所述圖像處理庫用來打開攝像裝置和抓取幀,優(yōu)選地所述圖像處理庫采用javaCV。
對于視頻文件,圖像處理庫用來打開視頻文件和抓取幀。
在本發(fā)明實施例中,賦予每一幀一個時間戳,視頻文件是視頻自身的時間,而視頻流是實際的時間。所述時間戳,通常是一個字符序列,唯一地標(biāo)識某一刻的時間。
此外,賦予每一幀一個遞增的幀編號。
所述每一幀的時間戳和幀編號是一一對應(yīng)的,按照所述幀編號或所述時間戳逐步掃描所述抓取到的幀。
在掃描完一個視頻文件的幀后,隨視頻文件的編號逐步掃描下一個視頻文件。
在S202中,順序接收掃描到的幀,檢測接收到的幀與幀之間的邊界并順序輸出幀。
所述順序接收掃描到的幀,并檢測接收到的幀與幀之間的邊界并順序輸出幀:即采用先進(jìn)先出策略的,根據(jù)視頻編號、幀編號和時間戳,依次檢測每一幀的邊界并順序輸出幀。
在S203中,在順序輸出的幀中檢測相鄰的幀,減少接收到的幀的幀數(shù)。
在順序輸出的幀中檢測相鄰的幀,減少接收到的幀的幀數(shù)包括:
在順序輸出的幀中檢測相鄰的幀,并根據(jù)幀的相似度減少接收到的幀的幀數(shù)。減少幀的幀數(shù),即降低需要處理的幀的數(shù)量,從而降低計算量,提高系統(tǒng)性能。然后,將減少后的幀采用先進(jìn)先出的策略發(fā)送到S204。
在S204中,將減少后的連續(xù)的幀分組為幀塊并輸出幀塊。
所述將減少后的連續(xù)的幀分組為幀塊并輸出幀塊包括:
將減少后的連續(xù)的幀中預(yù)設(shè)數(shù)量的幀分組為幀塊,并輸出幀塊到S103。
在S102的S201-S204預(yù)處理過程中強(qiáng)順序的幀的正確性是至關(guān)重要的。因為S201-S204是在客戶端實現(xiàn)的,而不是在storm中。在storm中保持強(qiáng)順序需要事物和緩沖邏輯,會大大降低計算性能或?qū)е聫?fù)雜的計算,預(yù)處理過程轉(zhuǎn)移到客戶端可以確保消息的獨立性。
所述強(qiáng)順序為每次只處理一個tuple,除非這個tuple處理成功,否則不去處理下一個tuple;也就是說一定要把當(dāng)前的數(shù)據(jù)處理完,否則不接著處理下一個數(shù)據(jù)。在本發(fā)明實施例中所述tuple代表幀。
在S103中,接收輸出的幀塊,并以隊列的形式存儲輸出的幀塊。
接收輸出的幀塊,并以隊列的形式存儲輸出的幀塊即幀塊放在隊列中的,一旦有足夠的幀塊或達(dá)到預(yù)設(shè)數(shù)量的幀就立即發(fā)送幀。
由于Apache Kafka的高性能和信息保留功能,優(yōu)選地,所述隊列采用Apache Kafka隊列,可以保證事物處理的正確性。
此外,Apache Kafka隊列設(shè)置一個空閑時間,若所述空閑時間超過預(yù)設(shè)時間,則發(fā)送幀塊。
在S104中,從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。
優(yōu)選地,從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置包括:
使用Storm組件從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。
所述Storm組件的topology包含從所述Apache Kafka隊列中檢索信息的spout,實現(xiàn)目標(biāo)檢測的bolt和實現(xiàn)檢測剪枝的bolt。
具體地,如圖3所示,是本發(fā)明實施例提供的目標(biāo)檢測方法的后處理的流程圖。
在S301中,從存儲的幀塊中獲取幀塊。
優(yōu)選地,所述從存儲的幀塊中獲取幀塊包括:
幀塊spout從Apache Kafka隊列中獲取幀塊,將幀塊的元組流(即幀)發(fā)送到目標(biāo)檢測bolt。
在S302中,通過檢測算法對獲取到的幀塊進(jìn)行計算,得到目標(biāo)在幀中的位置檢測結(jié)果,并存儲檢測結(jié)果。
優(yōu)選地,所述從所述獲取到的幀塊中檢測出目標(biāo)在幀中的位置包括:
目標(biāo)檢測bolt采用shuffle grouping從幀塊spout訂閱幀塊,采用目標(biāo)檢測算法檢測出目標(biāo)在幀中的位置。所述目標(biāo)檢測bolt是實際執(zhí)行檢測的任務(wù)模塊。
所述采用目標(biāo)檢測算法檢測出目標(biāo)在幀中的位置包括:采用卷積神經(jīng)網(wǎng)絡(luò)等算法檢測出目標(biāo)在幀中的位置。
因為每個幀塊在目標(biāo)檢測中是獨立的,所以目標(biāo)檢測bolt需要從幀塊spout訂閱幀塊。
此外,目標(biāo)檢測bolt在檢測出目標(biāo)在幀中的位置之后保存目標(biāo)檢測結(jié)果,便于相同的幀塊可以通過查找已經(jīng)保存的檢測結(jié)果避免重復(fù)處理幀,具體地,包括:
查詢已經(jīng)保存的檢測結(jié)果;
若相同的幀塊已進(jìn)行檢測,則直接輸出檢測結(jié)果;
若相同的幀塊未進(jìn)行檢測,則進(jìn)行檢測處理。
進(jìn)一步地,目標(biāo)檢測bolt將檢測到的檢測結(jié)果發(fā)送給檢測剪枝bolt以進(jìn)行進(jìn)一步的處理。
在S303中,刪除重復(fù)的檢測結(jié)果并保存刪除后的結(jié)果。這是因為系統(tǒng)總會有處理錯誤的。
可選地,檢測剪枝bolt采用field grouping刪除重復(fù)的檢測結(jié)果。
優(yōu)選地,對于內(nèi)存緩沖,使用field grouping;對于數(shù)據(jù)庫存儲,使用shuffle grouping。
所述刪除重復(fù)的檢測結(jié)果,可以提高檢測質(zhì)量。
所述方法還包括:
獲取所述目標(biāo)在幀中的位置檢測結(jié)果信息,并跟蹤至少一次所述檢測結(jié)果信息,以保證信息處理的可靠性。至此,本發(fā)明實施例完成了對視頻的實時檢測。
本發(fā)明實施例檢測方法的代碼結(jié)果采用maven管理的多模塊項目,如圖4所示是本發(fā)明實施例提供的代碼結(jié)構(gòu)圖,其中實線箭頭表示子項目關(guān)系,虛線箭頭表示項目之間的依賴關(guān)系。
系統(tǒng)代碼結(jié)構(gòu)由一個頂級項目object detection和五個子項目組成,每個項目具體描述如下:
1)object-detection
object-detection是一個頂級的項目,可以使用mvn package命令去構(gòu)建整個項目。
2)detection-core
detection-core子項目包含所有的核心算法,此項目功能可以供其他子項目使用,算法在此項目中實現(xiàn)。
3)detection-admin-client
detection-admin-client子項目包含客戶端代碼,管理著整個項目。任何外部的項目需要修改系統(tǒng)的狀態(tài)必須只能依賴于這個項目。
4)detection-webapps
detection-webapps包含所有的服務(wù)端代碼,包括從客戶端查詢檢測結(jié)果,上傳視頻文件到集群等等。它在內(nèi)部通過detection-server調(diào)用接口提交檢測任務(wù),因此,該項目需要依賴detection-server項目。該項目需要部署在web容器中,如tomcat。
5)detection-server
detection-server子項目包含所有需要檢測任務(wù)的服務(wù)端代碼,目前包含Storm和Matlab代碼,Matlab代碼是內(nèi)部調(diào)用的算法。該項目需要部署在Storm集群中或者web容器中。
6)detection-camera-client
detection-camera-client子項目所有需要從攝像裝置抓取幀以及提交給detection servers處理的代碼。它需要在發(fā)送給detection servers前處理,因此它需要依賴核心子項目,調(diào)用它所需要的算法。該項目需要部署到安裝有攝像裝置的客戶端機(jī)器。
對應(yīng)于該發(fā)明實施例提供的一種目標(biāo)檢測的方法,圖5示出了本發(fā)明實施例提供的一種目標(biāo)檢測系統(tǒng)的結(jié)構(gòu)框圖,為了便于說明,僅示出了與本實施例相關(guān)的部分。
參照圖5,該系統(tǒng)包括:
第一獲取單元51,用于獲取目標(biāo)的視頻源文件;
預(yù)處理單元52,用于接收視頻源文件并對所述視頻源文件進(jìn)行預(yù)處理,輸出幀塊;
存儲單元53,用于接收輸出的幀塊,并以隊列的形式存儲輸出的幀塊;
第一檢測單元54,用于從存儲的幀塊中獲取幀塊,對獲取到的幀塊進(jìn)行處理后得到目標(biāo)在幀中的位置。
所述預(yù)處理單元52包括:
幀抓取單元521,用于抓取視頻源文件中的幀并逐步掃描抓取到的幀;
第二檢測單元522,用于順序接收掃描到的幀,并檢測接收到的幀與幀之間的邊界并順序輸出幀;
視頻抽取單元523,用于在順序輸出的幀中檢測相鄰的幀,減少接收到的幀的幀數(shù);
幀分組單元524,用于將減少后的連續(xù)的幀分組為幀塊并輸出幀塊。
所述第一檢測單元54包括:
第二獲取單元541,用于從所述存儲的幀塊中獲取幀塊;
目標(biāo)檢測單元542,用于通過檢測算法對獲取到的幀塊進(jìn)行計算,得到目標(biāo)在幀中的位置檢測結(jié)果,并存儲檢測結(jié)果。
所述第一檢測單元54還包括:
檢測剪枝單元543,用于刪除重復(fù)的檢測結(jié)果信息。
所述系統(tǒng)還包括:
目標(biāo)跟蹤單元,用于獲取所述目標(biāo)在幀中的位置檢測結(jié)果信息,并跟蹤至少一次所述檢測結(jié)果信息。
在本發(fā)明實施例中,通過在客戶端對視頻源文件進(jìn)行預(yù)處理,并輸出為幀塊;將幀塊以隊列的形式存儲,對隊列的形式的幀塊在storm中進(jìn)行處理后得到目標(biāo)在幀中的位置。本發(fā)明實施例采用storm使得實時檢測目標(biāo)的計算流程簡單、高效。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。