目錄
一、簡述
二、依賴
三、代碼步驟
3.1 實體注入
3.2 服務實現
3.3 其它實現
四、小結
歡迎來到 盹貓(>^ω^<)的博客
本篇文章主要介紹了
[Spring Boot整合百度AI人臉比對實戰]
?博主廣交技術好友,喜歡文章的可以關注一下?
一、簡述
? ? ? ? 人臉識別在日常生活中是非常常見的功能,它大量的應用于APP的認證(實名認證)、驗證(手機識別開鎖),本篇文章是通過百度人臉識別(AIP)實現人臉對比或實名認證的實現步驟,通過Springboot+SDK的方式實現,實現人臉1:1對比接口實現人臉和活體檢測,接口功能是免費的(但有次數限制)。
二、依賴
? ? ? ? 調用百度AIP接口,我們需要使用以下依賴進行在線導入,也可以使用jar包的方式進行導入(記得在打包時包含本地依賴路徑)
<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.19</version>
</dependency>
三、代碼步驟
3.1 實體注入
? ? ? ? SDK中提供了一個AipFace客戶端,用于快捷的調用人臉識別相關接口,所以首先需要將AipFace交給Spring管理,其實就是Bean的注入,代碼如下:
package com.uav.config;import com.baidu.aip.face.AipFace;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class BaiduFaceConfig {@Value("${baidu.face_app_id}")private String APP_ID;@Value("${baidu.face_api_key}")private String API_KEY;@Value("${baidu.face_secret_key}")private String SECRET_KEY;@Beanpublic AipFace aipFaceClient() {AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);// 可選:設置網絡連接參數client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);return client;}}
這里的APP_ID、API_KEY、SECRET_KEY使用的是在百度AIP中創建的應用的相關配置,如果沒有可以在創建API應用?該鏈接下進行創建。
注:這里創建的應用只是AIP功能的應用,和其它功能的KEY不能通用。
3.2 服務實現
//matchImg: 匹配人臉圖片
//idCardFront: 身份證證明圖片
@Override
public void checkFace(String matchImg, String idCardFront) {MatchRequest matchRequest = new MatchRequest(matchImg, "BASE64");MatchRequest idCardRequest = new MatchRequest(idCardFront, "BASE64");ArrayList<MatchRequest> requests = new ArrayList<>();requests.add(matchRequest);requests.add(idCardRequest);org.json.JSONObject object = aipFace.match(requests);log.info("人臉識別接口返回結果:"+object.toString());if (object.getInt("error_code")!=0) {throw new SysException("人臉識別失敗,請稍后再試!");}double score = object.getJSONObject("result").getDouble("score");if (score < FACE_MATCH_THRESHOLD) {throw new SysException("人臉識別失敗,請上傳清晰的照片!");}
}
????????在該服務中,將接收到的Base64字符串的圖片信息通過aipFace.match進行比較,將返回的結果分數進行比較,官方推薦的分數為80分,然后將識別結果返回。
3.3 其它實現
? ? ? ? 對上述實現的人臉對比功能進行擴展可實現如人臉驗證、實名認證等功能,如這里作為實名認證的代碼如下:
/*** 認證用戶信息* @param certificationRequestDTO 認證信息*/@Overridepublic void authUserCertification(CertificationRequestDTO certificationRequestDTO) {checkUserAuthStatus(certificationRequestDTO);//人臉對比檢測checkFace(certificationRequestDTO.getMatchImg(),certificationRequestDTO.getIdCardFront());//添加認證信息到數據庫try {//TODO 這里是身份證照片byte[] imageBytes = Base64.decodeBase64(certificationRequestDTO.getIdCardFront());String url = OSSFactory.build().uploadSuffix(imageBytes, "jpg");certificationRequestDTO.setIdCardFront(url);}catch (Exception e){throw new SysException("圖片上傳失敗,請稍后再試!");}addCertification(certificationRequestDTO);}
????????上述代碼按照【檢查實名狀態】->【人臉對比】->【上傳身份證照片】->【保存到數據庫】的流程可以實現比較完整的實名認證流程。
注:上述代碼為圖片對比,按照嚴格流程應該做權威庫(如公安數據)的比較,才能實現嚴格的實名認證流程。
四、小結
本文通過SpringBoot+百度AIP SDK實現了高效的人臉識別功能,其特點包括:
- ??快速集成??:10行代碼完成核心驗證
- ??低成本??:免費額度滿足初期需求
- ??可擴展??:可無縫升級至企業級方案
??適用項目??:社交APP實名認證、智能門禁系統、金融開戶驗證等需要生物識別的場景。
如果你對區塊鏈內容感興趣可以查看我的專欄:小試牛刀-區塊鏈
感謝您的關注和收藏!!!!!!
?