阿里云

您所在的位置:网站首页 活体识别技术破解了吗 阿里云

阿里云

2024-07-10 15:19| 来源: 网络整理| 查看: 265

一、官方文档 https://help.aliyun.com/document_detail/155006.html

本文为您介绍人脸活体检测DetectLivingFace的语法及示例。

功能描述

人脸活体检测能力可以检测图片中的活体对象(主要是人脸)来自直接拍摄或者是翻拍。活体判断的前置条件是图像中有人脸。

应用场景

系统人脸登录防攻击:通过检测上传的图像是否是真人,而非翻拍照片,以防止攻击者登录系统。

前提条件

请确保您已开通人脸人体服务,若未开通服务请立即开通。

说明 本能力仅限企业认证用户开通。更多实名认证操作信息,请参见实名认证。

输入限制 图像格式:PNG、JPG、JPEG、BMP、GIF、WEBP。图像大小:不超过10 MB。如您有大图需求,请提工单进行调整。图像分辨率:建议大于256×256,像素过低可能会影响识别效果。URL地址中不能包含中文字符。

说明 当图像分辨率超过最大限制时,请先将图片进行缩放,调整图片大小,具体请参见图片缩放。

检测说明 最长检测时间是6秒,如果在该时间内没有完成检测,系统会强制返回超时错误码。图像下载时间限制为3秒,如果下载时间超过3秒,系统会返回下载超时。图像检测接口响应时间依赖图像的下载时间。请保证被检测图像所在的存储服务稳定可靠,建议您使用阿里云OSS存储或者CDN缓存。最多可检测10张图像。 计费说明

关于人脸活体检测的计费方式及报价,请参见计费介绍。

说明 下方调试接口为付费接口,如需免费体验调试请前往体验中心。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

 调试

请求参数 名称类型是否必选示例值描述ActionString是DetectLivingFace

系统规定参数。取值:DetectLivingFace。

Tasks.N.ImageURLString否http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg

待检测的图像URL地址。JSON数组中的每个元素是一个图片检测任务结构体(image表)。最多支持10个元素,即同时最多对10张图片进行检测。当前仅支持上海地域的OSS链接,如何生成URL请参见生成URL。

说明 对于该接口,系统会自动将OSS链接地址转成内网地址然后再下载文件,所以调用该接口并不会产生OSS流量计费。

Tasks.N.ImageDataString否9j/4AAQSkZJRgABAQAAAQABAAD/2****

图像Base64编码字符串。当与URL方式共存时,URL方式优先。

返回数据 名称类型示例值描述RequestIdString2EEA0396-BD84-5729-B8BD-D60776FCEF2B

请求ID。

DataObject

返回的结果数据内容。

ElementsArray of Element

返回的元素。

ImageURLStringhttp://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg

对应请求中的图像URL地址。

TaskIdStringimg1owc8WGskNm78OEAPJTZal-1****

该检测任务的ID。

ResultsArray of Result

返回结果。调用成功时返回结果中包含一个或多个元素。

SuggestionStringreview

建议您执行的操作,取值范围如下:

pass:图片中的活体对象来自直接拍摄,无需进行其余操作。review:图片中的活体对象可能来自翻拍,建议您确认后再进行操作。block:图片中的活体对象大概率来自翻拍,建议您执行后续操作。FramesArray of Frame

(该字段已废弃)输入图像为长图(长宽比大于 3:1 )时,会把原图截成几张正常比例的图,frames保存从图像中裁剪出来的而且是翻拍命中的截图。

LabelStringliveness

检测结果的分类,取值包括:

normal:活体照片liveness:翻拍照片RateFloat76.22

结果为该分类的概率,取值范围为[0.00-100.00]。表示属于该分类的概率越大。

示例

请求示例

http(s)://facebody.cn-shanghai.aliyuncs.com/?Action=DetectLivingFace &Tasks=[{"ImageURL":"http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg","ImageData":"9j/4AAQSkZJRgABAQAAAQABAAD/2****"}] &公共请求参数

正常返回示例

XML格式

HTTP/1.1 200 OK Content-Type:application/xml 2EEA0396-BD84-5729-B8BD-D60776FCEF2B img1owc8WGskNm78OEAPJTZal-1**** review 73.04 liveness http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg

JSON格式

HTTP/1.1 200 OK Content-Type:application/json { "RequestId" : "2EEA0396-BD84-5729-B8BD-D60776FCEF2B", "Data" : { "Elements" : { "TaskId" : "img1owc8WGskNm78OEAPJTZal-1****", "Results" : { "Suggestion" : "review", "Rate" : 73.04, "Label" : "liveness" }, "ImageURL" : "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg" } } } 错误码

关于人脸活体检测的错误码,详情请参见常见错误码。

 二、Java工具类

Java spring boot 阿里云调用人脸识别接口,本地sdk上传到阿里云调用api_朱衣点头戈子衫的博客-CSDN博客

