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使用、人脸识别-抽取人脸特征并做比对相关推荐

  1. Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析

    版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuide​github.com 一.基础 什么是线程和进程? 何 ...

  2. java 基础知识巩固_Java基础巩固——《Java核心技术基础·卷一:基础知识》

    阅读记录追踪:前言部分 阅读前先看:简介.目录和勘误! Java编程语言是一种多用途.并发的.基于类的.面向对象的编程语言:编译时通常包括将持续转化成机器无关的字节码表示.运行时活动包括加载和链接执行 ...

  3. 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 ...

  4. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始

    Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...

  5. java打印线程堆栈_Java问题定位之Java线程堆栈分析

    采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...

  6. java环境陪孩子_Java启蒙之路-Java开发环境搭建与第一个Java程序

    Java开发环境搭建 "工欲善其事,必先利其器",从前面的章节我们了解到,Java程序的运行过程首先编写Java程序,然后再对Java源文件编译,借助JVM运行程序.现在问题来了, ...

  7. java字节码转换_Java源程序如何变成Java字节码?

    谢邀,题主的问题主要涉及到编译和反编译相关的知识,简单帮你回答一下. 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Program ...

  8. java去掉mongodb日志_JAVA开发 Mongodb3.0以上 去掉控制台DEBUG信息

    今天升级到了Mongodb3.4 ,发现一旦运行程序,eclipse的控制台中不断的跳出,类似于下面的信息. 11:01:15.406 [pool-1-thread-1] DEBUG org.mong ...

  9. java main 参数传递参数_Java千问:Java语言如何给main方法传递参数?

    大家都知道,Java语言运行程序的入口方法叫做main,这个方法有一个参数,这就表示说,我们要运行主方法,就必须给main方法传递一个参数.但是,大家似乎对这个参数向来都是视而不见,从来都没给主方法传 ...

最新文章

  1. php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面
  2. 通过挂载系统光盘搭建本地yum仓库的方法
  3. 常见笔顺错误的字_最全汉字书写笔顺规则
  4. 3C趋势价值对云计算发展的驱动作用
  5. java中兴参与实参相同_中兴通讯_传输SDH试题(含答案)
  6. VB如何实现Undo(撤消)功能
  7. 微观经济学 —— 公用品悲剧(tragedy of commons)
  8. mac m1 nvm 安装node版本失败
  9. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
  10. 相机参数设置程序_摄影:相机通用的参数设置,10个方面带你学会使用相机拍照...
  11. Python max函数中key的用法
  12. php codesniffer 安装,Centos6.6安装PHP_CodeSniffer
  13. “死神”百草枯:每年超万人中毒 没有解药
  14. 计算机安全模式无法启动,我的电脑安全模式可以进去,为什么不能正常起动呢?...
  15. Java解压rar5压缩文件
  16. 学生信息管理系统中系统登录问题
  17. GANs:生成对抗网络系列及应用
  18. XENOGEARS,延续万年的的永恒之爱(引)
  19. C语言指针之二malloc的用法及详解
  20. 123.买卖股票时机3_前后缀和

热门文章

  1. 10进制数转换为16位二进制数
  2. BZOJ4424 Cf19E Fairy(codeforces 19E/洛谷CF19E)
  3. PyQt5绘图pyqtgraph多条折线图
  4. 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
  5. 0 .AD复制粘贴、对齐操作
  6. 典型的学生思维有哪些
  7. Cent0S7设置静态IP的多种方法
  8. C语言-常用数学函数
  9. CTGU-2023春-MySQL数据库实验4_2-视图45
  10. docker 安装后无权限问题