隨著人臉識(shí)別的日益普及,它的應(yīng)用場(chǎng)景越來(lái)越廣。近幾年面市的門禁機(jī)、考勤機(jī)、校園班牌等終端,紛紛集成了人臉識(shí)別功能。但與此相對(duì),相應(yīng)場(chǎng)景下“服役”多年的老舊設(shè)備,由于早期產(chǎn)品設(shè)計(jì)往往沒(méi)有攝像頭,并且老舊設(shè)備算力也不足以支撐人臉識(shí)別算法的運(yùn)行。但如果將這些老舊設(shè)備全盤替換,不僅成本昂貴還需要解決系統(tǒng)迭代兼容性問(wèn)題。
那么如何低成本讓老舊設(shè)備煥發(fā)新生機(jī)?近期,筆者從市場(chǎng)上了解到,虹軟視覺(jué)開(kāi)放平臺(tái)聯(lián)合多家產(chǎn)業(yè)鏈合作伙伴,推出了一款可外接的AI攝像頭模組,內(nèi)置芯片和高精度算力,能夠在原設(shè)備基礎(chǔ)上輕松升級(jí)實(shí)現(xiàn)人臉識(shí)別。
一、什么是AI攝像頭模組?
首先要介紹一下虹軟視覺(jué)開(kāi)放平臺(tái),它是業(yè)內(nèi)知名的免費(fèi)視覺(jué)AI算法提供方,開(kāi)放了人臉識(shí)別、活體檢測(cè)、人臉屬性分析、人證核驗(yàn)等一系列算法SDK。支持免費(fèi)商用,而且能夠離線運(yùn)行,在一些對(duì)信息安全要求高,或者不具備聯(lián)網(wǎng)條件的封閉場(chǎng)景下,都非常適用。
該AI攝像頭模組概況來(lái)說(shuō),是一款能夠急速上手的軟硬一體化小型開(kāi)發(fā)機(jī),可以讓AI算法落地更標(biāo)準(zhǔn)化,更小巧化。
軟件上,模組集成了虹軟視覺(jué)開(kāi)放平臺(tái)ArcFace人臉識(shí)別算法及相應(yīng)配套應(yīng)用軟件服務(wù)。算法能力上除了人臉比對(duì)、識(shí)別、屬性檢測(cè)、人證核驗(yàn)等多種基礎(chǔ)功能外,還支持大面積遮擋下的人臉識(shí)別,抵御攻擊方面具備RGB/IR活體檢測(cè)雙重保障,支持離線激活使用,同時(shí)自帶圖像質(zhì)量檢測(cè)功能,自動(dòng)過(guò)濾畫面模糊或小角度的人臉圖像,提升識(shí)別準(zhǔn)確率和識(shí)別速度。
硬件上,模組集成了UVC攝像頭和RV1109芯片,通過(guò)USB接口對(duì)外輸出視頻流數(shù)據(jù),只需要將模組插入相應(yīng)設(shè)備,即可工作。其中,自帶RV1109芯片平臺(tái)提供算力這點(diǎn)非常重要,不僅解決了老設(shè)備算力不足的問(wèn)題,而且RV1109芯片性價(jià)比非常高,很適合門禁、閘機(jī)的改造。
同時(shí),該AI攝像頭模組除了支持跨Android、 Windows、Linux等多系統(tǒng)運(yùn)行,算法計(jì)算結(jié)果以JSON標(biāo)準(zhǔn)化輸出,標(biāo)準(zhǔn)化接口可供平臺(tái)移植、拓展業(yè)務(wù)。
此外,這款A(yù)I攝像頭模組可通過(guò)硬件適配參數(shù)調(diào)節(jié),適配不同分辨率的設(shè)備,適用場(chǎng)景也非常豐富,像人員注冊(cè)、人臉識(shí)別開(kāi)門、考勤打卡、門禁權(quán)限管理、識(shí)別記錄查詢等功能,老設(shè)備都可以通過(guò)外接AI攝像頭模組來(lái)實(shí)現(xiàn)。
二、項(xiàng)目開(kāi)發(fā)詳細(xì)介紹
從虹軟商務(wù)獲取了其產(chǎn)業(yè)鏈伙伴的AI鏡頭模組,虹軟已經(jīng)把模組的服務(wù)軟件部署進(jìn)去了,同時(shí)也提供了Windows及Android的客戶端Demo,如果沒(méi)有特殊需求,安裝客戶端之后基本能做到即插即用。在我個(gè)人的開(kāi)發(fā)過(guò)程中,因?yàn)轫?xiàng)目本身有定制化需求,所以沒(méi)有用虹軟開(kāi)放平臺(tái)官方提供的客戶端APK,而是自己做了Android的上位機(jī)開(kāi)發(fā)。簡(jiǎn)單來(lái)說(shuō),項(xiàng)目首先需要獲取UVC視頻流,將視頻圖像顯示在Android上位機(jī)上;其次利用RNDIS將模組和Android上位機(jī)建立通信;最后通過(guò)Arc服務(wù)獲取到算法處理結(jié)果,并將結(jié)果顯示到Android上位機(jī),以下是我的開(kāi)發(fā)過(guò)程。
2.1 USB攝像頭SDK封裝
獲取USB攝像頭視頻流需要借助第三方框架,我在Github上找到了一個(gè)開(kāi)源的框架:https://github.com/saki4510t/UVCCamera,把項(xiàng)目代碼clone到本地,使用AndroidStudio打開(kāi)項(xiàng)目代碼;修改“Application.mk文件,運(yùn)行“ndkBuild”;編譯成功后,得到“arm64-v8a”和“armeabi-v7a”兩個(gè)架構(gòu)的so包,并編譯出jar包;或者執(zhí)行assembleRelease任務(wù),編譯出libuvccamera-release.aar包,供后續(xù)項(xiàng)目使用,如下圖所示:
2.2 集成USB攝像頭SDK
新建Android項(xiàng)目,將“libuvccamera-release.aar”開(kāi)發(fā)包添加到項(xiàng)目libs文件夾中,修改build.gradle文件,編譯項(xiàng)目,這樣開(kāi)發(fā)包就集成好了,如下圖所示:
2.3 AI攝像頭模組獲取
虹軟AI攝像頭模組類似于一個(gè)軟、硬件結(jié)合的小型開(kāi)發(fā)機(jī)。軟件上,模組集成了人臉識(shí)別算法及應(yīng)用軟件,通過(guò)RNDIS(RNDIS是指Remote NDIS,基于USB實(shí)現(xiàn)RNDIS實(shí)際上就是TCP/IP over USB,就是在USB設(shè)備上跑TCP/IP,讓USB設(shè)備看上去像一塊網(wǎng)卡)服務(wù)和Android上位機(jī)通信;硬件上,模組集成了UVC攝像頭,通過(guò)USB接口對(duì)外輸出視頻流數(shù)據(jù),只需要將模組插入Android上位機(jī),即可工作。
2.4 實(shí)現(xiàn)UvcCameraHelper獲取UVC視頻流
2.4.1 獲取到UsbDevice
我自己實(shí)現(xiàn)了一個(gè)UvcCameraHelper類,用來(lái)管理USB攝像頭的生命周期。不同于集成好的Android設(shè)備攝像頭,AI攝像頭模組作為一個(gè)外接設(shè)備,需要使用“USBMonitor.java”類遍歷獲取,attach到對(duì)應(yīng)的USB設(shè)備后,請(qǐng)求USB權(quán)限,如果權(quán)限通過(guò),會(huì)有一個(gè)onConnect回調(diào),表示USB設(shè)備已連接,可以進(jìn)行下一步操作了,具體如下圖所示:
如上圖,onConnect方法回調(diào)成功以后,就可以對(duì)UsbDevice進(jìn)行下一步操作了。
2.4.2 開(kāi)啟USB攝像頭
拿到UsbDevice后,借助UVCCamera類,就可以開(kāi)啟USB攝像頭了,調(diào)用UVCCamera.open()和UVCCamera.startPreview()方法后,攝像頭開(kāi)啟成功,使用TextureView作為顯示視頻圖像數(shù)據(jù),就可以在Android上位機(jī)實(shí)時(shí)顯示攝像頭圖像數(shù)據(jù)了,具體實(shí)現(xiàn)如下圖所示:
2.5 接入AI攝像頭模組
2.5.1 實(shí)現(xiàn)網(wǎng)絡(luò)通信
AI攝像頭模組里面集成了Arc服務(wù),用于檢測(cè)、識(shí)別人臉,并將人臉結(jié)果對(duì)外輸出。將 AI模組插入Android上位機(jī)USB接口上,Arc服務(wù)就會(huì)自啟動(dòng)了。
通過(guò)RNDIS,我在Android端實(shí)現(xiàn)了一套Http和WebSocket通信服務(wù),用來(lái)和AI模組進(jìn)行數(shù)據(jù)傳輸。如下圖所示,使用Retrofit作為網(wǎng)絡(luò)通信框架:
如下圖所示,創(chuàng)建API服務(wù),和AI模組進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交互:
如下圖所示,創(chuàng)建WebSoket服務(wù),用于接收AI模組人臉識(shí)別數(shù)據(jù):
通過(guò)以上步驟,就完成了AI攝像頭模組和Android上位機(jī)網(wǎng)絡(luò)通信功能。
3.5.2 網(wǎng)絡(luò)數(shù)據(jù)交互
Arc服務(wù)包含設(shè)備激活、人員注冊(cè)、設(shè)置參數(shù)等API。
如下圖所示,調(diào)用激活接口,激活A(yù)I模組,才能夠進(jìn)行后續(xù)操作:
如下圖所示,調(diào)用注冊(cè)人員接口,將人臉庫(kù)注冊(cè)到AI模組中,用于后續(xù)人臉識(shí)別:
AI攝像頭模組集成了人臉識(shí)別算法及算法核心業(yè)務(wù),將模組攝像頭對(duì)準(zhǔn)人臉,開(kāi)始識(shí)別人臉,并最終將人臉識(shí)別結(jié)果輸出。如下圖所示,我實(shí)現(xiàn)了一個(gè)WebSocket服務(wù),用于接收人臉識(shí)別結(jié)果數(shù)據(jù):
2.5.2 數(shù)據(jù)顯示
拿到人臉識(shí)別結(jié)果數(shù)據(jù),包括人臉框,人臉I(yè)D,人臉圖片等。如下圖人臉識(shí)別結(jié)果數(shù)據(jù)結(jié)構(gòu):
通過(guò)自定義View,使用Paint和Canvas類,繪制人臉框Rect數(shù)據(jù);根據(jù)type類型判斷識(shí)別結(jié)果,包括識(shí)別成功、識(shí)別失敗等,并將人員信息顯示在UI上。
到這里,AI模組和Android上位機(jī)就接入好了。
三、注意事項(xiàng)
由于虹軟SDK只包含arm64-v8a和armeabi-v7a的so包,在編譯USB攝像頭SDK的時(shí)候,只能編譯對(duì)應(yīng)架構(gòu)的so包;
需要選擇對(duì)應(yīng)的USB設(shè)備ID,才能正常開(kāi)啟USB攝像頭,注意不要選錯(cuò);
AI模組連接過(guò)程中可能會(huì)斷開(kāi),需要做一些重連操作。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )