【腾讯云】使用人脸识别的面部分析技术

【腾讯云】使用人脸识别的面部分析技术随着人工智能的不断发展 以及对接云端上的技术也越来越重要 很多人都开启了了解学习云端技术 本文就介绍了腾讯云上的人脸识别技术对接内容

大家好,欢迎来到IT知识分享网。


前言


一、人脸识别是什么?

腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。

产品功能

二、使用步骤

1.引入库

java代码如下(示例):

<!-- 腾讯云的人脸识别 (IAI)API3.0 最新版本:3.1.978 --> <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>tencentcloud-sdk-java-iai</artifactId> <version>3.1.978</version> </dependency> 

2.application.yml 自定义属性值

密钥获取方式
说明一下:上图是密钥的获取方式

tencent: cloud: appId: xxxxxx #APPID secretId: xxxxxx #密钥 secretKey: xxxxxx #密钥key face: groupId: xxxxxx #人员库ID region: ap-shanghai #地域 

3.静态参数初始化类 StaticConfig

package com.example.hospital.patient.wx.api.config; import com.example.hospital.patient.wx.api.util.IaiUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; / * 静态参数初始化 */ @Component public class StaticConfig { 
      @Value("${tencent.cloud.appId}") private String appId; @Value("${tencent.cloud.secretKey}") private String secretKey; @Value("${tencent.cloud.secretId}") private String secretId; @Value("${tencent.cloud.face.region}") private String region; @Value("${tencent.cloud.face.groupId}") private String groupId; / * 用于标记一个方法,该方法将在bean的依赖注入实例化完成之后,在调用任何构造方法之前被调用, * init方法会在StaticConfig bean实例化后被立即调用 */ @PostConstruct public void init() { 
      IaiUtil.init(appId,secretKey,secretId,region,groupId); } } 

4.IaiUtil 工具类

说明一下:开通人脸识别后,腾讯云会为我们提供 10000 次免费使用次数,可在购买的资源包管理中查询,超过这个会进行收费的,不过免费的已够我们开发测试用的了。在这里插入图片描述
说明一下:开通人脸识别后,针对每个功能接口腾讯云会为我们提供 10000 次免费使用次数,可在购买的资源包管理中查询,超过这个会进行收费的,不过免费的已够我们开发测试用的了。

