java 人脸比对_java ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对
java人脸识别 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对
人脸检测
人脸跟踪
人脸属性检测(性别、年龄)
人脸三维角度检测
人脸对比
本文使用到的SDK为本人自己使用JNA做的封装,2.0的使用比1.x的版本使用更方便,api更集中更科学
人脸识别:
人脸特征值抽取
人脸特征值比对获得相似度介于 0.0~1.0之间
【相似度越接近1.0两个人脸特征数据越有可能是一个人】
人脸特征值抽取的步骤:
1,对图片或者视频流中的人脸位置进行识别
2,对人脸特征值进行抽取(里面算法比较专业,我们就知道有这么回事就行)
3,保存人脸特征值入特征库
此处的demo,仅仅为了演示,直接进行两张图的特征抽取,并进行比对
素材,两张“朱莉”的照片
在这里插入图片描述
在这里插入图片描述
首先,编写抽取人脸特征值的代码,此处需要注意最后一行代码,返回的时候去new 了一个新的FaceFeature,此处的目的是对FaceFeature做深度copy,因为虹软对内存做了一些优化,FaceFeature的内存会被重复使用,如果不做深度copy,反复调用该方法,FaceFeature中的特征数据会被覆盖
/**
*
* @param ins FaceEngine ins = FaceEngine.INSTANCE
* @param hEngine 初始化之後的引擎實例
* @param imgPath 圖片路徑
* @return 人臉特征
*/
public static FaceFeature getFeature(FaceEngine ins,Pointer hEngine,String imgPath) {
IplImage img = cvLoadImage(imgPath);
MultiFaceInfo detectedFaces = new MultiFaceInfo();
BytePointer bp = img.arrayData();
byte[] imgData = new byte[img.arraySize()];
bp.get(imgData);
ins.ASFDetectFaces(hEngine, img.width(), img.height(), ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8,imgData, detectedFaces);
SingleFaceInfo faceInfo = new SingleFaceInfo();
faceInfo.faceRect = detectedFaces.getFaceRects()[0];
faceInfo.faceOrient = detectedFaces.getFaceOriends()[0];
FaceFeature feature = new FaceFeature();
ins.ASFFaceFeatureExtract(hEngine, img.width(), img.height(), ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8, imgData, faceInfo, feature);
return new FaceFeature(feature.getFeatureData());
}
有了人脸特征抽取的方法,我们再做人脸比对就很容易了,代码就几行:
FaceFeature feature1 = FeatureExtractTest.getFeature(ins,hEngine, "zl1.jpg"); FaceFeature feature2 = FeatureExtractTest.getFeature(ins,hEngine, "zl3.jpg");
FloatByReference confidenceLevel = new FloatByReference();
ins.ASFFaceFeatureCompare(hEngine, feature1, feature2, confidenceLevel);
System.out.println(confidenceLevel.getValue());
执行后,获得两张图片的人脸相似度值为
0.9412362
一般只要相似度超过0.8,就可以认为是一个人。这两张照片中人脸的相似度高达0.94,应该确定是一个人!!!!
java 人脸比对_java ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对相关推荐
- Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析
版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuidegithub.com 一.基础 什么是线程和进程? 何 ...
- java 基础知识巩固_Java基础巩固——《Java核心技术基础·卷一:基础知识》
阅读记录追踪:前言部分 阅读前先看:简介.目录和勘误! Java编程语言是一种多用途.并发的.基于类的.面向对象的编程语言:编译时通常包括将持续转化成机器无关的字节码表示.运行时活动包括加载和链接执行 ...
- java date sql和_Java.util.date 与 java.sql.date区别和转换
1.将java.util.Date转换为java.sql.Date java.sql.Date sd; java.util.Date ud; //initialize the ud such as u ...
- java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始
Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...
- java打印线程堆栈_Java问题定位之Java线程堆栈分析
采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...
- java环境陪孩子_Java启蒙之路-Java开发环境搭建与第一个Java程序
Java开发环境搭建 "工欲善其事,必先利其器",从前面的章节我们了解到,Java程序的运行过程首先编写Java程序,然后再对Java源文件编译,借助JVM运行程序.现在问题来了, ...
- java字节码转换_Java源程序如何变成Java字节码?
谢邀,题主的问题主要涉及到编译和反编译相关的知识,简单帮你回答一下. 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Program ...
- java去掉mongodb日志_JAVA开发 Mongodb3.0以上 去掉控制台DEBUG信息
今天升级到了Mongodb3.4 ,发现一旦运行程序,eclipse的控制台中不断的跳出,类似于下面的信息. 11:01:15.406 [pool-1-thread-1] DEBUG org.mong ...
- java main 参数传递参数_Java千问:Java语言如何给main方法传递参数?
大家都知道,Java语言运行程序的入口方法叫做main,这个方法有一个参数,这就表示说,我们要运行主方法,就必须给main方法传递一个参数.但是,大家似乎对这个参数向来都是视而不见,从来都没给主方法传 ...
最新文章
- php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面
- 通过挂载系统光盘搭建本地yum仓库的方法
- 常见笔顺错误的字_最全汉字书写笔顺规则
- 3C趋势价值对云计算发展的驱动作用
- java中兴参与实参相同_中兴通讯_传输SDH试题(含答案)
- VB如何实现Undo(撤消)功能
- 微观经济学 —— 公用品悲剧(tragedy of commons)
- mac m1 nvm 安装node版本失败
- 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
- 相机参数设置程序_摄影:相机通用的参数设置,10个方面带你学会使用相机拍照...
- Python max函数中key的用法
- php codesniffer 安装,Centos6.6安装PHP_CodeSniffer
- “死神”百草枯:每年超万人中毒 没有解药
- 计算机安全模式无法启动,我的电脑安全模式可以进去,为什么不能正常起动呢?...
- Java解压rar5压缩文件
- 学生信息管理系统中系统登录问题
- GANs:生成对抗网络系列及应用
- XENOGEARS,延续万年的的永恒之爱(引)
- C语言指针之二malloc的用法及详解
- 123.买卖股票时机3_前后缀和