千家信息网

人脸框抠图如何实现

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,最近在尝试做一个人脸识别项目,在对比几款主流人脸识别SDK后,采用了虹软的Arcface SDK,因为它提供了免费版本,并且可以离线使用,接入难度也比较低。项目中有一个需求就是显示检测到的人脸,但是如
千家信息网最后更新 2026年11月01日人脸框抠图如何实现

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

1. 如何获得人脸框
2. 如何根据人脸框裁剪
3. 如何进行结果图旋转
4. 应用场景举例

1. 如何获得人脸框

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

参数类型说明
databyte[]图像数据的内存
widthint图像的宽
heightint图像的高
formatint图像的格式
faceInfoListList人脸检测结果列表

FaceInfo定义:

参数类型说明
rectRect人脸在图像中的坐标
orientint人脸的朝向
faceIdint人脸id,用于标识人脸

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

2. 如何根据人脸框裁剪

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

参数类型说明
sourceBitmap原始图像
xint人脸框左上角y坐标
yint人脸框左上角y坐标
widthint新图像的宽
heightint新图像的高

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

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


3. 如何进行结果图旋转

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

旋转角度类型说明
ASF_OC_0int0°
ASF_OC_90int逆时针90°
ASF_OC_180int180°
ASF_OC_270int顺时针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可在 虹软人脸识别开放平台下载

人脸 图像 函数 检测 参数 就是 类型 原图 图片 场景 坐标 时针 结果 合适 代码 左上角 平台 数据 特征 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 上海挚品互联网科技有限公司 山东特亿宝互联网科技有限公司 互联网属科技 互联网巨头科技公司 网络科技有限互联网 美国互联网科技 互联网科技咨询 重庆科技学院互联网 甘肃拓世互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 顶级互联网科技成果有哪些 金融科技与互联网金融相同和不同 赶超互联网科技 微信多开 速维有品互联网信息科技(苏州)有限公司 国大互联网教育科技有限公司工作 河南住房之家互联网科技 互联网相关科技技术 互联网风格科技公司名称 恒生互联网科技趋势 上海卓越科技互联网 江苏根荣互联网科技 今日互联网科技 广西拼得多互联网科技有限公司 互联网之后的科技是什么 阿里互联网科技公司 呼和浩特新华互联网科技学院 银行科技岗属于互联网吗 富国互联网科技002692 山东亿川互联网科技有限责任公司
0