百度智能云是百度旗下面向企业、开发者和政府机构的智能云计算服务商,致力于为各行业提供以ABC(人工智能、大数据、云计算)技术为一体的平台服务。

对于开发者而言,灵活利用其提供的大量模块化接口,可快速完成相关的开发,大大缩短开发周期。

本文将对其人脸识别的接口进行利用,并实现几个实例。对这些实例核心进行拓展将能实现更广泛的应用。基于百度深度学习能力的人脸识别技术,提供人脸检测与属性分析、人脸1:1对比、人脸搜索、活体检测等能力。灵活应用于金融、泛安防、零售等行业场景,满足身份核验、人脸考勤、闸机通行等业务需求。

4个实例:

faceDao.faceDetect(client);//检测是否是人,评测人像各类指标
        faceDao.faceMatch(client);//检测两个图片的人物匹配度
        faceDao.faceSerch(client);//检索一张人脸是否在人脸库中
        faceDao.faceUpdate(client);//更新人脸库

思路:

工程中建立4个类:

AiFaceMain类:主函数类,用于调用FaceDao类中实现的各种具体方法。

FaceDao:实现各种人脸识别的具体方法:人脸检测,人脸对比,库中检索特定人脸,对人脸库的操作。

ClientUtils:初始化类,初始化AipFace,获得AipFace client。登入AipFace。

ImageUtils:图片转化工具类,将本地图片转换为base64流,最后转为String提供给FaceDao中的各类方法使用。这里是因为百度API中要求图片要以Base64编码进行传输,请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。


上干货,代码:

工程结构:

AiFaceMain类:

