阿里云-人脸活体检测
一、官方文档
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代码示例。

调试
请求参数
| 名称 | 类型 | 是否必选 | 示例值 | 描述 |
|---|---|---|---|---|
| Action | String | 是 | DetectLivingFace | 系统规定参数。取值:DetectLivingFace。 |
| Tasks.N.ImageURL | String | 否 | 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.ImageData | String | 否 | 9j/4AAQSkZJRgABAQAAAQABAAD/2**** | 图像Base64编码字符串。当与URL方式共存时,URL方式优先。 |
返回数据
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| RequestId | String | 2EEA0396-BD84-5729-B8BD-D60776FCEF2B | 请求ID。 |
| Data | Object | 返回的结果数据内容。 | |
| Elements | Array of Element | 返回的元素。 | |
| ImageURL | String | http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectLivingFace/DetectLivingFace4.jpg | 对应请求中的图像URL地址。 |
| TaskId | String | img1owc8WGskNm78OEAPJTZal-1**** | 该检测任务的ID。 |
| Results | Array of Result | 返回结果。调用成功时返回结果中包含一个或多个元素。 | |
| Suggestion | String | review | 建议您执行的操作,取值范围如下:
|
| Frames | Array of Frame | (该字段已废弃)输入图像为长图(长宽比大于 3:1 )时,会把原图截成几张正常比例的图,frames保存从图像中裁剪出来的而且是翻拍命中的截图。 | |
| Label | String | liveness | 检测结果的分类,取值包括:
|
| Rate | Float | 76.22 | 结果为该分类的概率,取值范围为 |
示例
请求示例
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-D60776FCEF2B img1owc8WGskNm78OEAPJTZal-1**** review 73.04 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_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);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
