人工智能之人脸识别

package com.hitalk.face.test;

import com.baidu.aip.face.AipFace;
import com.baidu.aip.util.Base64Util;
import org.json.JSONObject;
import org.junit.Test;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;


public class FaceTest {

    //人脸注册,将图片注册到人脸库,供后期人脸搜索做准备
    @Test
    public void testRegister() throws Exception {
        //1.创建java代码和百度云交互的client对象
        String appId = "15722097";
        String apiKey = "azOiPPadSnGilMtnu0b1yhHL";
        String secretKet = "qc993oPxTX9Xnw7mzc4zVtyckZTZ9d5s";
        AipFace aipFace = new AipFace(appId, apiKey, secretKet);
        //2.参数设置
        HashMap<String, String> optionsMap = new HashMap<String, String>();
        //图片质量检测
        optionsMap.put("quality_control", "NORMAL");
        //活体检测,防止使用图片造假
        optionsMap.put("liveness_control", "LOW");
        //3.构建图片
        String imgPath = "E:\\demo.jpg";
        //获取指定图片的字节数组
        byte[] byteArr = Files.readAllBytes(Paths.get(imgPath));
        //将字节数组转换成base64url编码
        String image = Base64Util.encode(byteArr);
        //4.调用api方法完成人脸注册
        JSONObject result = aipFace.addUser(image, "BASE64", "hitalk", "hjy", optionsMap);
        System.out.println(result);
    }

    //人脸检测,判断上传图片是否有人脸
    @Test
    public void testCheckFace() throws Exception {
        //构建图片
        String imgPath = "E:\\demo.PNG";
        //获取指定图片的字节数组
        byte[] byteArr = Files.readAllBytes(Paths.get(imgPath));
        //将字节数组转换成base64url编码
        String image = Base64Util.encode(byteArr);
        //创建java代码和百度云api交互对象
        String appId = "15722097";
        String apiKey = "azOiPPadSnGilMtnu0b1yhHL";
        String secretKet = "qc993oPxTX9Xnw7mzc4zVtyckZTZ9d5s";
        AipFace aipFace = new AipFace(appId, apiKey, secretKet);
        JSONObject result = aipFace.detect(image, "BASE64", null);
        System.out.println(result);
    }

    //人脸搜索,根据上传的图片从人脸库进行比对,返回评分度(相似比)最高的图片
    @Test
    public void testSearchFace() throws Exception {
        //创建java代码和百度云api交互对象
        String appId = "15722097";
        String apiKey = "azOiPPadSnGilMtnu0b1yhHL";
        String secretKet = "qc993oPxTX9Xnw7mzc4zVtyckZTZ9d5s";
        AipFace aipFace = new AipFace(appId, apiKey, secretKet);
        //构建图片
        String imgPath = "E:\\1.jpg";
        //获取指定图片的字节数组
        byte[] byteArr = Files.readAllBytes(Paths.get(imgPath));
        //将字节数组转换成base64url编码
        String image = Base64Util.encode(byteArr);
        JSONObject result = aipFace.search(image, "BASE64", "hitalk", null);
        System.out.println(result.toString());
    }
}
人脸识别的原理:
	每个人的人脸图片都会被标记多个点,比如眼耳口鼻脸轮廓,并保存在人脸库中;当进行人脸匹配时,就会对搜索的图片也生成标记点,然后匹配,最终将匹配度高的人脸集合返回,也叫评分,通常评分越高,相似度也越高,评分80以上就可以认为是同一个人

百度人工智能SDK:
	http://ai.baidu.com/docs#/Face-Java-SDK/fe7cbbc1
maven坐标:
	 <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.8.0</version>
     </dependency>

你可能感兴趣的:(人工智能)