Android使用相機的簡單操作及應用
阿新 • • 發佈:2019-01-27
前言
背景:最近需要把人臉識別的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;
}