Android识别图片中脸部信息

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

在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...

目录
相关文章
|
1月前
|
编解码 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)1
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
56 1
|
14天前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
33 0
|
1月前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
31 2
|
1天前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
6 1
|
15天前
|
测试技术 Android开发
Android App获取不到pkgInfo信息问题原因
Android App获取不到pkgInfo信息问题原因
17 0
|
15天前
|
Java Android开发
Android Mediatek 禁用 USB 权限请求和声音提示 & 解决USB HID设备不识别问题(附带USB调试过程)
Android Mediatek 禁用 USB 权限请求和声音提示 & 解决USB HID设备不识别问题(附带USB调试过程)
12 0
|
15天前
|
存储 缓存 安全
Rockchip系列之RK3568 Android设备固件和分区信息
Rockchip系列之RK3568 Android设备固件和分区信息
20 0
|
1月前
|
Android开发
Android保存图片到相册(适配android 10以下及以上)
Android保存图片到相册(适配android 10以下及以上)
25 1
|
3月前
|
数据库 Android开发 数据库管理
【Android】使用android studio查看内置数据库信息
【Android】使用android studio查看内置数据库信息
83 0
|
4月前
|
开发工具 Android开发
Android获取SDK的版本信息
Android获取SDK的版本信息
41 0