最近在尝试做一个人脸识别项目,在对比几款主流人脸识别SDK后,采用了虹软的Arcface SDK,因为它提供了免费版本,并且可以离线使用,接入难度也比较低。项目中有一个需求就是显示检测到的人脸,但是如何从一张图片中抠取合适大小的人脸呢?本文将从以下步骤来介绍如何实现:

1. 如何获得人脸框

2. 如何根据人脸框裁剪

3. 如何进行结果图旋转

4. 应用场景举例

1. 如何获得人脸框

首先我们来看一下虹软Android ArcFace SDK用于人脸检测的detectFaces函数以及人脸数据类FaceInfo:

detectFaces函数:

参数

类型

说明

data

byte[]

图像数据的内存

width

int

图像的宽

height

int

图像的高

format

int

图像的格式

faceInfoList

List

人脸检测结果列表

FaceInfo定义:

参数

类型

说明

rect

Rect

人脸在图像中的坐标

orient

int

人脸的朝向

faceId

int

人脸id,用于标识人脸

人脸检测函数介绍的文章有很多,这里就不多做介绍了。FaceInfo中的rect就是我们用来抠取人脸的重要参数,下图就是根据它画出的人脸框。

2. 如何根据人脸框裁剪

以Android平台为例,Bitmap类提供了函数createBitmap(Bitmap source, int x, int y, int width, int height)

参数

类型

说明

source

Bitmap

原始图像

x

int

人脸框左上角y坐标

y

int

人脸框左上角y坐标

width

int

新图像的宽

height

int

新图像的高

使用这个函数就可以抠取任意区域内图像内容:

//原图 Bitmap source; //人脸框 Rect faceRect; //创建Bitmap Bitmap.createBitmap(source,faceRect.left,faceRect.top,faceRect.width(),faceRect.height();

2. 如何根据人脸框裁剪

以Android平台为例,Bitmap类提供了函数createBitmap(Bitmap source, int x, int y, int width, int height)

参数

类型

说明

source

Bitmap

原始图像

x

int

人脸框左上角y坐标

y

int

人脸框左上角y坐标

width

int

新图像的宽

height

int

新图像的高

使用这个函数就可以抠取任意区域内图像内容:

//原图 Bitmap source; //人脸框 Rect faceRect; //创建Bitmap Bitmap.createBitmap(source,faceRect.left,faceRect.top,faceRect.width(),faceRect.height();

3. 如何进行结果图旋转

FaceInfo中orient代表这个人脸在图像中的朝向,当其不为0°的时候,需要根据实际情况进行旋转。

旋转角度

类型

说明

ASF_OC_0

int

ASF_OC_90

int

逆时针90°

ASF_OC_180

int

180°

ASF_OC_270

int

顺时针90°

以下是旋转代码

//原图 Bitmap source; //人脸框 Rect faceRect; //创建Bitmap,假设需要顺时针旋转90° Matrix matrix = new Matrix();

matrix.postRotate(90);

Bitmap.createBitmap(source, faceRect.left, faceRect.top, faceRect.width(),

faceRect.height(), matrix, true);

4. 应用场景举例

例如门禁场景下,需要显示人脸(抠图)或者上传人脸图片到服务端。如果上传完整的图像,则会占用大量的存储空间以及网络资源,所以上传抠取的人脸图片是比较合适的,但是根据检测所得的人脸框抠取的人脸是不完整的,所以需要对人脸框做一些后期处理,最简单的方案就是宽高分别向外扩大其1/2长度。示例代码如下:

//原图 Bitmap source; //人脸框 Rect faceRect; //调整人脸框 Rect newRect = new Rect(faceRect); //确保人脸框在图像内 if (newRect.left < 0) {

newRect.left = 0;

} if (newRect.top < 0) {

newRect.top = 0;

} if (newRect.right > source.getWidth()) {

newRect.right =

source.getWidth();

} if (newRect.bottom > source.getHeight()) {

newRect.bottom =

source.getHeight();

} // int offsetX = Math.min(Math.min(faceRect.width()/2,newRect.left),

source.getWidth() - newRect.right); int offsetY = Math.min(Math.min(faceRect.height()/2,newRect.top),

source.getHeight() - newRect.bottom);

newRect.inset(-offsetX, -offsetY); //创建Bitmap,假设需要顺时针旋转90° Matrix matrix = new Matrix();

matrix.postRotate(90);

