最近在尝试做一个人脸识别项目,在对比几款主流人脸识别SDK后,采用了虹软的Arcface SDK,因为它提供了免费版本,并且可以离线使用,接入难度也比较低。项目中有一个需求就是显示检测到的人的脸,但是如何从一张图片中抠取合适大小的人脸呢?本文将从以下步骤来介绍如何实现:
<强> 1。如何获得人脸框强>
<强> 2。如何根据人脸框裁剪强>
<强> 3。如何进行结果图旋转强>
<强> 4。应用场景举例强>
2. 如何根据人脸框裁剪
以Android平台为例,位图类提供了函数 <强> createBitmap 强>(位图源,int x, int y, int宽度,int高度)
参数 类型 说明 源 位图 原始图像 x int y坐人脸框左上角标 y int y坐人脸框左上角标 宽度 int 新图像的宽 高度 int 新图像的高使用这个函数就可以抠取任意区域内图像内容:
<前> <代码类=" lang-java ">//原图 位图源;//人脸框 矩形faceRect;//创建位图 Bitmap.createBitmap(源、faceRect.left faceRect.top faceRect.width (), faceRect.height (); 代码>3.如何进行结果图旋转
FaceInfo中东方代表这个人脸在图像中的朝向,当其不为0°的时候,需要根据实际情况进行旋转。
旋转角度 类型 说明 ASF_OC_0 int 0° ASF_OC_90 int 逆时针90° ASF_OC_180 int 180° ASF_OC_270 int 顺时针90°以下是旋转代码
<前> <代码类=" lang-java ">//原图 位图源;//人脸框 矩形faceRect;//创建图,假设需要顺时针旋转90° 矩阵矩阵=new矩阵(); matrix.postRotate (90); 位图。faceRect createBitmap(源。离开了,faceRect。,faceRect.width (), faceRect.height(),矩阵,真实); 代码>