Android 裁剪人脸
人脸裁剪类
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<String> 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<String>();
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;
} }
Android 裁剪人脸的更多相关文章
- Android之人脸识别
**前言** 人工智能时代快速来临,其中人脸识别是当前比较热门的技术,在国内也越来越多的运用,例如刷脸打卡.刷脸App,身份识别,人脸门禁等等.当前的人脸识别技术分为WEBAPI和SDK调用两种法方式 ...
- Android多媒体-人脸识别
1. 相关背景 Google 于2006年8月收购Neven Vision 公司 (该公司拥有 10 多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并不是常快应用到免费的 Pic ...
- Android+openCV人脸检测2(静态图片)
前几篇文章中有提到对openCV环境配置,这里再重新梳理导入和使用openCV进行简单的人脸检测(包括使用级联分类器) 一 首先导入openCVLibrary320 二 设置gradle的sdk版本号 ...
- Android虹软人脸识别sdk使用工具类
public class FaceUtil { private static final String TAG = FaceUtil.class.getSimpleName(); private st ...
- 基于虹软的Android的人脸识别SDK使用测试
现在有很多人脸识别的技术我们可以拿来使用:但是个人认为还是离线端的SDK比较实用:所以个人一直在搜集人脸识别的SDK:原来使用开源的OpenCV:最近有个好友推荐虹软的ArcFace, 闲来无事就下来 ...
- Android集成人脸识别demo分享
本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...
- Android—基于OpenCV+Android实现人脸检测
导读 OpenCV 是一个开源的跨平台计算机视觉库, 采C++语言编写,实现了图像处理和计算机视觉方面的很多通用算法,同时也提供对Python,Java,Android等的支持,这里利用Android ...
- Android 虹软人脸识别SDK-人脸对比
准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY: https://ai.arcsoft.com.cn/ucenter/resource/build/in ...
- Android裁剪固定大小头像的功能
转载自: http://www.eoeandroid.com/thread-497277-1-1.html 效果很好,特意转载过来记录一下,加深一下印象. 效果就是 :中间的方框不动,可以拖动图片,选 ...
随机推荐
- [Swift]扩展UIColor:实现十六进制颜色字符串与UIColor之间的相互转换
对[UIColor]进行扩展 import UIKit extension UIColor { // Hex String -> UIColor convenience init(hexStri ...
- spring boot -thymeleaf-日期转化
<span th:text="${#dates.format(date)}" ></span><span th:text="${#dates ...
- (转)linux中nmcli命令的使用及网络配置
原文:https://blog.51cto.com/groot/1847482 http://www.178linux.com/44076----CentOS7中nmcli网络管理及使用详解 http ...
- windows下更新node环境
https://github.com/Kenshin/gnvm 下载gnvm.exe程序 使用where node命令查看node所在目录,并将下载好的gnvm.exe程序复制到目录中 输入gnvm ...
- SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
It's like JSON.but fast and small. MessagePack is an efficient binary serialization format. It lets ...
- Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)
技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...
- Docker上运行MySQL服务
1.搜索MySQL镜像 $ docker search mysql INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.i ...
- 从逻辑思维中学习CSS,从宽高说起
从宽高说起 从宽高说起,我们知道一个物体的大小是由长.宽.高三个方向的尺寸决定的,但是你想啊电脑显示器是一个平面的,而不是3维,另因网页大部分情况下只需要使用到2维,所以为了简单在CSS中只有宽和高的 ...
- lucene简单搜索demo
方法类 package com.wxf.Test; import com.wxf.pojo.Goods; import org.apache.lucene.analysis.standard.Stan ...
- dfs问题总结
组合总和——给定元素不重复 需求:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candida ...