Bitmap.createBitmap(source, newRect.left, newRect.top, newRect.width(),

newRect.height(), matrix, true);

温馨提示:

虹软人脸识别Android Demo中提供了很多人脸识别相关功能,如:画人脸框适配方案;异步人脸特征提取;异步人脸特征比对等等,有需要可以在下面链接下载:

Android Demo可在下载

android人脸抠图,人脸框抠图如何实现相关推荐

  1. Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...

    有一两个月没有更新博客了,最近一直在忙人脸识别的项目,先将项目中更改虹软人脸框的方法抽取出来,希望对大家有所帮助. 尊重原创,转载请注明出处: http://blog..net/qq137722697 ...

  2. android opencv NDK人脸识别和对比

    } env->ReleaseStringUTFChars(name, filePath); return 0; } 人脸对比 /** *人脸对比 */ extern "C" ...

  3. Android中的人脸检测入门

    原文作者 : Paul Trebilcox-Ruiz 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转载权,未经允许,不得转载! 译者 : Langl ...

  4. 人脸识别 android p,虹软人脸识别 - faceId及IR活体检测的更新介绍

    虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...

  5. Android开发简单人脸签到系统开发

    需求分析 第一步我对该实验做了一个完整性的需求分析: 我们需要做到以下几点: (1)学生信息的管理,对学生的信息的添加,删除,编译修改: (2)基于每个学生的人脸上传,并识别该图片是否是一个人脸图片: ...

  6. android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)

    Android静态图片人脸识别的完整demo(附完整源码) 来源:互联网 作者:佚名 时间:2015-03-24 20:07 本文介绍了android静态识别人脸并进行标记人眼位置及人脸框的完整dem ...

  7. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  8. Android NDK开发——人脸检测与静默活体检测

    前言 1.开发环境是win10,IDE是Android studio 北极狐,用到的库有NCNN,OpenCV. 2.NCNN库可以用官方编译好的releases库,也可以按官方文档自己编译. 3.O ...

  9. 基于Android系统的人脸识别签到软件

    项目名称:   基于Android系统的人脸识别签到软件 目  录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...

  10. CoLab - 图像人脸检测_框出人脸

    CoLab - 图像人脸检测_框出人脸 此文章教你如何使用谷歌Colaboratory实现静止图片的人脸检测和划框框. CoLab最大好处:GPU计算速度快! 注: · 国内登陆Colab需使用到梯梯 ...

最新文章

  1. tomcat与iis公用80端口(已经发布.net项目现在开发Java项目时tomcat在eclipse中localhost:8080打不开问题)...
  2. 滚动条的出现导致居中的元素会晃动
  3. 预备作业02 20162316刘诚昊
  4. [九度][何海涛] 栈的压入压出
  5. 初识openstack
  6. Spark2.3.1在Idea控制台调整日志等级
  7. 操作符!与操作符!!的区别
  8. 用Barcode生成条形码图片
  9. Co-Fusion: Real-time Segmentation, Tracking and Fusion of Multiple Objects
  10. 浅谈语音识别技术的发展趋势与应用前景 - 全文
  11. php网站怎么看用户名,首页登录后怎么在首页显示用户名以及隐藏登录框?
  12. matlab循环取出矩阵的某一行并标示上A1 A2 A3
  13. 1.WebServices 简介
  14. Java 8 你需要掌握的新特性
  15. linux怎样重启命令,Linux重启命令介绍
  16. 反编译工具ILSpy下载
  17. 【QT】入门基础教程Qt5
  18. python打印日历_Python怎么打印日历?
  19. 各地大厂名单(一二线城市知名公司)
  20. ROS学习笔记-创建订阅cmd_vel话题节点

热门文章

  1. 解决网易云课堂不能进入的问题
  2. 实用的视频去水印方法
  3. 5G成鸡肋?运营商可能冷处理,中国移动则加快建设4G的FDD900
  4. 程序员可接私活的10个平台和一些建议,别掉坑里!
  5. ECharts南丁格尔玫瑰实现及部分配置解析
  6. matlab 绘图 模板,【科研绘图】MATLAB可视化代码模板
  7. JavaScript应用程序开发(游娱平台)
  8. 如何在Edge中添加兼容性站点?
  9. 郁闷,俺被S3C2416 狠狠的暗算了一把。
  10. 解决网站80端口被封,本地公网IP加速25mb/s网站访问速度