转载请注明作者及出处:https://www.jianshu.com/p/b41f64389c21
[25]——Android 人脸识别了解一下 (上)
在上文中我大致的介绍了官方 Demo 中人脸注册的流程,本文我们接着来看看,在完成了人脸注册之后我们该如何识别出用户的人脸特征,从而通过人脸识别获取用户信息。
人脸识别的全部流程集成在官方 Demo 的 DetecterActivity 文件中。
还是来了解几个概念
- 人脸追踪 FT
- 年龄检测 Age
- 性别检测 Gender
其中人脸追踪 FT 与人脸检测 FD 功能基本一致(甚至代码基本都是相同的),Age 引擎用于识别年龄,Gender 引擎用于识别性别。
识别流程
整体上比人脸注册还要简单,官方提供了很好的封装供我们使用,我们来看看流程。
第一步:
创建两个叠加在一起的 SurfaceView,一个用于显示摄像头的预览信息,一个用于框出摄像头预览中人脸的位置;
//覆盖在相机预览之上的一层surfaceview
mGLSurfaceView = (CameraGLSurfaceView) findViewById(R.id.glsurfaceView);
mGLSurfaceView.setOnTouchListener(this);
//摄像头的surfaceview
mSurfaceView = (CameraSurfaceView) findViewById(R.id.surfaceView);
mSurfaceView.setOnCameraListener(this);
mSurfaceView.setupGLSurafceView(mGLSurfaceView, true, mCameraMirror, mCameraRotate);
mSurfaceView.debug_print_fps(true, false);
这里面出现了两个监听器,分别是View.OnTouchListener
、CameraSurfaceView.OnCameraListener
,第一个监听器用于设置触摸对焦,第二个监听器就是我们实现人脸识别的最基础一步:设置、获取摄像头的数据;
该接口共有6个方法:
public interface OnCameraListener {
/**
* setup camera. 设置相机参数
* @return the camera
*/
public Camera setupCamera();
/**
* reset on surfaceChanged. 在Surfacechanged之后重置
* @param format image format.
* @param width width
* @param height height.
*/
public void setupChanged(int format, int width, int height);
/**
* start preview immediately, after surfaceCreated 在surfaceCreated之后是否立即开始预览
* @return true or false.
*/
public boolean startPreviewImmediately();
/**
* on ui thread. 在预览时刚方法会被调用,该方法的返回值是后两个方法的传入值
* @param data image data
* @param width width
* @param height height
* @param format format
* @param timestamp time stamp
* @return image params.
*/
public Object onPreview(byte[] data, int width, int height, int format, long timestamp);
public void onBeforeRender(CameraFrameData data);
public void onAfterRender(CameraFrameData data);
}
初始化相机
@Override
public Camera setupCamera() {
// TODO Auto-generated method stub
//初始化相机
网友评论