1、依赖 com.aliyun aliyun-java-sdk-facebody 1.2.2 com.aliyun viapi-utils 1.0.0 com.aliyun aliyun-java-sdk-viapiutils 1.0.0 2、工具类 import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.facebody.model.v20191230.*; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class FaceRecognitionUtil { //DefaultProfile.getProfile的参数分别是地域,access_key_id, access_key_secret public static DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "xxxxxxxxxxxxxxxxxxx", "ooooooooooooooooooooooooooooo"); public static IAcsClient client = new DefaultAcsClient(profile); // 人脸对比 /** * VerifyFace API 人脸比对 * * @param imageUrl_login 对比人脸图片1 * @param imageUrl_register 对比人脸图片2 */ public static String VerifyFace(String imageUrl_login, String imageUrl_register) { CompareFaceRequest request = new CompareFaceRequest(); request.setRegionId("cn-shanghai"); request.setImageURLA(imageUrl_login); request.setImageURLB(imageUrl_register); try { CompareFaceResponse response = client.getAcsResponse(request); System.out.println("人脸对比:"+new Gson().toJson(response)); JSONObject jsonObject = JSONObject.parseObject(new Gson().toJson(response)); jsonObject=JSONObject.parseObject((jsonObject.get("data").toString())); String confidence = jsonObject.get("confidence").toString(); Float confidenceFloat = Float.parseFloat(confidence); if (confidenceFloat >= 0.61) { return "Yes"; } else { return "No"; } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } return null; } /** * RecognizeFace API 人脸检测 * * @param imageUrl 人脸图片 */ public static String RecognizeFace(String imageUrl) { RecognizeFaceRequest request = new RecognizeFaceRequest(); request.setRegionId("cn-shanghai"); request.setImageURL(imageUrl); try { RecognizeFaceResponse response = client.getAcsResponse(request); System.out.println("人脸检测:"+new Gson().toJson(response)); JSONObject jsonObject = JSONObject.parseObject(new Gson().toJson(response)); jsonObject=JSONObject.parseObject((jsonObject.get("data").toString())); String faceCounts = jsonObject.get("faceCount").toString(); if (Integer.parseInt(faceCounts)==0) { return "No"; } String likeDoubles = jsonObject.get("faceProbabilityList").toString(); likeDoubles = likeDoubles.substring(1,likeDoubles.length() - 1); if ("".equals(likeDoubles)) { return "No"; } String[] likeList = likeDoubles.split(","); if (likeList.length>0) { String num_str=likeList[0].toString(); Double num_double=Double.parseDouble(num_str); if (num_double>0.6) { return "Yes"; }else { return "No"; } } return "No"; } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } return null; } /** * DetectLivingFace API 人脸活体识别 * * @param imageUrl_login 人脸活体识别 */ public static String DetectLivingFace(String imageUrl_login) { DetectLivingFaceRequest request = new DetectLivingFaceRequest(); request.setRegionId("cn-shanghai"); List tasksList = new ArrayList(); DetectLivingFaceRequest.Tasks tasks1 = new DetectLivingFaceRequest.Tasks(); tasks1.setImageURL(imageUrl_login); tasksList.add(tasks1); request.setTaskss(tasksList); try { DetectLivingFaceResponse response = client.getAcsResponse(request); System.out.println("人脸活体识别:"+new Gson().toJson(response)); String str = new Gson().toJson(response).toString(); if (str!=null){ // 此处引入的是 com.alibaba.fastjson.JSONObject; 对象 JSONObject jsonObject = JSONObject.parseObject(str); jsonObject=JSONObject.parseObject((jsonObject.get("data").toString())); //result_pass为-1时,人脸活体识别不通过pass int result_pass = jsonObject.toString().indexOf("pass"); int result_block = jsonObject.toString().indexOf("block"); //判断是否通过活体 if (result_pass != -1 && result_block == -1){ return "Yes"; } return "No"; } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } return null; } // 本地上传sdk无需网络url public static void testUploadFile() throws ClientException, IOException { String accessKey = "xxxxxxxxxxxxxxxxx"; String accessKeySecret = "ooooooooooooooo"; String file1 = "D:\\2020-11-06\\timg.jpg"; // 或者本地上传 String file2 = "D:\\2020-11-06\\0.jpg"; // 或者本地上传 // String file = // "https://fuss10.elemecdn.com/5/32/c17416d77817f2507d7fbdf15ef22jpeg.jpeg"; FileUtils fileUtils = FileUtils.getInstance(accessKey, accessKeySecret); String ossurl1 = fileUtils.upload(file1); String ossurl2 = fileUtils.upload(file2); System.out.println(ossurl2); //人脸属性检测 RecognizeFace(ossurl2); //GetFaceAttribute(ossurl2); //人脸活体检测 DetectLivingFace(ossurl2); //人脸对比 VerifyFace(ossurl1, ossurl2); } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3