鄭雪原
(南京擎天科技有限公司 江蘇省南京市 211800)
“城市公共安全是指國(guó)家各級(jí)人民政府為了保護(hù)社會(huì)公眾的生命財(cái)產(chǎn)安全,保障城市公共設(shè)施的穩(wěn)定運(yùn)行,預(yù)防和控制各類重大災(zāi)害、事故和突發(fā)事件的發(fā)生,減少社會(huì)危害和經(jīng)濟(jì)損失,穩(wěn)定社會(huì)和諧發(fā)展而提供的一種社會(huì)性公共服務(wù)”[1][2]。城市公共安全已經(jīng)成為各級(jí)政府部門城市管理、社會(huì)治理、治安防控、打擊犯罪,建設(shè)平安城市的重要關(guān)注點(diǎn)。近幾年寬帶和5G 通信技術(shù)大面積普及,城市級(jí)視頻監(jiān)控覆蓋范圍逐漸擴(kuò)大,海量視頻實(shí)現(xiàn)了匯聚存儲(chǔ)。隨著基于深度學(xué)習(xí)的AI 視頻圖像處理分析比對(duì)技術(shù)實(shí)用性的提高,在城市公共安全管理中以人像、車輛視頻圖像為分析目標(biāo)的應(yīng)用需求快速增加。為此需要建設(shè)一套針對(duì)城市級(jí)監(jiān)控視頻人像、車輛圖像處理、檢索比對(duì)和算法挖掘的智能分析平臺(tái)。
城市級(jí)視頻圖像智能分析系統(tǒng)通過建立統(tǒng)一的平臺(tái)實(shí)時(shí)匯聚城市范圍內(nèi)的監(jiān)控視頻數(shù)據(jù)流,集中存儲(chǔ)和管理,提供即時(shí)視頻、圖像查詢服務(wù);建立統(tǒng)一的視頻、圖像計(jì)算分析引擎,支持多家視頻、圖像處理分析廠商的引擎進(jìn)行算法融合,全面提供人像、車輛等比對(duì)、識(shí)別、分析的服務(wù)能力;根據(jù)具體業(yè)務(wù)需要建立人像、車輛等圖像相關(guān)業(yè)務(wù)應(yīng)用。
通常城市級(jí)的視頻圖像智能分析系統(tǒng)可分為以下幾個(gè)子系統(tǒng):
(1)視頻圖像數(shù)據(jù)采集系統(tǒng):通常由視頻采集設(shè)備、編碼器、存儲(chǔ)設(shè)備、控制器和軟件系統(tǒng)組成。目前主流監(jiān)控視頻廠家都會(huì)提供比較完善的視頻數(shù)據(jù)采集系統(tǒng)的解決方案。
(2)視頻圖像數(shù)據(jù)匯聚存儲(chǔ)系統(tǒng):用于集中接入、管理和存儲(chǔ)多個(gè)監(jiān)控點(diǎn)的視頻圖像數(shù)據(jù),根據(jù)業(yè)務(wù)需求和規(guī)則進(jìn)行規(guī)范化存儲(chǔ)管理。重點(diǎn)是要解決海量視頻圖像流的并發(fā)接入、實(shí)時(shí)存儲(chǔ)和橫向擴(kuò)容問題,確保接入和存儲(chǔ)業(yè)務(wù)的不間斷性和可擴(kuò)展性。
(3)視頻處理與圖像提取系統(tǒng):用于處理視頻文件,從中提取出完整圖像,對(duì)圖像進(jìn)行加工,提供達(dá)到一定標(biāo)準(zhǔn)要求的高質(zhì)量圖像文件。該系統(tǒng)通常包括:
①視頻處理組件:讀取視頻文件進(jìn)行加工處理,例如視頻剪輯、轉(zhuǎn)碼、壓縮、降噪、濾鏡等。
②圖像提取組件:從視頻文件中提取單獨(dú)的完整圖像進(jìn)行處理,例如調(diào)整大小、剪切圖像、調(diào)整顏色、增加濾鏡等。
(4)圖像比對(duì)與預(yù)警系統(tǒng):實(shí)時(shí)檢測(cè)和比對(duì)圖像數(shù)據(jù),對(duì)異常情況進(jìn)行預(yù)警處理。該系統(tǒng)通常包括:
①圖像比對(duì)組件:使用各種算法,例如人臉識(shí)別、車牌識(shí)別、動(dòng)態(tài)目標(biāo)檢測(cè)等,比對(duì)圖像數(shù)據(jù),識(shí)別出異常情況,例如犯罪行為、交通事故等。
②預(yù)警系統(tǒng)組件:根據(jù)識(shí)別出的異常情況通過短信、郵件、語(yǔ)音等方式發(fā)送給相關(guān)人員。
(5)圖像查詢比對(duì)與分析計(jì)算服務(wù)系統(tǒng):利用圖像特征提取和計(jì)算服務(wù)實(shí)現(xiàn)圖像查詢、比對(duì)和分析。主要由三個(gè)主要組件構(gòu)成:
①圖像特征提取組件:負(fù)責(zé)對(duì)圖像進(jìn)行特征提取。常見的特征包括顏色、紋理、形狀、邊緣等。該組件使用各種算法,例如局部二值模式(LBP)、方向梯度直方圖(HOG)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)等。
②圖像查詢比對(duì)組件:負(fù)責(zé)對(duì)提取出的特征進(jìn)行比對(duì),返回與之相似的圖像。該組件使用各種比對(duì)算法,例如余弦相似度、歐氏距離、漢明距離、深度卷積神經(jīng)網(wǎng)路(DCNN)等。
③圖像分析計(jì)算服務(wù)組件:負(fù)責(zé)對(duì)圖像進(jìn)行分析和計(jì)算。例如可以使用深度學(xué)習(xí)算法進(jìn)行圖像分割、分類、目標(biāo)檢測(cè)等任務(wù)。該組件使用云計(jì)算、分布式計(jì)算等計(jì)算服務(wù)以提高處理效率。
(6)基于視頻圖像的業(yè)務(wù)應(yīng)用系統(tǒng):依托上述各系統(tǒng)的能力,結(jié)合業(yè)務(wù)應(yīng)用的需求,解決業(yè)務(wù)場(chǎng)景中的實(shí)際問題。
本文討論的系統(tǒng)架構(gòu)不涉及視頻數(shù)據(jù)采集子系統(tǒng),以解決視頻圖像數(shù)據(jù)匯聚存儲(chǔ)、處理提取、比對(duì)預(yù)警、查詢分析和業(yè)務(wù)應(yīng)用為主要設(shè)計(jì)目標(biāo)。
面向城市級(jí)視頻數(shù)據(jù)的分析處理系統(tǒng),對(duì)接入的數(shù)據(jù)量有一定要求。一般單日處理的視頻數(shù)據(jù)不少于5000路,單日人像車輛車牌數(shù)據(jù)更新量不少于2000 萬(wàn),靜態(tài)人像、車輛和車牌特征庫(kù)記錄數(shù)不少于3 億。
本文討論的系統(tǒng)需要實(shí)現(xiàn)以下功能:
(1)建立人像、車輛和車牌資源庫(kù):實(shí)時(shí)匯聚不同來源的圖像數(shù)據(jù)并進(jìn)行標(biāo)準(zhǔn)化處理。建立靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù),以及各類業(yè)務(wù)主題庫(kù)。其中靜態(tài)庫(kù)是人像、車輛和車牌的基準(zhǔn)庫(kù),更新頻率較低,總量相對(duì)固定。一般保存證件照或與證件照接近的標(biāo)準(zhǔn)人像圖片、行駛證車輛圖片或車牌圖片。動(dòng)態(tài)庫(kù)是從視頻流、視頻文件中提取的人像、車輛和車牌圖片等,以及相關(guān)的元數(shù)據(jù),如時(shí)間、采集位置、人像或車輛特征、車輛號(hào)牌等。元數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù),動(dòng)態(tài)庫(kù)中一般需要保存人像、車輛、車輛號(hào)牌的特征值(特征向量)等;
(2)針對(duì)歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)提供即時(shí)查詢,實(shí)現(xiàn)1:1 和1:N 的比對(duì);
(3)實(shí)現(xiàn)針對(duì)不同時(shí)間、地點(diǎn)的相同人像的歸集歸檔處理;
(4)提供多種比對(duì)分析挖掘算法,簡(jiǎn)單算法支持即時(shí)查詢,復(fù)雜算法支持以任務(wù)方式執(zhí)行并反饋結(jié)果。
為了滿足上述功能需求和數(shù)據(jù)量,本系統(tǒng)的架構(gòu)設(shè)計(jì)需要重點(diǎn)考慮以下問題:
(1)實(shí)時(shí)數(shù)據(jù)與歷史數(shù)據(jù)的存儲(chǔ)和處理分離;
(2)圖像文件和元數(shù)據(jù)的存儲(chǔ)分離;
(3)動(dòng)態(tài)數(shù)據(jù)存在不能一次性匯聚完整、有錯(cuò)漏等情況,需要在一段時(shí)間內(nèi)陸續(xù)匯聚補(bǔ)齊。針對(duì)這種情況可考慮匯聚補(bǔ)齊時(shí)間不超過n日,n 一般可設(shè)定為3-5。
初步設(shè)計(jì)如圖1 所示的系統(tǒng)架構(gòu):
圖1:系統(tǒng)架構(gòu)圖1
(1)實(shí)時(shí)獲取的圖像數(shù)據(jù)被寫入Kafka 集群作為緩沖池供后臺(tái)服務(wù)使用[3]。
(2)后臺(tái)服務(wù)通過輪詢從Kafka 中讀取視頻抓拍圖片和元數(shù)據(jù)檔案。
(3)后臺(tái)實(shí)時(shí)數(shù)據(jù)接入服務(wù)將視頻抓拍圖片和元數(shù)據(jù)檔案插入或更新入分布式數(shù)據(jù)庫(kù)集群(MPPCluster)的熱數(shù)據(jù)存儲(chǔ)區(qū)。熱數(shù)據(jù)存儲(chǔ)區(qū)保存n日之內(nèi)的數(shù)據(jù)。由于每日獲取的實(shí)時(shí)數(shù)據(jù)存在錯(cuò)漏的情況,需要在后續(xù)的n日內(nèi)補(bǔ)齊,n日之內(nèi)這部分?jǐn)?shù)據(jù)有較高的更新頻率。n 一般不超過5,通常可以取3。
(4)分布式數(shù)據(jù)庫(kù)集群中超過n日的數(shù)據(jù)納入冷數(shù)據(jù)區(qū)保存,一般不需要更新,主要供查詢分析使用。
(5)后臺(tái)歷史數(shù)據(jù)抽取服務(wù)從MPPCluster 中抽取超過n日的冷數(shù)據(jù)存入ES 集群(Elasticsearch Cluster)。ES 集群為存儲(chǔ)的所有數(shù)據(jù)建立索引,提供快速數(shù)據(jù)查詢服務(wù)。新數(shù)據(jù)存入ES 集群后,索引自動(dòng)更新,確保每日的數(shù)據(jù)都有最新的索引可用。
(6)本系統(tǒng)的授權(quán)用戶訪問Web 應(yīng)用服務(wù)提交查詢分析命令。
(7)Web 應(yīng)用服務(wù)解析查詢分析命令,從MPPCluster 獲取n日內(nèi)的熱數(shù)據(jù),從ES 集群獲取超過n日的冷數(shù)據(jù)。Web 應(yīng)用服務(wù)對(duì)獲取的熱冷數(shù)據(jù)進(jìn)行分析計(jì)算后將結(jié)果反饋給系統(tǒng)授權(quán)用戶。
以上架構(gòu)設(shè)計(jì)相對(duì)比較簡(jiǎn)單,能夠應(yīng)對(duì)基本的業(yè)務(wù)應(yīng)用,但在數(shù)據(jù)量和并發(fā)訪問量較大的情況下性能和穩(wěn)定性難以滿足要求。在實(shí)際應(yīng)用中存在以下問題:
(1)n日內(nèi)的熱數(shù)據(jù)保存在MPPCluster 的單張數(shù)據(jù)表中,當(dāng)Web 應(yīng)用服務(wù)需要大量查詢n日內(nèi)數(shù)據(jù)時(shí),由于此單張無分區(qū)數(shù)據(jù)表需要同時(shí)應(yīng)對(duì)查詢、更新、刪除和新數(shù)據(jù)插入操作,性能受到較大影響。
(2)分析計(jì)算都是由Web 應(yīng)用服務(wù)將數(shù)據(jù)從MPPCluster 和ES 集群中抽取到本機(jī)進(jìn)行計(jì)算。由于Web 應(yīng)用服務(wù)器本機(jī)的性能(包括算力、內(nèi)存大小等)的影響,直接導(dǎo)致計(jì)算效能低,并發(fā)處理能力弱,用戶體驗(yàn)差,系統(tǒng)整體性能低。
(3)所有查詢分析計(jì)算全部由Web 應(yīng)用服務(wù)單機(jī)承擔(dān),存在單點(diǎn)故障的風(fēng)險(xiǎn),無法通過橫向拓展提高性能和穩(wěn)定性。
為了解決該系統(tǒng)在實(shí)際使用中出現(xiàn)的問題,針對(duì)圖1 設(shè)計(jì)中存在的缺陷和不足,在原系統(tǒng)架構(gòu)設(shè)計(jì)基礎(chǔ)上進(jìn)行優(yōu)化調(diào)整,形成圖2 所示的新系統(tǒng)架構(gòu)。
圖2:系統(tǒng)架構(gòu)圖2
(1)與原系統(tǒng)架構(gòu)相同,實(shí)時(shí)獲取的圖像數(shù)據(jù)被寫入Kafka 集群作為緩沖池供后臺(tái)服務(wù)使用。
(2)后臺(tái)服務(wù)仍然通過輪詢的方式從Kafka 中讀取視頻抓拍圖片和元數(shù)據(jù)檔案。
(3)后臺(tái)實(shí)時(shí)數(shù)據(jù)插入服務(wù)仍然將n日內(nèi)的數(shù)據(jù)寫入MPPCluster 的熱數(shù)據(jù)存儲(chǔ)區(qū)。建立單表保存n日內(nèi)的數(shù)據(jù),該表按圖像抓拍時(shí)間創(chuàng)建數(shù)據(jù)分區(qū),并以圖像數(shù)據(jù)ID 建立Hash 索引,保證數(shù)據(jù)均勻分布在多個(gè)節(jié)點(diǎn)。數(shù)據(jù)更新時(shí)利用索引進(jìn)行定位和更新,在一定程度上提升了更新性能。對(duì)n日內(nèi)數(shù)據(jù)的查詢性能和并發(fā)性也有一定的保障。
(4)n日內(nèi)的數(shù)據(jù)通過后臺(tái)歷史數(shù)據(jù)抽取服務(wù)定時(shí)全量同步到ES 集群,保證ES 集群總是有全量數(shù)據(jù)可使用。
(5)后臺(tái)歷史數(shù)據(jù)抽取服務(wù)將MPPCluster 中超過n日的數(shù)據(jù)抽取并存儲(chǔ)到ES 集群,與定時(shí)同步到ES 集群的n日內(nèi)數(shù)據(jù)合并成全量數(shù)據(jù)集。ES 集群建立并維護(hù)更新全量數(shù)據(jù)索引。
(6)本系統(tǒng)的授權(quán)用戶訪問Web 應(yīng)用服務(wù)提交查詢分析請(qǐng)求。Web 應(yīng)用服務(wù)提交查詢分析請(qǐng)求給服務(wù)管理器。根據(jù)性能壓力的要求可以部署多臺(tái)服務(wù)管理器。服務(wù)管理器的任務(wù)分配策略可以采用均勻分配;也可以采用按任務(wù)類型分配,根據(jù)查詢分析請(qǐng)求的類型不同分發(fā)給不同服務(wù)管理器完成。
(7)服務(wù)管理器根據(jù)分配策略不同進(jìn)行調(diào)度,將任務(wù)發(fā)送到大數(shù)據(jù)計(jì)算分析集群(Spark/Hive Cluster)。
(8)大數(shù)據(jù)計(jì)算分析集群根據(jù)需要從ES 集群中抽取數(shù)據(jù)到Hive 集群(HiveCluster)中進(jìn)行分析計(jì)算,計(jì)算結(jié)果寫入Hbase 集群(Hbase Cluster)。
(9)服務(wù)管理器直接從Hbase 集群中獲取分析計(jì)算的結(jié)果返回給Web 應(yīng)用服務(wù),反饋給授權(quán)用戶。
此架構(gòu)中分布式數(shù)據(jù)庫(kù)集群中超過n日的數(shù)據(jù)抽取到ES 集群后,分布式數(shù)據(jù)庫(kù)集群中的數(shù)據(jù)可以通過刪除分區(qū)的方式直接刪除,大大減少了頻繁插入、刪除操作,避免數(shù)據(jù)索引的碎片化。ES 集群中的數(shù)據(jù)可以分成n日內(nèi)和n日前兩類。n日內(nèi)的數(shù)據(jù)通過定時(shí)同步方式從分布式數(shù)據(jù)庫(kù)同步到ES 集群。同步時(shí)間避開業(yè)務(wù)高峰時(shí)段,可選擇凌晨用戶使用系統(tǒng)負(fù)載較小的時(shí)段。n日前的數(shù)據(jù)通過創(chuàng)建臨時(shí)表和直接修改表名的方式完成加載,保證對(duì)數(shù)據(jù)不需要進(jìn)行實(shí)質(zhì)性的修改和插入,不影響對(duì)數(shù)據(jù)的讀操作,對(duì)于讀寫性能都有一定的保障。在新的架構(gòu)中引入了大數(shù)據(jù)計(jì)算分析平臺(tái),使用Spark/Hive 實(shí)現(xiàn)根據(jù)業(yè)務(wù)和負(fù)載需要進(jìn)行橫向拓展,確保算力與數(shù)據(jù)和業(yè)務(wù)需求的匹配。服務(wù)管理器采用主從熱備或多機(jī)并行的方式,通過策略控制計(jì)算任務(wù)分配,有效避免原架構(gòu)中Web 應(yīng)用服務(wù)單機(jī)承擔(dān)計(jì)算任務(wù)的單點(diǎn)故障風(fēng)險(xiǎn)。后續(xù)可以通過擴(kuò)展服務(wù)管理器能力方式實(shí)現(xiàn)為外部系統(tǒng)提供服務(wù)。
上述架構(gòu)在某市級(jí)視頻圖像智能分析系統(tǒng)中得到實(shí)踐應(yīng)用,滿足全市每日近5000 路視頻,2000 萬(wàn)人像數(shù)據(jù)的存儲(chǔ)、查詢和分析計(jì)算,ES 集群存儲(chǔ)數(shù)據(jù)量不少于30 億并持續(xù)增加。用戶在新架構(gòu)上獲得較好的使用體驗(yàn),實(shí)時(shí)查詢分析結(jié)果響應(yīng)時(shí)間不超過3 秒,大型分析計(jì)算任務(wù)也能在較短時(shí)間內(nèi)完成。
某市級(jí)視頻圖像智能分析系統(tǒng)投入使用后獲得了較好的使用效果,但也存在一些可以改進(jìn)優(yōu)化的方面:
(1)查詢分析需要從ES 集群抽取數(shù)據(jù)到大數(shù)據(jù)計(jì)算分析集群。此操作消耗資源較多,耗時(shí)較長(zhǎng),導(dǎo)致一定的系統(tǒng)性能下降。可以考慮增加內(nèi)存計(jì)算引擎,常用小批量數(shù)據(jù)直接從ES 集群加載到內(nèi)存中計(jì)算,提升針對(duì)常用小批量數(shù)據(jù)的計(jì)算性能。
(2)目前服務(wù)管理器的調(diào)度算法比較簡(jiǎn)單,后續(xù)可在任務(wù)動(dòng)態(tài)分配,負(fù)載均衡,故障遷移等方面優(yōu)化。
(3)目前針對(duì)寫入Kafka 集群的實(shí)時(shí)數(shù)據(jù)的處理比較簡(jiǎn)單,后續(xù)可考慮增加實(shí)時(shí)數(shù)據(jù)的計(jì)算引擎,如采用Flink 流處理框架提升實(shí)時(shí)數(shù)據(jù)的計(jì)算處理能力[4],以實(shí)現(xiàn)實(shí)時(shí)預(yù)警等功能。