千呼萬喚,Web人臉識別登錄完整版來了,這樣式我愛了
本文轉載自微信公眾號「程序員內點事」,作者程序員內點事。轉載本文請聯系程序員內點事公眾號。
在我最開始寫文章的時候曾經寫過一篇文章 基于 Java 實現的人臉識別功能,因為剛開始碼字不知道寫點什么,就簡單弄了個人臉識別的Demo。
但讓我沒想到的是,在過去的一年里有好多好多粉絲加我好友咨詢這個小demo,因為里邊有點小bug,導致一些新手朋友不能成功啟動。
從此我就開啟不厭其煩的解答各種疑問,不過我精力畢竟有限,最后實在回答不過來,干脆弄了個群粉絲互相分享經驗。
問題大面積出現的時候我就想過再出一個完整版的demo,可家里工作一大堆事搞得一點精力都沒有,一直拖到了現在,正好現在把這個人臉識別登錄功能用在了自己的項目上,借此機會分享出來了,這次盡可能不給大家留(埋)bug 哈哈哈 。
具體操作之前先看下成品的效果,線上預覽地址:https://fire100.top,這里大家可以放心,不會收集面部圖片,只是提取了面部特征,并沒有上傳云端。下邊我們來做個演示看看效果,識別速度和成功率還是不錯的。
功能流程
整個功能的邏輯很簡單,前端調起攝像頭,識別到人臉后拍照上傳到后臺,后端SDK識別出圖片中的人臉特征后,與數據庫內的用戶人臉特征做比對,比對成功(相似度在0.8~1之間即算同一個人)登錄,如識別到人臉但數據庫內未比對成功則視為新用戶注冊。
注意:如果要在線上應用,必須要使用https才能調起攝像頭,本地測試沒有限制。
申請SDK
啟動項目之前先做一點準備工作,因為使用的是三方的人臉識別SDK,所以要先在平臺申請一個賬號,然后在下載對應版本的SDK。
“官網地址:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/login
可能會有人抬杠為啥你不自己寫個人臉識別,別問,問就是不會!
目前支持Linux、Windows、IOS、Android版本,每個實名認證的賬號可以激活100臺設備,換句話說就是同一個賬號申請的SDK可以在100個設備上運行,一般情況下夠用了。
下載的SDK包目錄結構中libs最為重要,samplecode里有示例代碼,doc有API文檔。我們需要的是libs里邊的arcsoft-sdk-face-3.0.0.0.jar、和三個對應平臺的引擎文件.dll或者.so后綴的文件。
項目配置
項目本身是springboot + vue 前后端分離的,但為了小伙伴們開箱即用,我把這個功能前后端整合在一起,再用個 jpa做持久化,表也不用自己建了,給大家省點時間。
使用SDK的時候遇到過一點小坑,所以下邊說的詳細一點
首先在springboot啟動類所在項目根目錄下創建一個lib目錄,將SDK中解壓出的arcsoft-sdk-face-3.0.0.0.jar放進去,pom.xml文件中引入這個 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打包配置要特別注意一點,一定要加上includeSystemScope,這樣 maven 打包時會將外部引入的jar包(比如在根目錄下或resource文件下新加外部jar包)打包到項目jar中,服務器上項目才能運行。
不加此配置,本地可以運行,因為本地可以再lib下找到外部包,但是服務器上jar中是沒有的。
- <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 文件的配置更簡單,搞個數據庫存放人臉特征數據,填寫申請SDK時得到的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
- # 人臉識別-windows
- face:
- appId: #*********************
- sdkKey: #*********************
- path: D://face
配置好這些直接執行FireControllerApplication就可以了,訪問:127.0.0.1:8081/login/face。
這里源碼我就不大段大段往出貼了,感興趣的小伙伴自行獲取鏈接下載源碼玩玩吧。