千呼萬(wàn)喚,Web人臉識(shí)別登錄完整版來(lái)了,這樣式我愛(ài)了
本文轉(zhuǎn)載自微信公眾號(hào)「程序員內(nèi)點(diǎn)事」,作者程序員內(nèi)點(diǎn)事。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員內(nèi)點(diǎn)事公眾號(hào)。
在我最開(kāi)始寫(xiě)文章的時(shí)候曾經(jīng)寫(xiě)過(guò)一篇文章 基于 Java 實(shí)現(xiàn)的人臉識(shí)別功能,因?yàn)閯傞_(kāi)始碼字不知道寫(xiě)點(diǎn)什么,就簡(jiǎn)單弄了個(gè)人臉識(shí)別的Demo。
但讓我沒(méi)想到的是,在過(guò)去的一年里有好多好多粉絲加我好友咨詢(xún)這個(gè)小demo,因?yàn)槔镞呌悬c(diǎn)小bug,導(dǎo)致一些新手朋友不能成功啟動(dòng)。
從此我就開(kāi)啟不厭其煩的解答各種疑問(wèn),不過(guò)我精力畢竟有限,最后實(shí)在回答不過(guò)來(lái),干脆弄了個(gè)群粉絲互相分享經(jīng)驗(yàn)。
問(wèn)題大面積出現(xiàn)的時(shí)候我就想過(guò)再出一個(gè)完整版的demo,可家里工作一大堆事搞得一點(diǎn)精力都沒(méi)有,一直拖到了現(xiàn)在,正好現(xiàn)在把這個(gè)人臉識(shí)別登錄功能用在了自己的項(xiàng)目上,借此機(jī)會(huì)分享出來(lái)了,這次盡可能不給大家留(埋)bug 哈哈哈 。
具體操作之前先看下成品的效果,線上預(yù)覽地址:https://fire100.top,這里大家可以放心,不會(huì)收集面部圖片,只是提取了面部特征,并沒(méi)有上傳云端。下邊我們來(lái)做個(gè)演示看看效果,識(shí)別速度和成功率還是不錯(cuò)的。
功能流程
整個(gè)功能的邏輯很簡(jiǎn)單,前端調(diào)起攝像頭,識(shí)別到人臉后拍照上傳到后臺(tái),后端SDK識(shí)別出圖片中的人臉特征后,與數(shù)據(jù)庫(kù)內(nèi)的用戶(hù)人臉特征做比對(duì),比對(duì)成功(相似度在0.8~1之間即算同一個(gè)人)登錄,如識(shí)別到人臉但數(shù)據(jù)庫(kù)內(nèi)未比對(duì)成功則視為新用戶(hù)注冊(cè)。
注意:如果要在線上應(yīng)用,必須要使用https才能調(diào)起攝像頭,本地測(cè)試沒(méi)有限制。
申請(qǐng)SDK
啟動(dòng)項(xiàng)目之前先做一點(diǎn)準(zhǔn)備工作,因?yàn)槭褂玫氖侨降娜四樧R(shí)別SDK,所以要先在平臺(tái)申請(qǐng)一個(gè)賬號(hào),然后在下載對(duì)應(yīng)版本的SDK。
“官網(wǎng)地址:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/login
可能會(huì)有人抬杠為啥你不自己寫(xiě)個(gè)人臉識(shí)別,別問(wèn),問(wèn)就是不會(huì)!
目前支持Linux、Windows、IOS、Android版本,每個(gè)實(shí)名認(rèn)證的賬號(hào)可以激活100臺(tái)設(shè)備,換句話說(shuō)就是同一個(gè)賬號(hào)申請(qǐng)的SDK可以在100個(gè)設(shè)備上運(yùn)行,一般情況下夠用了。
下載的SDK包目錄結(jié)構(gòu)中l(wèi)ibs最為重要,samplecode里有示例代碼,doc有API文檔。我們需要的是libs里邊的arcsoft-sdk-face-3.0.0.0.jar、和三個(gè)對(duì)應(yīng)平臺(tái)的引擎文件.dll或者.so后綴的文件。
項(xiàng)目配置
項(xiàng)目本身是springboot + vue 前后端分離的,但為了小伙伴們開(kāi)箱即用,我把這個(gè)功能前后端整合在一起,再用個(gè) jpa做持久化,表也不用自己建了,給大家省點(diǎn)時(shí)間。
使用SDK的時(shí)候遇到過(guò)一點(diǎn)小坑,所以下邊說(shuō)的詳細(xì)一點(diǎn)
首先在springboot啟動(dòng)類(lèi)所在項(xiàng)目根目錄下創(chuàng)建一個(gè)lib目錄,將SDK中解壓出的arcsoft-sdk-face-3.0.0.0.jar放進(jìn)去,pom.xml文件中引入這個(gè) Jar。
- <dependency>
- <groupId>com.arcsoft.face</groupId>
- <artifactId>arcsoft-sdk-face</artifactId>
- <version>3.0.0.0</version>
- <scope>system</scope>
- <systemPath>${basedir}/lib/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
- </dependency>
maven打包配置要特別注意一點(diǎn),一定要加上includeSystemScope,這樣 maven 打包時(shí)會(huì)將外部引入的jar包(比如在根目錄下或resource文件下新加外部jar包)打包到項(xiàng)目jar中,服務(wù)器上項(xiàng)目才能運(yùn)行。
不加此配置,本地可以運(yùn)行,因?yàn)楸镜乜梢栽賚ib下找到外部包,但是服務(wù)器上jar中是沒(méi)有的。
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>${spring-boot.version}</version>
- <configuration>
- <includeSystemScope>true</includeSystemScope>
- <fork>true</fork>
- <mainClass>com.firebook.FireBookApplication</mainClass>
- <skip>false</skip>
- </configuration>
- </plugin>
application.yml 文件的配置更簡(jiǎn)單,搞個(gè)數(shù)據(jù)庫(kù)存放人臉特征數(shù)據(jù),填寫(xiě)申請(qǐng)SDK時(shí)得到的appId 和 sdkKey,以及 path 為存放引擎文件.dll或者.so后綴的文件路徑。
- spring:
- datasource:
- # type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/face?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
- username: root
- password: 123456
- # 人臉識(shí)別-windows
- face:
- appId: #*********************
- sdkKey: #*********************
- path: D://face
配置好這些直接執(zhí)行FireControllerApplication就可以了,訪問(wèn):127.0.0.1:8081/login/face。
這里源碼我就不大段大段往出貼了,感興趣的小伙伴自行獲取鏈接下載源碼玩玩吧。