资讯专栏INFORMATION COLUMN

Android 裁剪人脸

赵连江 / 3084人阅读

摘要:人脸裁剪类构造位图生成的参数,必须为。类名分配人脸数组空间构造实例并解析人脸得到人脸中心点和眼间距离参数,并对每个人脸进行画框判断左边是否出界判断右边是否出界判断上边是否出界判断下边是否出界这里可以自行调整裁剪宽高

人脸裁剪类
public final class FaceCj {
    private static BitmapFactory.Options BitmapFactoryOptionsbfo;
    private static ByteArrayOutputStream out;
    private static byte[] data;
    private static FaceDetector.Face[] myFace;
    private static FaceDetector myFaceDetect;
    private static int tx = 0;
    private static int ty = 0;
    private static int bx = 0;
    private static int by = 0;
    private static int width = 0;
    private static int height = 0;
    private static float wuchax = 0;
    private static float wuchay = 0;
    private static FaceDetector.Face face;
    private static PointF myMidPoint;
    private static float myEyesDistance;
    private static List facePaths;
    private static String facePath;
    public static Bitmap cutFace(Bitmap bitmap, Context context) {
        facePaths = null;
        BitmapFactoryOptionsbfo = new BitmapFactory.Options();
        BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; // 构造位图生成的参数,必须为565。类名+enum
        out = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);
        data = out.toByteArray();
        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,
                BitmapFactoryOptionsbfo);
        try {
            out.flush();
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        width = bitmap.getWidth();
        height = bitmap.getHeight();
        myFace = new FaceDetector.Face[5]; // 分配人脸数组空间
        myFaceDetect = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), 5);
        int numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace);
        if (numberOfFaceDetected <= 0) {// FaceDetector构造实例并解析人脸
            bitmap.recycle();
            return null;
        }
        facePaths = new ArrayList();
        for (int i = 0; i < numberOfFaceDetected; i++) {
            face = myFace[i];
            myMidPoint = new PointF();
            face.getMidPoint(myMidPoint);
            myEyesDistance = face.eyesDistance();   //得到人脸中心点和眼间距离参数,并对每个人脸进行画框
            wuchax = myEyesDistance / 2 + myEyesDistance;
            wuchay = myEyesDistance * 2 / 3 + myEyesDistance;

            if (myMidPoint.x - wuchax < 0) {//判断左边是否出界
                tx = 0;
            } else {
                tx = (int) (myMidPoint.x - wuchax);
            }
            if (myMidPoint.x + wuchax > width) {//判断右边是否出界
                bx = width;
            } else {
                bx = (int) (myMidPoint.x + wuchax);
            }
            if (myMidPoint.y - wuchay < 0) {//判断上边是否出界
                ty = 0;
            } else {
                ty = (int) (myMidPoint.y - wuchay);
            }
            if (myMidPoint.y + wuchay > height) {//判断下边是否出界
                by = height;
            } else {
                by = (int) (myMidPoint.y + wuchay);
            }

            try {
                return Bitmap.createBitmap(bitmap, tx, ty, bx - tx, by - ty);//这里可以自行调整裁剪宽高
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        bitmap.recycle();
        return bitmap;
    }

}

 

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2870.html

相关文章

  • 【名额有限】云开发AI拓展能力等你来体验!

    摘要:一键部署后端能力首先需要开通云开发的人脸特征分析与检测扩展能力,并完成授权。云开发与云开发和本没有特别大的关联,使用云开发可以化调用腾讯云的能力,然鹅来自官方的云开发扩展能力解决方案却让这两者发生了奇妙的化学反应。 这次来了个超厉害的新能力!人脸智能打马赛克、人脸智能裁剪……各种操作,都能一步到位!迫不及待想体验,戳链接:https://wj.qq.com/s2/3986990/......

    Simon 评论0 收藏0
  • 今年最新的30个Android库,你了解吗?

    摘要:本文就向大家介绍今年最新的深受开发者喜爱的个库。目前提供的功能有和三个位置的吸附指定要分屏的数量,支持水平和垂直分屏,滚动时的回调。只能包含一个子布局,例如,,,等。项目的简介写得很好,易于理解。 Android开发技术越来越成熟,Android开发工具当然也层出叠现。本文就向大家介绍今年最新的深受开发者喜爱的30个Android库。希望对你的Android开发工作能起到助力。 1.M...

    KevinYan 评论0 收藏0
  • 厉害了,利用深度学习开发老板探测器

    摘要:整个工程中应用了深度学习框架来建立识别人脸的神经网络,和一个网络摄像头用来捕捉老板的人脸。所以,我用和编写了一段裁剪人脸图像的脚本,代码在这里下载偷拍到的人脸图像比我之前设想的更清楚识别人脸图像接下来,要用机器学习教会电脑识别老板的脸。 深度学习如果上班的时候想放松一下,或者直说想偷偷懒,看点和工作无关的网页,这时候万一老板突然出现在背后,会不会感到很难堪呢?有的浏览器设置了boss按键,手...

    YacaToy 评论0 收藏0
  • 通用图床服务架构解析(百万级回源/天)

    摘要:转发通过,将请求通过负载均衡,均衡给后端处理的服务。图床同时也支持同步上传回调通知的方式,将图片上传结果反馈给业务方。 Hulk 图床是支持 360 公司绝大部分业务的图片服务,支持多种图片处理功能,如:裁剪、压缩、滤镜、pHash 计算、人脸识别、格式转换、gif 首帧提取……等等,支持的业务线包括:搜索、图搜、新闻、信息流、广告……等等,每天 CDN 回源图床后端 150+ 亿 P...

    XFLY 评论0 收藏0
  • 通用图床服务架构解析(百万级回源/天)

    摘要:转发通过,将请求通过负载均衡,均衡给后端处理的服务。图床同时也支持同步上传回调通知的方式,将图片上传结果反馈给业务方。 Hulk 图床是支持 360 公司绝大部分业务的图片服务,支持多种图片处理功能,如:裁剪、压缩、滤镜、pHash 计算、人脸识别、格式转换、gif 首帧提取……等等,支持的业务线包括:搜索、图搜、新闻、信息流、广告……等等,每天 CDN 回源图床后端 150+ 亿 P...

    Karrdy 评论0 收藏0

发表评论

0条评论

赵连江

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<