百度云人脸检测

百度云人脸检测

    • 接口能力
    • 业务应用
    • 质量检测
    • Code demonstration

接口能力

  • 人脸检测:检测图片中的人脸并标记出位置信息。
  • 人脸关键点:展示人脸的核心关键点信息,及150个关键点信息。
  • 人脸属性值:展示人脸属性信息,如年龄、性别等。
  • 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。

百度云智能官方API文档

业务应用

典型应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。

质量检测

百度云人脸检测_第1张图片

Code demonstration

仅供参考

/**
 * 人脸检测
 * @param imageType 图片类型
 * @param image 图片
 * @throws Exception 异常
 */
public static void detect(ImageType imageType, String image) throws Exception {
    AipFace client = new AipFace(KDZS_APP_ID, KDZS_APP_KEY, KDZS_APP_SECRET);
    // 传入可选参数调用接口
    HashMap<String, Object> options = new HashMap<String, Object>();
    options.put("max_face_num", "1");
    options.put("face_field", "glasses,quality,eye_status,face_type");
    /**
     * 人脸的类型
     * LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等
     * IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片
     * WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图
     * CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片
     * 默认LIVE
     */
    options.put("face_type", "LIVE");
    options.put("liveness_control", "LOW");

    // 人脸检测
    JSONObject ret = client.detect(image, imageType.toString(), options);
    log.info("人脸检测结果: {}", ret.toString(2));
    // 解析结果
    int errorCode = ret.getInt("error_code");
    if (errorCode == 222202) {
        throw new BusinessException("照片未找到人脸");
    } else if (errorCode != 0) {
        throw new BusinessException(ret.getString("error_msg"));
    }

    JSONObject result = ret.getJSONObject("result");
    // 人脸个数
    int faceNum = result.getInt("face_num");
    DomainUtils.throwException(faceNum > 1, "检测出多个人脸");
    DomainUtils.throwException(faceNum < 1, "未检测到人脸信息");
    // 获取人脸
    result = result.getJSONArray("face_list").getJSONObject(0);

    // 真实人脸/卡通人脸 human: 真实人脸 cartoon: 卡通人脸
    DomainUtils.throwException("cartoon".equals(result.getJSONObject("face_type").getString("type")), "未检测到真实人脸");

    // 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大
    double faceProbability = result.getDouble("face_probability");
    DomainUtils.throwException(faceProbability < 0.8, "人脸置信度较低");

    // 人脸旋转角度参数
    JSONObject angle = result.getJSONObject("angle");
    double roll = angle.getDouble("roll");
    double pitch = angle.getDouble("pitch");
    double yaw = angle.getDouble("yaw");
    DomainUtils.throwException(roll > 20 || pitch > 20 || yaw > 20, "姿态角度不正确, 请调正拍摄角度");

    // 是否带眼镜 none:无眼镜,common:普通眼镜,sun:墨镜
    DomainUtils.throwException("sun".equals(result.getJSONObject("glasses").getString("type")), "请摘掉墨镜拍照");

    //  双眼状态
    JSONObject eyeStatus = result.getJSONObject("eye_status");
    double leftEye = eyeStatus.getDouble("left_eye");
    double rightEye = eyeStatus.getDouble("right_eye");
    DomainUtils.throwException(leftEye < 0.2 || rightEye < 0.2, "眼睛睁开度较小");

    // 遮挡
    JSONObject quality = result.getJSONObject("quality");
    JSONObject occlusion = quality.getJSONObject("occlusion");
    DomainUtils.throwException(occlusion.getDouble("left_eye") > 0.2, "左眼被遮挡");
    DomainUtils.throwException(occlusion.getDouble("right_eye") > 0.2, "右眼被遮挡");
    DomainUtils.throwException(occlusion.getDouble("nose") > 0.2, "鼻子被遮挡");
    DomainUtils.throwException(occlusion.getDouble("mouth") > 0.2, "嘴巴被遮挡");
    DomainUtils.throwException(occlusion.getDouble("left_cheek") > 0.2, "左脸颊被遮挡");
    DomainUtils.throwException(occlusion.getDouble("right_cheek") > 0.2, "右脸颊被遮挡");
    DomainUtils.throwException(occlusion.getDouble("chin_contour") > 0.2, "下巴被遮挡");
    // 人脸模糊程度
    DomainUtils.throwException(quality.getDouble("blur") > 0.7, "照片比较模糊");
    // 脸部区域的光照程度
    DomainUtils.throwException(quality.getDouble("illumination") < 40, "光线较弱, 请选择好的光线位置进行拍摄");
    // 人脸完整度
    DomainUtils.throwException(quality.getInt("completeness") == 0, "人脸超出照片");
}

/**
 * 图片类型
 */
public enum ImageType {
    URL,
    BASE64;
}

你可能感兴趣的:(百度云智能,java,百度云智能,人脸检测)