Android多媒体-人脸识别
1. 相关背景
Google 于2006年8月收购Neven Vision 公司 (该公司拥有 10 多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并不是常快应用到免费的 Picasa 相冊管理程序中,提供基于人脸识别的相片管理功能,另外还推出了一个新项目叫Goggle ,能从照片中识别世界各地的地标建筑,相同Google 也把人脸识别功能加入�到了Android 中。只是因为个人隐私等相关因素,Google Goggles好像临时屏蔽了人脸识别功能 。
2. Android 中的人脸识别技术
底层库:android/external/neven/
framework 层:frameworks/base/media/java/android/media/FaceDetector.java
Java 层接口的限制:
仅仅能接受 Bitmap 格式的数据
仅仅能识别双眼距离大于 20 像素的人脸像(当然,这个可在framework层中改动)
仅仅能检測出人脸的位置(双眼的中心点及距离)
不能对人脸进行匹配(查找指定的脸谱)
3. 人脸识别技术的应用
A. 为 Camera 加入�人脸识别的功能:使得 Camera 的取景器上能标识出人脸范围;假设硬件支持,能够对人脸进行对焦。
4. 静态图片处理代码实例:
package com.example.mydetect2; import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.media.FaceDetector; //人脸识别的关键类
import android.media.FaceDetector.Face;
import android.view.View; public class MainActivity2 extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main_activity2);
setContentView(new myView(this)); //使用自建的view来显示
Log.i("zhangcheng","MainActivity2 run here");
} private class myView extends View{
private int imageWidth, imageHeight;
private int numberOfFace = 5; //最大检測的人脸数
private FaceDetector myFaceDetect; //人脸识别类的实例
private FaceDetector.Face[] myFace; //存储多张人脸的数组变量
float myEyesDistance; //两眼之间的距离
int numberOfFaceDetected; //实际检測到的人脸数
Bitmap myBitmap; public myView(Context context){ //view类的构造函数,必须有
super(context);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; //构造位图生成的參数,必须为565。类名+enum
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.baby, BitmapFactoryOptionsbfo);
imageWidth = myBitmap.getWidth();
imageHeight = myBitmap.getHeight();
myFace = new FaceDetector.Face[numberOfFace]; //分配人脸数组空间
myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); //FaceDetector 构造实例并解析人脸
Log.i("zhangcheng","numberOfFaceDetected is " + numberOfFaceDetected);
} protected void onDraw(Canvas canvas){ //override函数,必有
canvas.drawBitmap(myBitmap, 0, 0, null); //画出位图
Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3); //设置位图上paint操作的參数 for(int i=0; i < numberOfFaceDetected; i++){
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance(); //得到人脸中心点和眼间距离參数,并对每一个人脸进行画框
canvas.drawRect( //矩形框的位置參数
(int)(myMidPoint.x - myEyesDistance),
(int)(myMidPoint.y - myEyesDistance),
(int)(myMidPoint.x + myEyesDistance),
(int)(myMidPoint.y + myEyesDistance),
myPaint);
}
}
}
}
效果例如以下:
如要注意的地方:
依据文档描写叙述,输入图片必须为Bitmap RGB565格式。
人脸的检測方法是用双眼来检測人脸的位置,也就是说无法检測到嘴、側脸等,双眼必须同一时候可见,而且眼镜会影响检測的效果。
实际上,FaceDetector检測到的并非人的全脸,而仅仅是双眼。
实际測试中,发现图片太小的话检測不到人脸,试验中使用小于100x100的图片检測不到人脸,可是因为Android内存有限,图片太大的话,会出现无法载入图片的异常。
检測到的人脸存放到FaceDetector.Face类中,该类无法再扩展。从该类能够获取到人眼的中心位置和双眼之间的详细。
Android多媒体-人脸识别的更多相关文章
- Android之人脸识别
**前言** 人工智能时代快速来临,其中人脸识别是当前比较热门的技术,在国内也越来越多的运用,例如刷脸打卡.刷脸App,身份识别,人脸门禁等等.当前的人脸识别技术分为WEBAPI和SDK调用两种法方式 ...
- 基于虹软的Android的人脸识别SDK使用测试
现在有很多人脸识别的技术我们可以拿来使用:但是个人认为还是离线端的SDK比较实用:所以个人一直在搜集人脸识别的SDK:原来使用开源的OpenCV:最近有个好友推荐虹软的ArcFace, 闲来无事就下来 ...
- Android集成人脸识别demo分享
本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...
- Android 虹软人脸识别SDK-人脸对比
准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY: https://ai.arcsoft.com.cn/ucenter/resource/build/in ...
- Android虹软人脸识别sdk使用工具类
public class FaceUtil { private static final String TAG = FaceUtil.class.getSimpleName(); private st ...
- Android 离线人脸识别 ArcFace 2.0 Demo开发分享
环境要求 1.运行环境 armeabi-v7a 2.系统要求 Android 5.0 (API Level 21)及以上 3.开发环境 Android Studio 下载地 ...
- Android人脸识别Demo竖屏YUV方向调整和图片保存
本博客包含三个常用方法,用于盛开Android版人脸识别Demo中竖屏使用时送入yuv数据,但一直无法识别的情况. 1.首先可以尝试顺时针旋转90°或270°,然后送入识别SDK. 2.旋转方向后依然 ...
- Android 使用FACE++架构包实现人脸识别
今天给大家带来一个通过使用Face++来实现人脸识别的功能. 我们先去这个Face++官网看看:http://www.faceplusplus.com.cn 我们点开案例可以看到众多我们熟知的软件都是 ...
- 虹软人脸识别ArcFace2.0 Android SDK使用教程
一.获取SDK 1.进入ArcFace2.0的申请地址 https://ai.arcsoft.com.cn/product/arcface.html 2.填写信息申请并提交 申请通过后即可下载SDK, ...
随机推荐
- 1106. Two Teams(dfs 染色)
1106 结点染色 当前结点染为黑 朋友染为白 依次染下去 这题是为二分图打基础吧 #include <iostream> #include<cstdio> #include ...
- 第二部分 overlay 架构初探
1 overlay可能支持的颜色格式/* possible overlay formats可能支持的颜色格式 */enum { OVERLAY_FORMAT_RGBA_8888 = HAL ...
- 纯干货,Spring-data-jpa详解,全方位介绍
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- 解决iframe缓存
网上能搜到很多此类的资料,但都是互相转载,不太起作用.这几天写个用到,用了不少的iframe效果.结果发现iframe有缓存的问题.网上提供了思路,即对iframe的href后添加随即get值,来逃避 ...
- @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)
mvc renderaction renderpartial 杂谈 Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- Codeforces 629C Famil Door and Brackets DP
题意:给你一个由括号组成的字符串,长度为m,现在希望获得一个长度为n(全由括号组成)的字符串,0<=n-m<=2000 这个长度为n的字符串要求有两个性质:1:就是任意前缀,左括号数量大于 ...
- C++基类和派生类之间的转换
本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...
- 浅析ado.net获取数据库元数据信息 DeriveParameters
写这个文章源于早先对ADO.Net获取数据库元数据上的认识,去年我在阅读ADO.Net Core Reference的时候曾经注意过DataSet的FillSchema的这个方法.这方面,在我之前的随 ...
- class0513(html基础加强)
内容:HTML.CSS 目标:掌握手写HTML实现一般难度的Web页面的能力(如网站注册表单),为ASP.Net学习打基础.坚持手写HTML,可视化设计只是一种自学的手段. 参考书:张孝祥<Ja ...