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