Android开发Android开发经验谈Android开发

[26]——Android 人脸识别了解一下 (中)

2018-05-28  本文已影响52人  junerver

转载请注明作者及出处:https://www.jianshu.com/p/b41f64389c21

[25]——Android 人脸识别了解一下 (上)
在上文中我大致的介绍了官方 Demo 中人脸注册的流程,本文我们接着来看看,在完成了人脸注册之后我们该如何识别出用户的人脸特征,从而通过人脸识别获取用户信息。

人脸识别的全部流程集成在官方 Demo 的 DetecterActivity 文件中。

还是来了解几个概念

  1. 人脸追踪 FT
  2. 年龄检测 Age
  3. 性别检测 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.OnTouchListenerCameraSurfaceView.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
    //初始化相机
上一篇下一篇

猜你喜欢

热点阅读