人脸框抠图如何实现

  

最近在尝试做一个人脸识别项目,在对比几款主流人脸识别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 ();      

  人脸框抠图如何实现”>
  <br>
  <img src=      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(),矩阵,真实);      

//原图   位图源;//人脸框   矩形faceRect;//调整人脸框   矩形newRect=new矩形(faceRect);//确保人脸框在图像内   如果(newRect。左& lt;0) {   newRect。左=0;   }   如果(newRect。顶级& lt;0) {   newRect。顶级=0;   }   如果(newRect。正确的在source.getWidth ()) {   newRect。正确的=source.getWidth ();   }   如果(newRect。底在source.getHeight ()) {   newRect。底=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。插图(-offsetX -offsetY);//创建图,假设需要顺时针旋转90°   矩阵矩阵=new矩阵();   matrix.postRotate (90);   位图。newRect createBitmap(源。离开了,newRect。,newRect.width (),   newRect.height(),矩阵,真实);   

人脸框抠图如何实现