package com.sevenh.Dao;import java.io.IOException;import com.baidu.aip.face.AipFace;
import com.sevenh.Util.ClientUtils;public class AiFaceMain {public static void main(String[] args) {ClientUtils cl = new ClientUtils();AipFace client=cl.getClient();FaceDao faceDao = new FaceDao();try {//faceDao.faceDetect(client);//检测是否是人,评测人像各类指标faceDao.faceMatch(client);//检测两个图片的人物匹配度//faceDao.faceSerch(client);//从人脸库中找到最匹配的一个//faceDao.faceUpdate(client);//更新人脸信息//faceDao.deletUserGroup(client);//删库} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

FaceDao类:

public class FaceDao {/*** 人脸检测* @param client * ClientUtils cl = new ClientUtils();AipFace client=cl.getClient();FaceDao faceDao = new FaceDao();faceDao.faceDetect(client);* @throws IOException*/public void faceDetect(AipFace client) throws IOException{String src=ImageUtils.image2Base64("E:\\zm\\人脸识别\\勒布朗.png");String image = src;String imageType = "BASE64";// 人脸检测// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("face_field", "age,emotion,gender");options.put("max_face_num", "2");options.put("face_type", "LIVE");options.put("liveness_control", "NONE");JSONObject res = client.detect(image, imageType, options);JSONObject jD=res.getJSONObject("result");JSONArray stus=jD.getJSONArray("face_list");JSONObject ty=stus.getJSONObject(0);System.out.println("年龄:"+ty.get("age"));System.out.println("情绪:"+ty.get("emotion"));System.out.println("性别:"+ty.get("gender"));System.out.println(res.toString(2));}/*** 人脸对比* @param client* @throws IOException*/public void faceMatch(AipFace client) throws IOException{String image1;String image2;String imageType;image1 = ImageUtils.image2Base64("C:\\Users\\ayyk\\Desktop\\人脸识别\\勒布朗.jpg");image2 = ImageUtils.image2Base64("C:\\Users\\ayyk\\Desktop\\人脸识别\\勒布朗没胡子.jpg");imageType = "BASE64";MatchRequest req1 = new MatchRequest(image1, imageType);MatchRequest req2 = new MatchRequest(image2, imageType);ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();requests.add(req1);requests.add(req2);JSONObject res = client.match(requests);JSONObject jD=res.getJSONObject("result");Double sc=(Double) jD.get("score");System.out.println("相似度:"+sc);if(sc>80) {System.out.println("是同一个人");}else {System.out.println("不是同一个人");}System.out.println(res.toString());}/*** 在人脸库中搜索人脸* @param client* @throws IOException*/public void faceSerch(AipFace client) throws IOException {// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();//在哈希表(hash table)中缓存放入相关字段对应的值来进行参数设置。options.put("max_face_num", "1");options.put("match_threshold", "10");options.put("quality_control", "NORMAL");//options.put("liveness_control", "LOW");//options.put("user_id", "233451");options.put("max_user_num", "1");String image = ImageUtils.image2Base64("E:\\zm\\人脸识别\\人脸对比\\dd.jpg");String imageType = "BASE64";String groupIdList = "test";// 人脸搜索JSONObject res = client.search(image, imageType, groupIdList, options);System.out.println(res.toString(2));//这里的toString(2)是json格式缩进2个字符}/*** 人脸更新* @param client* @throws IOException*/public void faceUpdate(AipFace client) throws IOException{// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();//options.put("image", "027d8308a2ec665acb1bdf63e513bcb9");options.put("group_id", "test");options.put("user_id", "LeBron");options.put("user_info", "勒布朗·詹姆斯(LeBron James),1984年12月30日出生于美国俄亥俄州阿克伦(Akron, Ohio),美国职业篮球运动员,司职小前锋,效力于NBA洛杉矶湖人队。");//options.put("liveness_control", "NORMAL");//options.put("image_type", "FACE_TOKEN");options.put("quality_control", "LOW");String image = ImageUtils.image2Base64("E:\\zm\\人脸识别\\勒布朗.png");String imageType = "BASE64";String groupIdList = "test";String userId = "LeBron";JSONObject res=client.updateUser(image, imageType, groupIdList, userId, options);System.out.println("更新成功:"+res.toString(2));}/*** 人脸库删除* @param client*/public void deletUserGroup(AipFace client) throws IOException{// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();String groupId = "sevenh";// 删除用户组JSONObject res = client.groupDelete(groupId, options);System.out.println(res.toString(2));}}

ClientUtils类:

public class ClientUtils {//设置APPID/AK/SKpublic static final String APP_ID = "16578793";public static final String API_KEY = "aRQYOMsXk3k7AUFDoZjVV2Td";public static final String SECRET_KEY = "wgPvo64xQo3mSQlLwzVbGEWGx19douwh";/*** 初始化AipFace,获得AipFace client。登入AipFace。* @return*/public AipFace getClient() {AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);return client;}
}

ImageUtils类:

public class ImageUtils {
/*** 将本地图片转换为base64流,最后转为String。* @param imageFilePath 本地图片地址参数* @return 返回的是图片流的字符串。* @throws IOException*/public static String image2Base64(String imageFilePath) throws IOException {FileInputStream fis = new FileInputStream(new File(imageFilePath));byte[] bytes = new byte[fis.available()];.available()这个方法可以在读写操作前先得知数据流里有多少个字节可以读取fis.read(bytes);// 从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组bytes中。      //static BASE64Encoder encoder = new BASE64Encoder();这是以前的旧方法。jdk9后弃用。//String base64String = encoder.encode(bytes);        Encoder encoder = Base64.getEncoder();String base64String = encoder.encodeToString(bytes);System.out.println("base64String: " + base64String);//输出图片变成的字符串来看看return base64String;}

运行结果:

1.人脸检测:

接口能力

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

 

2.人脸对比:

接口能力

  • 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;
  • 多种图片类型:支持生活照证件照身份证芯片照带网纹照四种类型的人脸对比;
  • 活体检测控制:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);
  • 质量检测控制:分析图片的中人脸的模糊度、角度、光照强度等特征,判断图片质量;

业务应用

用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。

典型应用场景:如人证合一验证用户认证等,可与现有的人脸库进行比对验证。

3.特定人脸在人脸库中检索

在人脸库(test)中查找是否有“猜猜我是谁.png”图片中的人物。

结果:

4.对人脸库的增删改查(以更新人脸信息为例)

百度智能云平台当前已经开放了身份识别、公安验证、视频活体检测等底层API,根据实际业务情况可直接接入相关的API,方便快速集成开发使用,减少开发工作量,加快开发速度。

注:本文着重介绍的是工程结构和代码的具体实现,开发环境的建立请见另一篇文章。

人脸识别——基于百度智能云实现相关推荐

  1. Linux下基于百度智能云平台人脸识别

    Linux下基于百度智能云平台人脸识别 1.百度智能云接口及简介 https://cloud.baidu.com/product/face   接口技术文档: 2.人脸检测属性分析项目示例  硬件平台 ...

  2. 基于百度智能云的人脸识别登陆系统

    基于百度智能云的人脸识别登陆系统 设计说明 后端项目结构 前端页面 项目版本1下载 使用说明 项目版本1的Gitee链接 项目版本2--基于人脸对比的登陆系统 项目2下载链接 版本2的Gitee链接 ...

  3. 基于百度智能云api识别验证码

    基于百度智能云api识别验证码 通过调用百度智能云api接口进行验证码识别并输出. 使用baidu-aip模块进行模拟client登录,client.basicgeneral()函数识别图片文字并返回 ...

  4. Android--智能图像识别(基于百度智能云)

    目录 效果图 引言 步骤 调用相机 显示图片到Activity并识别 创建百度智能云平台 下一步下载官方提供的SDK 查看官方文档 查看API接口文档(在SDK文档的同一个界面) 坑点:没注意提供的代 ...

  5. java+js实现人脸识别-基于百度api

    java+js实现人脸识别-基于百度api 我的第一次分享 第一步-我们了解下实现的思路 代码部分:1.js代码 2.后台代码 3.如何使用百度大脑 4.如何使用 navigator.mediaDev ...

  6. OCR(文字识别)功能与ASR(语音识别)的java应用开发(基于百度智能云)

    百度云官网: 百度智能云-智能时代基础设施百度智能云专注云计算.智能大数据.人工智能服务,提供稳定的云服务器.云主机.云存储.CDN.域名注册.物联网等云服务,支持API对接,快速备案等专业解决方案. ...

  7. python基于百度智能云实现批量身份证信息识别(附完整代码,可直接使用)

    百度智能云配置 一.登录 登录百度智能云,找到卡证文字识别,点击立即使用 地址: https://cloud.baidu.com/product/ocr_cards 二.创建应用 创建一个应用,过程不 ...

  8. python:ocr图文识别(百度智能云API文字识别)

    文章目录 前言 一.创建账号和应用 二.具体步骤 1.第一种方式: 2.第二种方式 总结 前言 说道OCR图文识别,其实python也有在自己的库(以下是我了解,应该还有很多): 第一个 tesser ...

  9. 基于百度智能云的人脸识别系统

    演示视频: [人脸识别]没想到自己做个人脸识别软件居然这么简单! 树莓派人脸识别代码: from picamera.array import PiRGBArray from picamera impo ...

最新文章

  1. Spring Boot 添加拦截器的配置方式
  2. Caffe代码导读(1):Protobuf例子
  3. discrete mathematics important questions
  4. flask开发问题小记
  5. 由我妈买菜,联想到了数据挖掘
  6. 服务器维护:FTP无法连接
  7. Go信号gsignal和宿主Signal
  8. python qtextedit设置光标位置_Python基础命令学习——就这一篇文章就够了
  9. spss聚类分析_SPSS实践:常用聚类分析方法详解
  10. HTML标记之Form表单
  11. TCR历史论文多久能发表?
  12. android的平台签名工具,《安卓开发》APK签名工具使用方法
  13. scp:Mac使用方法(文件上传与下载服务器)
  14. C语言sort和qsort函数的用法
  15. jQuery移动端手机键盘输入车牌号代码【附加新能源车牌】
  16. abc计算机发明英语翻译,英语四级翻译模拟练习:四大发明
  17. shell 脚本 : 获取当前路径与当前路径下的目录列表
  18. UR机器人(1)-安装和设置
  19. 网络订餐系统设计与实现
  20. vue环境变量配置——process.env(详细)

热门文章

  1. STM32内存结构总结
  2. VM Tools 安装
  3. mysql连接三个表
  4. java.lang.IllegalArgumentException报错
  5. 8点1氪|苹果第一财季营收843亿美元;VIPKID拟融资4-5亿美元;工信部称5G终端将于年中推出...
  6. 需要达到什么水平才能找到一份计算机实习?
  7. 【Vulnhub靶场】THOTH TECH: 1
  8. Gunicorn-配置详解
  9. 卷积神经网络的参数设置,卷积神经网络基本结构
  10. android 高德地图显示标题,android学习之高德地图添加标记