大家好,我是小富~

在我最開始寫文章的時(shí)候曾經(jīng)寫過一篇文章 基于 Java 實(shí)現(xiàn)的人臉識(shí)別功能,因?yàn)閯傞_始碼字不知道寫點(diǎn)什么,就簡單弄了個(gè)人臉識(shí)別的Demo。

但讓我沒想到的是,在過去的一年里有好多好多粉絲加我好友咨詢這個(gè)小demo,因?yàn)槔镞呌悬c(diǎn)小bug,導(dǎo)致一些新手朋友不能成功啟動(dòng)。

從此我就開啟不厭其煩的解答各種疑問,不過我精力畢竟有限,最后實(shí)在回答不過來,干脆弄了個(gè)群粉絲互相分享經(jīng)驗(yàn)。

問題大面積出現(xiàn)的時(shí)候我就想過再出一個(gè)完整版的demo,可家里工作一大堆事搞得一點(diǎn)精力都沒有,一直拖到了現(xiàn)在,正好現(xiàn)在把這個(gè)人臉識(shí)別登錄功能用在了自己的項(xiàng)目上,借此機(jī)會(huì)分享出來了,這次盡可能不給大家留(埋)bug 哈哈哈 。

具體操作之前先看下成品的效果,線上預(yù)覽地址:https://fire100.top,這里大家可以放心,不會(huì)收集面部圖片,只是提取了面部特征,并沒有上傳云端。下邊我們以冰冰來做個(gè)演示看看效果,識(shí)別速度和成功率還是不錯(cuò)的。

功能流程

整個(gè)功能的邏輯很簡單,前端調(diào)起攝像頭,識(shí)別到人臉后拍照上傳到后臺(tái),后端SDK識(shí)別出圖片中的人臉特征后,與數(shù)據(jù)庫內(nèi)的用戶人臉特征做比對(duì),比對(duì)成功(相似度在0.8~1之間即算同一個(gè)人)登錄,如識(shí)別到人臉但數(shù)據(jù)庫內(nèi)未比對(duì)成功則視為新用戶注冊(cè)。

注意:如果要在線上應(yīng)用,必須要使用https才能調(diào)起攝像頭,本地測(cè)試沒有限制。

申請(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ì)有人抬杠為啥你不自己寫個(gè)人臉識(shí)別,別問,問就是不會(huì)!

目前支持Linux、Windows、IOS、Android版本,每個(gè)實(shí)名認(rèn)證的賬號(hào)可以激活100臺(tái)設(shè)備,換句話說就是同一個(gè)賬號(hào)申請(qǐng)的SDK可以在100個(gè)設(shè)備上運(yùn)行,一般情況下夠用了。

下載的SDK包目錄結(jié)構(gòu)中libs最為重要,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 前后端分離的,但為了小伙伴們開箱即用,我把這個(gè)功能前后端整合在一起,再用個(gè) jpa做持久化,表也不用自己建了,給大家省點(diǎn)時(shí)間。

使用SDK的時(shí)候遇到過一點(diǎn)小坑,所以下邊說的詳細(xì)一點(diǎn)

首先在springboot啟動(dòng)類所在項(xiàng)目根目錄下創(chuàng)建一個(gè)lib目錄,將SDK中解壓出的arcsoft-sdk-face-3.0.0.0.jar放進(jìn)去,pom.xml文件中引入這個(gè) Jar。

   com.arcsoft.face    arcsoft-sdk-face    3.0.0.0    system    ${basedir}/lib/arcsoft-sdk-face-3.0.0.0.jar

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中是沒有的。

    org.springframework.boot    spring-boot-maven-plugin    ${spring-boot.version}            true        true        com.firebook.FireBookApplication        false    

application.yml 文件的配置更簡單,搞個(gè)數(shù)據(jù)庫存放人臉特征數(shù)據(jù),填寫申請(qǐng)SDK時(shí)得到的appIdsdkKey,以及 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í)別-windowsface:  appId: #*********************  sdkKey: #*********************  path: D://face

配置好這些直接執(zhí)行FireControllerApplication就可以了,訪問:127.0.0.1:8081/login/face。

這里源碼我就不大段大段往出貼了,感興趣的小伙伴自行獲取鏈接下載源碼玩玩吧。

源碼下載

web人臉識(shí)別登錄的完整源碼已經(jīng)上傳到Github了,關(guān)注公眾號(hào):程序員內(nèi)點(diǎn)事,回復(fù)【人臉識(shí)別】,獲取下載地址,如果有問題隨時(shí)咨詢吧。