錢雯 王瑞 趙軒黎 童尚清 于家藝



摘要:互聯網時代,報警服務更注重的是精準化和可視化,隨著2G的逐漸淘汰,4G的迅速發展,一種新的并且多功能模塊化的報警系統亟待問世。為實現公安信息化發展,該項目在“天網”“天智”“天算”[1]思想的帶領下,開發出實用的智能化的pc軟件及App,并將人臉識別與路線優化技術等完美整合在系統中,使得公安機關服務能力呈現跨越式提升。
關鍵詞:人臉識別;路線優化;4G;報警
中圖分類號:TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2020)26-0182-03
1引言
4G與2G網絡相比,增添了傳輸視頻語音等多媒體的優勢,可以更全面更快速地進行報警;同時,4G報警系統也可以發揮物聯網的優勢,利用GPS定位確定周圍監控,將眾多監控錄像進行實時調取,分析圖像,從而使警方精準地把控現場狀況。本項目利用人臉識別、大數據分析、路況優化等技術,為用戶提供4G時代不同情況下的報警方式,使警方與用戶更及時有效的溝通。
2總體設計
本文基于人工智能和大數據分析實現了一個智能化報警系統,該系統將人臉識別、無線通信、嵌入式技術有機結合,將來自App客戶端的報警信息通過一系列數據處理傳達至終端,以配合警方對犯罪行為精準打擊。
3硬件設計
本文硬件設計選用的是Linux系統的樹莓派4B+。樹莓派是樹莓派基金開發的開放式嵌入式系統,是只有信用卡大小的基于ARM的微型電腦主板[2],以SD卡為內存硬盤,具有所有PC基本功能。
3.1樹莓派配置
將從樹莓派官網下載的基于Linux系統的raspbian最新的鏡像文件用鏡像燒錄工具Win32Disklmager燒錄到已經格式化的16G內存的SD卡中,再將SD卡插入樹莓派卡槽中,接通電源開機運行,在raspi-config開啟攝像頭服務。
3.2 配置軟件motion
motion是在linux環境下使用的視頻捕捉軟件。使用命令行sudoapt-getinstallmotion安裝motion,配置motiondaemon守護進程以使motion能在后臺運行,修改motion的配置文件后,使用sudoservicemotionstart命令啟動服務,輸入sudomotion開啟motion在瀏覽器上即可看見監控畫面。
3.3遠程訪問
使用Frp穿透內網監控,監控對象為樹莓派攝像頭實時監控畫面,將index.html文件監控畫面鏈接改為穿透后的鏈接,調整參數以使內網穿透畫面的連續性與穩定性得到保障,并將內網穿透服務設置為開機自啟動。如此,即可在外網環境下訪問該網絡監控。
4 軟件設計
4.1App
4.1.1軟件框架
App由Android Studio搭建,用Java語言編寫,分為報警App和警察端視頻通話App。報警App主要的功能有視頻報警、打字報警、當前位置和個人信息。具體框架如圖2所示。
4.1.2 視頻報警
視頻報警實現正常報警環境下的報警功能,由報警App和警察端視頻通話App共同完成,在第三方平臺聲網Agora的基礎上實現音視頻通話功能。聲網在互聯網上構建了專用于實時音視頻互動的實時互聯網(SD-RTN?),提供了簡單的SDK,讓應用實現音視頻通話和全互動直播功能[3]。視頻報警由報警App進行呼出,警察端視頻通話App接收通話請求。音視頻通話的API調用過程主要有:初始化RtcEngine、設置本地試圖、加入頻道、設置遠端視圖、離開頻道、銷毀Engine[4]。
4.1.3 打字報警
打字報警實現非正常報警情況下的簡便報警,由報警端App以問卷形式快速收集報警原因、作案人相關信息,將問卷信息和地理位置、個人信息一起發送到警察端Web。
App和Web端的通信由socket經由云端服務器轉發實現。轉發的內容定義為消息類Message,包含客戶端編號和消息內容,服務器端聲明靜態變量sessionMap來保存所有已連接的客戶端Web端為客戶端1,報警端App為客戶端2,3,4...,消息處理類通過重寫的構造方法,得到消息發送方以及所有已連接客戶端,通過ObjectInputStream()和ObjectOutputStream()對Message對象進行讀寫。發送的消息格式如下(姓名:**;性別:***;身份證號:***;當前位置信息:***;報警原因:***;作案人是否攜帶兇器:**;作案人攜帶何種兇器:***;備注:***)。
4.1.4 當前位置
獲取當前位置在第三方平臺高德地圖的基礎上實現功能,獲取設備的當前位置,并在地圖上顯示位置,反饋當前地址。在主線程中獲得地圖對象AMap,設置定位監聽并實現LocationSource接口,配置定位參數,啟動定位,在地圖上標注當前位置[5],同時使用Toast反饋當前位置的文本信息。當前位置的文本信息會實時保存,在打字報警功能中和其他信息一起發送給Web端。
4.1.5個人信息
個人信息頁面用于編輯和保存個人的姓名、性別和身份證號等相關信息。信息存儲由SharedPreferences存儲實現。存儲過程如下:首先獲取SharedPreferences對象,再獲得SharedPreferences.Editor對象,向SharedPreferences.Editor對象中添加個人信息的數據,最后通過commit()指令提交數據。存儲的數據通過SharedPreferences提供的getString()類獲取。
4.2 pc
4.2.1軟件構架
本網頁通過idea軟件,前端組建用LayIM,后端技術包括Springboot,JPA,Redis,Freemarker,數據庫則采用MySQL,編寫語言為JAVA。
代碼流程如下:
(1)網頁代碼思路為首先搭建Springboot基本環境,分析初始化參數,實現項目的熱部署,創建并用Lomnbok簡化實體,并在實體中添加映射關系。然后用Jackson拼接個人信息及好友分組,使用ftp連接池部署服務器,使用session控制登錄權限。進而用消息總線處理信息并搭建Redis的發布與訂閱,使用Websocket進行雙向通信,將聊天信息發送到服務端。最后優化一些功能提高用戶舒適度:
(2)添加手機App與PC通信功能。利用管道流截取控制臺輸出,搭建多線程消息收發器。
4.2.2軟件功能
(1)實現PC端通信
(2)接收報警信息
4.3路況優化
百度地圖JavaScript API GL v1.0是一套用JavaScript語言編寫的應用程序接口。百度地圖JavaScript API支持HTTP和HTTPS,免費對外開放,可直接使用。接口使用無次數限制。JavaScript API GL使用了WebGL對地圖、覆蓋物等進行渲染,支持3D視角展示地圖。GL版本接口基本向下兼容,遷移成本低。早期的v1.0版本支持了基本的3D地圖展示、基本地圖控件和覆蓋物,目前已經更新到v3.0版本。
本質上,Geolocation類是使用了HTML5瀏覽器提供的GeolocationAPI來進行定位的。目前支持這一特性的瀏覽器有Internet Explorer、Firefox、Chrome、Safari以及Opera等。在支持HTML5的瀏覽器下,navigator對象下面有geolocation屬性,其中有getCurrentPosition()方法,可以通過瀏覽器向設備發起定位請求,瀏覽器會讓設備來發送相關指令到附近的上網設備。附近的上網設備接收到指令后會返回一個位置信息給用戶設備,從而使瀏覽器獲取定位信息。
而LocalCity類則是通過獲取用戶的IP地址,在百度數據庫中進行查詢,從而獲取用戶地址。但是本接口只能進行精確到城市的定位需求。
百度地圖的導航功能支持進行摩托車路線規劃、公交路線規劃、騎行路線規劃和駕車路線規劃。本應用中調用了百度地圖導航功能中的駕車路線規劃功能,查詢具體道路的實時擁堵評價和擁堵路段、擁堵距離、擁堵趨勢等信息,并且最高可以實現路況的分鐘級更新。
關鍵技術分析:在本應用中,使用了var ctrl = new BMapLib.TrafficControl({ showPanel: true });創建遮蓋層并添加路況控制面板。此外,百度地圖API還提供了預測功能。本應用利用ctrl.showTraffic({ predictDate: hour + 2 });設置路況預測為當前時刻的未來兩小時。為了方便用戶操作,還利用了map.enableScrollWheelZoom();語句啟用了滾輪放大與縮小。
4.4人臉識別
近幾年,人臉識別技術由于其識別的快捷可靠性,在人們工作生活中扮演著越來越重要的角色,網上關于人臉識別的開源技術也有很多,著名的有虹軟和百度等,此次我主要采用Python的第三方庫face_recognition和OpenCV來實現人臉識別功能,利用PyQt5來制作界面。
OpenCV提供的視覺處理算法非常豐富,并且它部分以C語言編寫,加上其開源的特性,處理得當,不需要添加新的外部支持也可以完整的編譯鏈接生成執行程序,所以很適合來做算法的移植,而且它致力于真實世界的實時應用,通過優化的C代碼的編寫對其執行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數庫(Integrated Performance Primitives)得到更快的處理速度。
face_recognition號稱是世界上最簡單的基于Python的人臉識別庫,是在大名鼎鼎的深度學習框架dlib上做的整合,dlib模型在LFW(Labeled Faces in the Wild)能有99.38%的準確率。隨著這些年的深度學習技術和GPU的使用,face_recognition中的DCNN可以更好的特征提取。DCNN近期已經成功用在如人臉檢測、關鍵點定位、人臉識別和驗證等方面。另外face_recognition提供了相應的命令行工具,可以通過命令行來對圖片文件夾進行人臉識別,非常的便捷。
PyQt是一個用于創建GUI應用程序的跨平臺工具包,它將Python與Qt庫融為一體。這樣做的最大好處就是在保留了Qt高運行效率的同時,大大提高了開發效率。因為,使用Python語言開發程序要比使用C++語言開發程序快得多。PyQt對Qt做了完整的封裝,幾乎可以用PyQt做Qt能做的任何事情。
人臉識別主要包括四個組成部分,分別為:人臉圖像采集及檢測、人臉圖像預處理、人臉圖像特征提取以及匹配與識別。
(1)人臉圖像采集及檢測
給定想要識別的人臉的圖片用face_recognition中的face_encoding函數對其進行編碼(將人臉圖片映射成一個128維的特征向量)。
(2)人臉圖像預處理
由于128維的人臉編碼是一個numpyndarray類型(即矩陣),并不能將數據存進服務器的數據庫中,因此必須進行類型轉換,利用Python的numpy庫將矩陣轉為列表,再將列表里的每個元素轉為字符串,再用字符串拼接的方式拼成一個字符串,這時就可以把特征值存進數據庫里了。
(3)人臉圖像特征提取
利用OpenCV的VideoCapture函數讀取攝像頭傳過來的畫面,并用read函數讀取每一幀的圖像,利用OpenCV的resize縮放函數改變圖像的大小,圖像越小,所做的計算就少,然后再對圖像重復做人臉圖像采集及檢測部分的工作。
(4)匹配與識別
從服務器的人臉編碼數據庫中讀出人臉信息,比較特征提取得到的人臉圖像編碼和數據庫中讀出的人臉信息編碼,利用face_recognition中的compare_faces函數計算兩張人臉特征向量的內積,通過設置一個閾值,若距離在閾值范圍之內,則認為是同一個人,返回數據庫中關于該人臉的信息描述(姓名和犯罪史等)。
5結語
本文通過分析4G報警系統傳輸視頻語音等多媒體和物聯網的優勢,構建了基于人工智能和大數據的4G報警系統,包括了硬件與軟件的設計,是一種多端聯合、智能化的4G報警系統,具有一定的實用價值。本設計主要是面向報警民眾和警察,其將眾多相對成熟的技術加以結合,實現簡單、移植性強。采用本設計具有廣闊的應用前景。
參考文獻:
[1] 蔡燕敏,孔維通.基于樹莓派網絡監控系統的研究[J].實驗室科學,2015,18(6):87-90.
[2] 馮志輝.使用樹莓派實現網絡監控系統[J].電子技術與軟件工程,2015(5):85.
[3] 舒文瓊.聲網Agora:實時音視頻通信成大勢所趨[J].通信世界,2015(31):41.
[4] 佚名.Agora-實現視頻通話[EB/OL]. https://docs.agora.io/cn/Video/start_call_android?platform=Android,2019.
[5] 佚名.概述-Android 定位SDK|高德地圖API[EB/OL].https://docs.agora.io/cn/Video/start_call_android?platform=Android,2018.11.30.
[6]佚名.jspopularGL | 百度地圖API SDK[J]. http://lbsyun.baidu.com/index.php?title=jspopularGL,2020.
【通聯編輯:代影】