前言
背景:最近需要把人脸识别的SDK嵌入应用里面,使用的是ANDROID的平台。
GITHUB上有开源的项目,GITHUB地址:
https://github.com/asdfqwrasdf/ArcFaceDemo
本文主要就是描述一下CAMERA操作的时候遇到的一些问题。
图像数据获取
使用系统的CAMERA时,可以通过CAMERA的onPreviewFrame回调拿到摄像头的帧数据。
DEMO中使用了
https://github.com/gqjjqg/android-extend
用于实现CAMERA的surfaceview,ExtGLSurfaceView,用于surfaceview推送数据以及FRAME数据回调。
前置摄像头的预览设置
//默认使用前置摄像头
mCameraID = Camera.CameraInfo.CAMERA_FACING_FRONT;
mCameraRotate = 270;
mCameraMirror = true;
mGLSurfaceView = (CameraGLSurfaceView) findViewById(R.id.glsurfaceView);
mGLSurfaceView.setOnTouchListener(this);
mSurfaceView = (CameraSurfaceView) findViewById(R.id.surfaceView);
mSurfaceView.setOnCameraListener(this);
mSurfaceView.setupGLSurafceView(mGLSurfaceView, true, mCameraMirror, mCameraRotate);
前置摄像头拍照
拍照使用CAMERA的takePicture来处理。
需要注意的是:
//设置拍照图片大小
parameters.setPictureSize(mWidth,mHeight);
需要设置拍照图片大小。
另一个问题是如果是竖屏前置摄像头,在PictureCallback拿到拍照图片后,需要图像翻转后作为识别图片。
//设置竖排
int takeType = 1;
if (takeType != 0) { //坚拍
Matrix matrix = new Matrix();
matrix.reset();
matrix.postRotate(mCameraRotate);
//水平翻转
if (mCameraMirror) {
matrix.postScale(-1, 1);
}
bMapRotate = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), matrix, true);
bm = bMapRotate;
}