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多媒体-人脸识别

时间: 2024-08-03 08:30:23

Android多媒体-人脸识别的相关文章

Android 实现人脸识别教程[运用虹软人脸识别SDK]

基于虹软人脸识别引擎,在Android平台上实现人脸识别功能,即使在离线的情况下依旧运行,不被人采集个人照片的感觉,还是爽爽的.经过整个测试过来,虹软的人脸识别还是很强大的,人脸检测可以控制在20ms之内,人脸识别大概在200ms左右.今天就来分享一下开发经验 项目的目标 我们需要实现一个人脸识别功能.简单来说,就是机的后置摄像头,识别摄像头中实时拍到的人脸信息,如果人库注册过,则显示识别后的人脸信息,如登记的名字:如果不在,提示未注册. 这个功能具有多个应用场景,比如,火车站或者打卡和门禁系统

Android中 人脸识别FaceDetector简单实例

Android SDK从1.0版本中(API level 1)就已经集成了简单的人脸识别功能,通过调用FaceDetector 我们可以在Android平台上实现Bitmap多人脸识别(一张图中可以有多个人脸).它查找人脸的原理是:找眼睛.它返回的人脸数据face,通过调用public float eyesDistance (),public void getMidPoint (PointF point),我们可以得到探测到的两眼间距,以及两眼中心点位置(MidPoint).public flo

Android 虹软人脸识别SDK-人脸对比

准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY: https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/ucenter/resource/openPlatform/application 实现 : 激活引擎 : /** * 激活引擎 * * @param view */ public void activeEngine(final View view) { if (!checkPe

Android 人脸识别源码APP后台接口设计

Android softboy人脸识别源码APP后台接口设计,这个是最近开发的一个人脸识别人脸系统框架,系统内容比较复杂.这里简化了主要的接口与数据,然后结合 softboy人脸识别app,就可以体验极速的人脸识别考勤体验. 这个离线app支持上传考勤记录,下载人脸数据进行离线人脸识别和活体检测,有限规避相片打卡视频欺骗等. 这个APP的下载体验地址https://pan.baidu.com/s/1i5oXoJ7 接下来看一下接口功能设计,还原提意见哦.慢慢的福利,正在做的朋友可以直接下载参考.

人脸识别活体识别源码APP后台接口设计

Android softboy人脸识别源码APP后台接口设计,这个是最近开发的一个人脸识别人脸系统框架,系统内容比较复杂.这里简化了主要的接口与数据,然后结合 softboy人脸识别app,就可以体验极速的人脸识别考勤体验. 这个离线app支持上传考勤记录,下载人脸数据进行离线人脸识别和活体检测,有限规避相片打卡视频欺骗等. 这个APP的下载体验地址https://pan.baidu.com/s/1i5oXoJ7 接下来看一下接口功能设计,还原提意见哦.慢慢的福利,正在做的朋友可以直接下载参考.

结合活体检测,人脸识别在Android、IOS、服务器中的应用

随着深度学习方法的应用,人工智能的发展,人脸识别技术的识别率已经得到质的提升,通过反复开发试验,目前我司的人脸识别技术率已经达到99%.人脸识别技术与其他生物特征识别技术相吃比,在实际应用中具有天然独到的优势:通过摄像头直接获取,在非接触的方式完成识别过程.通过人脸识别与证件识别的比对,目前我司的人脸识别技术已应用在金融.教育.景区.旅运.社保等领域. 人脸识别技术简介 人脸识别技术主要分为两部分: 第一部为前端人脸活体检测技术,主要支持android.ios平台,在前端通过眨眼.张嘴.摇头.点

Android 使用FACE++架构包实现人脸识别

今天给大家带来一个通过使用Face++来实现人脸识别的功能. 我们先去这个Face++官网看看:http://www.faceplusplus.com.cn 我们点开案例可以看到众多我们熟知的软件都是使用的这个公司所提供的SDK. 然后我们点击开发者中心中的开发工具与sdk下载我们所需要的sdk. 之后再点击我的应用中的创建应用之后他会给我们两个密钥. 要保存这两个值我们在程序中要用到它们 我今天实现的是实现面部捕捉并且识别性别和年龄来看一下效果图    闲话不多说我们来看看实现 1.工具类Co

Android静态图片人脸识别的完整demo(附完整源码)

Demo功能:利用android自带的人脸识别进行识别,标记出眼睛和人脸位置.点击按键后进行人脸识别,完毕后显示到imageview上. 第一部分:布局文件activity_main.xml [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co

android人脸识别——HowOld测测你的年龄和性别

引言 这段时间微软的HowOldRobot 测试年龄的网站非常火,访问量已经爆棚了!不过,这个测试也有很多比较坑爹的地方.比如:..... 再比如... 好了 言归正传!今天我们就来看看android中怎么利用人脸识别功能来实现我们自己的HowOld APP (PS:本人也是借鉴了网上大神的视频和资料 然后自己加以改进) Face++ API 想要使用人脸识别功能,我们需要调用Face++中的一些API来完成工作.Face++的官网地址是:http://www.faceplusplus.com.