当前位置:   article > 正文

Java借助百度云人脸识别实现人脸注册、登录功能的完整示例_百度api 视频流人脸识别 java

百度api 视频流人脸识别 java

百度云人脸识别

预览效果

先来看一下Java借助百度云人脸识别实现人脸注册登录功能的预览效果

在这里插入图片描述

环境准备

登录百度智能云控制台:https://console.bce.baidu.com/,开通人脸识别

在这里插入图片描述
选择人脸识别项,创建人脸识别应用

在这里插入图片描述

人脸识别接口默认全部选择,也可以选择添加其他接口。

在这里插入图片描述
得到应用ID、 API KEY、Secret Key
在这里插入图片描述

百度云API的基本使用

人脸识别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>
  • 1
  • 2
  • 3
  • 4
  • 5

新建AipFace

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));
        
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

人脸检测

获得眼、口、鼻轮廓,识别多种人脸属性,如性别,年龄,表情等信息

应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。

具体参考人脸识别Api文档主页:

SDK文档
	REST-API-SDK
		Java-SDK
			人脸检测
  • 1
  • 2
  • 3
  • 4
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));
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

人脸检测结果返回数据

face_num:检测到的图片中的人脸数量

face_listface_num:检测到的图片中的人脸数量人脸信息列表,具体包含的参数参考下面的列表

face_token:人脸图片的唯一标识

location:人脸在图片中的位置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
{
   
  "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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

人脸对比

对比如下人脸
在这里插入图片描述

    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(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/938230
推荐阅读
相关标签
  

闽ICP备14008679号