在Android开发中,大部分应用都是以用户为第一位,用户都有自己的个人中心,用来展示自己的信息,头像无疑是展示自己最直观的方式,随着各种政策的出台,实名认证,真人头像变得尤为重要,如果要求上传真人头像,那就需要后台做校验,判断是不是真人,如果真人审核,那工作量是非人力所能为的,这时候就用到各种识别图片的算法,来做这些工作了,这里主要介绍Android里面谷歌开放的图片脸部识别的API。

上代码:

依赖:

dependencies {
compile 'com.google.android.gms:play-services-vision:8.4.0'
}
import com.google.android.gms.vision.Frame;
import com.google.android.gms.vision.face.Face;
import com.google.android.gms.vision.face.FaceDetector; private Bitmap getFaceBitmap(Bitmap bmp, Context context) { FaceDetector faceDetector = new
FaceDetector.Builder(context).setTrackingEnabled(false)
.build();
if (!faceDetector.isOperational()) {
System.out.println("Face detector not working");
return null;
}
Bitmap faceBitmap = null; Frame frame = new Frame.Builder().setBitmap(bmp).build(); SparseArray<Face> faces = faceDetector.detect(frame);
Log.e("RoungImage", "00100bmp.getWidth" + bmp.getWidth());
Log.e("RoungImage", "00100bmp.getHeight" + bmp.getHeight());
Log.e("RoungImage", "006faces:" + faces.size());
for (int i = 0; i < faces.size(); i++) {
Face thisFace = faces.valueAt(i); int faceWidth = (int) thisFace.getWidth();
Log.e("RoungImage", "007faceWidth:" + faceWidth);
int faceHeight = (int) thisFace.getHeight();
Log.e("RoungImage", "008faceHeight:" + faceHeight);
int x1 = (int) thisFace.getPosition().x;
Log.e("RoungImage", "009x1:" + x1);
int y1 = (int) thisFace.getPosition().y;
Log.e("RoungImage", "0010y1" + y1); faceBitmap = Bitmap.createBitmap(bmp,
x1 > (faceWidth / 2) ? (x1 - faceWidth / 2) : 0,
y1 > (faceHeight / 2) ? (y1 - faceHeight / 2) : 0,
1.5 * faceWidth < bmp.getWidth() ? (int) (1.5 * faceWidth) : bmp.getWidth(),
1.5 * faceHeight < bmp.getWidth() ? (int) (1.5 * faceHeight) : bmp.getHeight()); }
if (faceBitmap != null) return faceBitmap;
return bmp;
}

  

这里测试两张图片,识别图片中的脸部信息,图片如下:

识别出各种坐标以后,大致是这样的:

精确度还是很不错的。

这里只是打印一下坐标,实际还有很多其他的API,eg:眼睛是否睁开,脸部是否微笑,微笑的概率,and so on...

Android识别图片中脸部信息的更多相关文章

  1. python识别图片中的信息

    好好学习的第一步 一心一意的干好一件事儿,问自己 我做什么 我怎么做 做的结果是啥 例子1 问题 回答 我做什么: 识别图片上的信息 我怎么做: 百度+谷歌 结果是啥: 完成识别 1 安装PIL pi ...

  2. 超详细的编码实战,让你的springboot应用识别图片中的行人、汽车、狗子、喵星人(JavaCV+YOLO4)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 如何用ABBYY FineReader识别图片中的文本

    ABBYY FineReader 12是一款OCR光学字符识别软件,能够快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索的文本,让电脑处理更具效率,摆脱从前的烦恼,告别耗时费力 ...

  4. Android 获取图片exif信息

    使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  5. android之读取联系人信息

    联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...

  6. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序     在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity ...

  7. Android端生成META-INF信息文件的Gradle插件 RapidMetaInfPlugin

    来源博客:Wang Jie's Blog 本文链接:<http://blog.wangjiegulu.com/2018/02/05/Android端生成META-INF信息文件的Gradle插件 ...

  8. Python通过百度Ai识别图片中的文字

    版本:python3.7 工作中有需要识别图片中的汗字,查看了半天大神们的博客,但没找到完全可以用的源码,经过自己的实践,以下源码可以实现: 创建应用 首先你需要登录百度AI,选择文字识别,创建一个应 ...

  9. 使用quaggaJS识别图片中的条形码

    quaggaJS是一个纯JS的插件,用于识别图片中的条形码,很方便.一般用于移动端拍照识别,也可以在网页端上传图片识别. github下载地址 首先要指定正确格式的条形码,常见的条形码编码类型有EAN ...

随机推荐

  1. NYOJ 45 棋盘覆盖

    棋盘覆盖 水题,题不难,找公式难 import java.math.BigInteger; import java.util.Scanner; public class Main { public s ...

  2. 关于很简单的设计模式,ui-dao-database,以及JavaBean和util工具类

    关于很简单的设计模式,ui-dao-database,以及JavaBean和util工具类 24. 三 / J2EE / 没有评论   简单的j2ee设计模式, UI通过DAO层访问数据库或者xml文 ...

  3. 学习PrintWriter类 .

    java.io包 1)首先先知道它的八种构造方法,但怎么记住这八种呢?我们都知道PrintWriter是一种过滤流,也叫处理流.也就是能对字节流和字符流进行处理,所以它会有: PrintWriter( ...

  4. SSE2 Intrinsics各函数介绍[转]

    SIMD相关头文件包括: //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#i ...

  5. Log4net 可直接使用的配置

    config配置 <xml version="1.0"> <configuration> <configSections> <!--配置一 ...

  6. 挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务

    挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务#36氪开放日# 其他 JasonZheng • 2012-04-07 15:14 来自36氪开放 ...

  7. grok 正则也支持常规正则

    2016-08-29 17:40:01,19 INFO com.zjzc.common.utils.HttpUtil - 请求接口: https://www.zjcap.cn/pay/interfac ...

  8. 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解, 去^@,^M

    今天产品部同事报告了一个BUG,经过调试发现,由于用户输入的字符串中,包含字符0x1E, 也就是”记录分隔符”(Record Separator, Notepad++ 显示为[RS]),导致JavaS ...

  9. js查找和过滤

    通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身 ...

  10. PHP MySQL Delete From 之 Delete

    删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_name WHERE column_name = some_value 注释:SQ ...