百度人脸识别API调用实现

目录

一. 准备工作

A. 应用创建

1. 百度用户创建登录

 2. 进入人脸识别服务

 3. 应用创建

 4.应用查看

B. 开发准备

1. 工具类下载

2. maven依赖注入

二. 调用实现

A. 看文档

B. 代码实例

1. 人脸识别参数类

2. token获取类

 3. 人脸搜索方法

 4. 方法调用

5. 人脸识别结果

三. 参考资料


一. 准备工作

需要做的准备工作主要有两部分,一是完成应用创建,二是下周官方工具类和maven注入

A. 应用创建

1. 百度用户创建登录

如果已经有百度云账号可直接登录,没有就需要先行注册,登陆地址:https://login.bce.baidu.com/?account=

 2. 进入人脸识别服务

 3. 应用创建

创建输入应用名称和描述,其余默认选择,应用创建成功后出来领取免费资源,免费资源发放存在延迟,后续若出现这样的报错Open api qps request limit reached,则可能是领取的免费资源还未发放。

 4.应用查看

看到如下应用列表,表示你可以开始人脸识别开发了

B. 开发准备

1. 工具类下载

进行开发前,需要将以下工具类下载并添加到项目中,下载地址如下

  • https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
  • https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
  • https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3

2. maven依赖注入

在pom.xml的dependencies标签中添加以下依赖:

<!-- 百度人脸识别 -->
<dependency>
	<groupId>com.baidu.aip</groupId>
	<artifactId>java-sdk</artifactId>
	<version>4.6.0</version>
</dependency>

 

二. 调用实现

A. 看文档

要使用百度的人脸识别API,首先需要看懂他提供出来的开源调用文档,文档地址已提供在参考资料模块,可自行查看。

查看文档时,需要重点注意的,就是它的API地址和API参数

B. 代码实例

人脸识别API的调用基本差不多,所以这里以人脸识别的人脸搜索,以人脸图片找人为例,来展示人脸识别API调用实现。补充资源代码里含有完整代码,包含人脸注册、人脸更新、人脸删除、人脸搜索和人脸检测的调用实现。

1. 人脸识别参数类

其中appid、apikey和sercetkey为创建应用是生成的,将自己应用的对应值填入即可。需要注意的是token值30天会刷新一次,所以在刷新前需要更新token,以正常使用人脸识别接口。

/**
 * @author  -china.com
 * @version 1.0
 * @ClassName FaceAPIConstants
 * 创建时间:2021/8/18 15:00
 * 类说明: 人脸识别常量类
 */
public class FaceAPIConstants {
    // 人脸识别API验证信息
    // (value = "百度人脸识别应用appid")
    public static final String APP_ID = "appid";
    // (value = "百度人脸识别应用apikey")
    public static final String API_KEY = "apikey";
    // (value = "百度人脸识别应用sercetkey")
    public static final String SECRET_KEY = "sercetkey";
    // (value = "百度人脸识别token 有效期一个月,避免失效,采用实时获取")
    public static String TOKEN = "";

    // (value = "请求类型")
    public static final String CONTENT_TYPE = "application/json";

    // 人脸识别API
    // (value = "人脸添加API")
    public static final String ADD_URL = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
    // (value = "人脸更新API")
    public static final String UPDATE_URL = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/update";
    // (value = "人脸删除API")
    public static final String DELETE_URL = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete";
    // (value = "人脸搜索API")
    public static final String SEARCH_URL = "https://aip.baidubce.com/rest/2.0/face/v3/search";
    // (value = "人脸检测API")
    public static final String DETECT_URL = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
}

2. token获取类

token通过apikey和sercetkey去获取,token初始方式可灵活处理

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * @author 
 * @version 1.0
 * @ClassName FaceAuthService
 * 创建时间:2021/8/18 15:09
 * 类说明: 人脸识别获取token类
 */
public class FaceAuthService {
    /**
     * 获取权限token
     */
    public static void setFaceAuth() {
        if (StringUtils.isEmpty(FaceAPIConstants.TOKEN)) {
            // 官网获取的 API Key 更新为你注册的
            String clientId = FaceAPIConstants.API_KEY;
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = FaceAPIConstants.SECRET_KEY;
            FaceAPIConstants.TOKEN = getFaceAuth(clientId, clientSecret);
        }
    }

    /**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     *
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Securet Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public static String getFaceAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            JSONObject jsonObject = new JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取人脸识别token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }
}

 3. 人脸搜索方法

人脸搜索需要的参数首先肯定是识别图片,其次是检索范围,这里的检索范围是按用户组来指定的,用户组可在应用管理进行添加,也可通过API调用添加,我这里是直接在应用管理中找的可视化人脸库,进入应用,添加组。

/**
 * @return
 * @description 人脸搜索
 * @author 
 * @date 2021/8/19 9:36
 * @params 
 * @version 1.0
 */
public static FaceResultVO faceSearch(FaceParaVO dto) throws IOException {
	// 比对图片
	String image = Base64Util.encode(FileUtil.readFileByBytes(dto.getFaceImgUrl()));
	try {
		Map<String, Object> map = new HashMap<>();
		map.put("image", image);
		map.put("image_type", "BASE64");
		map.put("group_id_list", dto.getGroupId());
		String param = GsonUtils.toJson(map);

		// 获取access_token
		FaceAuthService.setFaceAuth();
		String accessToken = FaceAPIConstants.TOKEN;

		String result = HttpUtil.post(FaceAPIConstants.SEARCH_URL, accessToken, FaceAPIConstants.CONTENT_TYPE, param);

		// 结果处理
		FaceReturnVO resultVO = FaceCommonUtils.getReturnObj(result);
		if ("0".equals(resultVO.getErrorCode())) {
			return resultVO.getResult();
		} else {
			throw new MtException(resultVO.getErrorMsg());
		}
	} catch (Exception e) {
		e.printStackTrace();
		throw new MtException(e.getMessage());
	}
}

注意:

此实例是以本地图片实现的,如果需要以URL图片地址实现,需要将image_type赋值为URL,同时图片不用再进行转码。如果图片是前端传输的字节流,后端不用处理,但需要将前端传输的图片字节流的前部”<img src='data:img/jpg;base64“及尾部的”=='/>“的字符串。

 4. 方法调用

参数传入用户组和用户图片

FaceParaVO faceParaVO = new FaceParaVO();
faceParaVO.setGroupId("110");
faceParaVO.setFaceImgUrl("D:\\MyDocuments\\Work Files\\face_images\\sts_1.jpg");
FaceDetectUtils.faceSearch(faceParaVO);

5. 人脸识别结果

补充:

需要完整代码的,可从此地址下载:https://download.csdn.net/download/qwerdfcv/21353239

三. 参考资料

  1. 人脸识别百度文档地址:https://cloud.baidu.com/apiexplorer/index.html?Product=GWSE-nmhroEsyriA&Api=GWAI-eSX4WxmdzLE
  2. 百度智能云-管理中心地址:https://console.bce.baidu.com/ai/?_=1629371219202&fromai=1#/ai/face/overview/index
  3. 人脸识别相关百度视频教学地址:https://abcxueyuan.baidu.com/#/line_course?nodeId=74&index=0-2-0&pageNo=1&sortTag=1
  • 14
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琳妹妹的辉哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值