IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 百度人脸识别API调用实现 -> 正文阅读

[人工智能]百度人脸识别API调用实现

一. 准备工作

需要做的准备工作主要有两部分,一是完成应用创建,二是下周官方工具类和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,同时图片不用再进行转码。

?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
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:05:55  更:2021-08-20 15:07:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/1 10:22:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码