1. 程式人生 > >Android使用相機的簡單操作及應用

Android使用相機的簡單操作及應用

前言

背景:最近需要把人臉識別的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; }