package com.example.hospital.patient.wx.api.util; import cn.hutool.core.map.MapUtil; import com.example.hospital.patient.wx.api.exception.HospitalException; import com.tencentcloudapi.common.AbstractModel; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; //导入可选配置类 import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile; import com.tencentcloudapi.iai.v.IaiClient; import com.tencentcloudapi.iai.v.models.*; import java.io.File; import java.io.FileInputStream; import java.util.*; public class IaiUtil { 
      private static String appId; private static String secretKey; private static String secretId; private static String region; private static String groupId; / * 总结: * 为什么static修饰的字段就不能通过@Value设置值呢,这是因为@Value设置值是通过spring容器来ioc设置值的,可是static修饰的字段在构造 * 函数之前就加载完毕了,所以是没办法通过@Value来设置值。但是我们却可以通过加配置类以及添加init的方法,来辅助完成对静态成员变量赋值的问题。 * 在启动加了@Component注解的 pojo类实例化后,通过调用init方法来给static修饰的字段设置新的值,通过这种方式就可以解决这种问题了。 * @param appId * @param secretKey * @param secretId * @param region * @param groupId */ public static void init(String appId, String secretKey, String secretId, String region, String groupId){ 
      IaiUtil.appId = appId; IaiUtil.secretKey = secretKey; IaiUtil.secretId = secretId; IaiUtil.region = region; IaiUtil.groupId = groupId; } / * 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 * @return client */ public static IaiClient getClientInstance() { 
      // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 Credential cred = new Credential(secretId, secretKey); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("iai.tencentcloudapi.com"); // httpProfile.setReqMethod("GET"); // get请求(默认为post请求) get请求可能会报错,报414,uri路径过长 httpProfile.setConnTimeout(30); // 请求连接超时时间,单位为秒(默认60秒) httpProfile.setWriteTimeout(30); // 设置写入超时时间,单位为秒(默认0秒) httpProfile.setReadTimeout(30); // 设置读取超时时间,单位为秒(默认0秒) // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 IaiClient client = new IaiClient(cred, region, clientProfile); return client; } / * 获取人员库信息 * @param groupId */ public static String GetGroupInfo(String groupId) throws TencentCloudSDKException { 
      try{ 
      IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 GetGroupInfoRequest req = new GetGroupInfoRequest(); req.setGroupId(groupId); // 返回的resp是一个GetGroupInfoResponse的实例,与请求对象对应 GetGroupInfoResponse resp = client.GetGroupInfo(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } catch (TencentCloudSDKException e) { 
      throw new TencentCloudSDKException(e.getMessage()); } } / * 修改人员库信息 * @param map */ public static String modifyGroup(Map map) { 
      try{ 
      IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 ModifyGroupRequest req = new ModifyGroupRequest(); req.setGroupName(MapUtil.getStr(map, "groupName")); req.setGroupId(MapUtil.getStr(map, "groupId")); req.setTag(MapUtil.getStr(map, "tag")); // 返回的resp是一个ModifyGroupResponse的实例,与请求对象对应 ModifyGroupResponse resp = client.ModifyGroup(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } catch (TencentCloudSDKException e) { 
      throw new HospitalException(e.getMessage()); } } / * 创建人员:用于创建人脸信息,创建人员信息 * @param map */ public static String createPerson(Map map) throws TencentCloudSDKException{ 
      // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 CreatePersonRequest req = new CreatePersonRequest(); req.setGroupId(groupId); req.setPersonId(MapUtil.getStr(map, "userId")); req.setPersonName(MapUtil.getStr(map, "name")); req.setGender(MapUtil.getStr(map, "sex").equals("男") ? 1L : 2L); // 0代表未填写,1代表男性,2代表女性 // image和url 必须提供一个,如果都提供则只用url req.setImage(MapUtil.getStr(map, "image")); // 图片base64数据,base64编码后大小不可超过5M req.setUrl(MapUtil.getStr(map, "url")); req.setUniquePersonControl(4L); // 0-4L 数值越大,疑似同一人的概率越小 req.setQualityControl(4L); // 图片质量控制 req.setNeedRotateDetection(0L); // 是否开启图片旋转识别支持,0为不开启,1为开启。默认为0 // 返回的resp是一个CreatePersonResponse的实例,与请求对象对应 CreatePersonResponse resp = client.CreatePerson(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } / * 增加人脸 createFace * 将一组人脸图片添加到一个人员中。一个人员最多允许包含 5 张图片。若该人员存在多个人员库中,所有人员库中该人员图片均会增加。 * @param map */ public static String createFace(Map map) { 
      try{ 
      // 实例化一个认证对象 IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 CreateFaceRequest req = new CreateFaceRequest(); req.setPersonId(MapUtil.getStr(map, "personId")); // 取值为创建人员接口中的PersonId String[] images = MapUtil.getStr(map, "images").split(","); req.setImages(images); req.setUrls(null); req.setQualityControl(4L); req.setNeedRotateDetection(4L); // 返回的resp是一个CreateFaceResponse的实例,与请求对象对应 CreateFaceResponse resp = client.CreateFace(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } catch (TencentCloudSDKException e) { 
      throw new HospitalException(e.getMessage()); } } / * 人脸搜索 * {"Results":[{"Candidates":[ * {"PersonId":"3","FaceId":"","Score":100.0}, * {"PersonId":"1","FaceId":"","Score":29.}, * {"PersonId":"2","FaceId":"","Score":12.88152} * ],"FaceRect":{"X":254,"Y":420,"Width":348,"Height":456},"RetCode":0}], * "FaceNum":3,"FaceModelVersion":"3.0","RequestId":"0bc3c6d1-ef85-43ec-bd67-4e0318c2ad0d"} * @param map * @return */ public static String searchFaces(Map map) { 
      try{ 
      // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 SearchFacesRequest req = new SearchFacesRequest(); req.setGroupIds(MapUtil.getStr(map,"groupIds").split(",")); req.setImage(fileToBase64()); // 返回的resp是一个SearchFacesResponse的实例,与请求对象对应 SearchFacesResponse resp = client.SearchFaces(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } catch (TencentCloudSDKException e) { 
      throw new HospitalException(e.getMessage()); } } / * 用于验证登录的账号是否是本人 * 人员验证:给定一张人脸图片和一个 PersonId,判断图片中的人和 PersonId 对应的人是否为同一人。 * 本接口会将该人员(Person)下的所有人脸(Face)进行融合特征处理,即若某个Person下有4张 Face,本接口会将4张 Face 的特征进行融合处理, * 生成对应这个 Person 的特征,使人员验证(确定待识别的人脸图片是某人员)更加准确。 * 输出参数示例:{"Score":100.0,"IsMatch":true,"FaceModelVersion":"3.0","RequestId":"c1ea2cc5-1c8f-4433-9715-4339ac96f8b4"} * @param map * @return */ public static String verifyPerson(Map map) throws TencentCloudSDKException { 
      // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 VerifyPersonRequest req = new VerifyPersonRequest(); req.setPersonId(MapUtil.getStr(map, "userId")); req.setImage(MapUtil.getStr(map, "image")); // 返回的resp是一个VerifyPersonResponse的实例,与请求对象对应 VerifyPersonResponse resp = client.VerifyPerson(req); // 输出json格式的字符串回包 return AbstractModel.toJsonString(resp); } / * 人脸静态活体检测(非高精度版) * @param map * @return * @throws TencentCloudSDKException */ public static String detectLiveFace(Map map) throws TencentCloudSDKException { 
      // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 IaiClient client = getClientInstance(); // 实例化一个请求对象,每个接口都会对应一个request对象 DetectLiveFaceRequest req = new DetectLiveFaceRequest(); // image和url 必须传一个 req.setImage(MapUtil.getStr(map, "image")); req.setUrl(MapUtil.getStr(map, "url")); req.setFaceModelVersion("3.0"); // 返回的resp是一个DetectLiveFaceResponse的实例,与请求对象对应 DetectLiveFaceResponse resp = client.DetectLiveFace(req); // 返回json格式的字符串回包 return AbstractModel.toJsonString(resp); } / * 将File文件转成base64编码 * 也可以在前端直接将图片转化为 base64字符串数据 * * @return base64编码 */ public static String fileToBase64() { 
      File file = new File("/Users/mac/Documents/我的照片/照片.jpg"); if (!file.exists()) { 
      return null; } // base64编码 String context = null; try { 
      FileInputStream inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; inputFile.read(buffer); inputFile.close(); // public static Encoder getEncoder():基本型 base64 编码器 // 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/ context = Base64.getEncoder().encodeToString(buffer); } catch (Exception e) { 
      e.printStackTrace(); } return context; } } 

三、总结

以上就是今天要记录的内容,本文主要介绍了人脸识别中的人脸的创建、验证,以及人脸静态活体检测等的使用,而腾讯云为我们提供了大量的处理人脸识别的API接口和SDK,以及相关文档, 有问题可以参照官网,也可以留言大家一起讨论下。 当然,文章中有哪些不当之处,也欢迎大家进行指正。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125345.html

(0)
上一篇 2025-09-27 22:33
下一篇 2025-09-28 07:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信