赞
踩
先来看一下Java借助百度云人脸识别实现人脸注册登录功能的预览效果
登录百度智能云控制台:https://console.bce.baidu.com/
,开通人脸识别
选择人脸识别项,创建人脸识别应用
人脸识别接口默认全部选择,也可以选择添加其他接口。
得到应用ID、 API KEY、Secret Key
人脸识别API文档:https://cloud.baidu.com/doc/FACE/index.html
人脸识别SDK下载:https://ai.baidu.com/sdk
下载对应语言的SDK后安装
Face Java SDK
或使用maven依赖
。
这里使用Maven依赖,访问https://mvnrepository.com
搜索com.baidu.aip
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.16.10</version>
</dependency>
AipFace是人脸识别的Java客户端,为使用人脸识别的开发人员提供了一系列的交互方法。初始化完成后建议单例使用,避免重复获取access_token
public class Sample { //设置APPID/AK/SK public static final String APP_ID = "你的 App ID"; public static final String API_KEY = "你的 Api Key"; public static final String SECRET_KEY = "你的 Secret Key"; public static void main(String[] args) { // 初始化一个AipFace AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 // 建立连接的超时时间(单位:毫秒) client.setConnectionTimeoutInMillis(2000); // 通过打开的连接传输数据的超时时间(单位:毫秒) client.setSocketTimeoutInMillis(60000); // 可选:设置代理服务器地址, http和socket二选一,或者均不设置 client.setHttpProxy("proxy_host", proxy_port); // 设置http代理 client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理 // 调用接口 String image = "取决于image_type参数,传入BASE64字符串或URL字符串或FACE_TOKEN字符串"; String imageType = "BASE64"; // 人脸检测 JSONObject res = client.detect(image, imageType, options); System.out.println(res.toString(2)); } }
获得眼、口、鼻轮廓,识别多种人脸属性,如性别,年龄,表情等信息
应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。
具体参考人脸识别Api文档主页:
SDK文档
REST-API-SDK
Java-SDK
人脸检测
import com.baidu.aip.face.AipFace; import com.baidu.aip.util.Base64Util; import org.json.JSONException; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; @SpringBootTest class FaceApplicationTests { @Test public void testFaceCheck() throws IOException, JSONException { /** * 传入appId、apiKey、secretkey。创建Java代码和百度云交互的Client对象 */ AipFace client = new AipFace("26820026", "wiGTH1L6Peh9QFrgW0yqUx8b", "lIHbEgfUpzvgN4qYHYaGt77ggqicwvaf"); // 构造模拟人像图片。 取决于image_type参数,传入BASE64字符串或URL字符串或FACE_TOKEN字符串 String path = "D:\\face.png"; byte[] bytes = Files.readAllBytes(Paths.get(path)); String encode = Base64Util.encode(bytes); // 传入可选参数调用接口 HashMap<String, Object> options = new HashMap<>(); options.put("face_field", "age"); options.put("max_face_num", "2"); options.put("face_type", "LIVE"); options.put("liveness_control", "LOW"); // 调用Api进行人脸检测 /** * image 图片的url或者base64字符串 * imageType 图片形式(URL,BASE64) * options Map中配置基本参数,null:使用默认配置 */ JSONObject res = client.detect(encode, "BASE64", options); System.out.println(res.toString(2)); } }
人脸检测结果返回数据
face_num:检测到的图片中的人脸数量
face_listface_num:检测到的图片中的人脸数量人脸信息列表,具体包含的参数参考下面的列表
face_token:人脸图片的唯一标识
location:人脸在图片中的位置
{ "result": { "face_num": 1, "face_list": [ { "liveness": { "livemapscore": 0.3849793375 }, "angle": { "roll": -8.37, "pitch": 17.62, "yaw": 16.2 }, "face_token": "a99aa4ef86a0abf7e91bd79fee0170e5", "location": { "top": 126.19, "left": 202.3, "rotation": -1, "width": 142, "height": 140 }, "face_probability": 1, "age": 22 } ] }, "log_id": 1322968968, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1658935322 }
对比如下人脸
public static void main(String[] args) throws Exception { /** * 传入appId、apiKey、secretkey。创建Java代码和百度云交互的Client对象 */ AipFace client = new AipFace("27285857", "oaHvQava3f9upcKof3wXa20a", "EDGmHiWRtheCsudE9zyo7cYA8AmZKK9G"); // 登录图片 String loginImagePath = "D:\\user\\login.jpg"; String loginImagePath2 = "D:\\user\\login2.jpg"; // 对比的图片 String comparedImagePath = "D:\\user\\compared.jpg"; Double faceComparison = faceComparison(client, loginImagePath, comparedImagePath); if (faceComparison > 85) { System.out.println("人脸识别登录成功"); } else { System.out.println("人脸识别登录失败"); } Double faceComparison2 = faceComparison(client, loginImagePath2, comparedImagePath); if (faceComparison2 > 85) { System.out.println("人脸识别登录成功"); } else { System.out.println("人脸识别登录失败"); } } static Double faceComparison(AipFace client, String loginImagePath, String comparedImagePath) throws Exception { byte[] loginImageBytes = Files.readAllBytes(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。