阿里云-人脸活体检测

一、官方文档

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代码示例。

 调试

请求参数

名称类型是否必选示例值描述
ActionStringDetectLivingFace

系统规定参数。取值:DetectLivingFace

Tasks.N.ImageURLStringhttp://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.ImageDataString9j/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/xml2EEA0396-BD84-5729-B8BD-D60776FCEF2Bimg1owc8WGskNm78OEAPJTZal-1****review73.04http://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.aliyunaliyun-java-sdk-facebody1.2.2com.aliyunviapi-utils1.0.0com.aliyunaliyun-java-sdk-viapiutils1.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_secretpublic 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时,人脸活体识别不通过passint 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无需网络urlpublic 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);}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部