안 드 로 이 드 OpenCV 얼굴 인식 Opencv 3.1

그냥 간단 한 데모 야.얼굴 만 검출 할 수 있 고 식 별 률 이 낮 으 며 앞으로 얼굴 인식 을 실현 해 당신 이 누구 인지 알 아 봐 야 한다.나중에
1. 환경 설정
이전의 문장 을 참고 하 다
http://blog.csdn.net/aaron121314/article/details/53465547
2. 레이아웃
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/HelloOpenCvView" />

3. 권한
android:name="android.permission.CAMERA"/>

android:name="android.hardware.camera" android:required="false"/>
android:name="android.hardware.camera.autofocus" android:required="false"/>
android:name="android.hardware.camera.front" android:required="false"/>
android:name="android.hardware.camera.front.autofocus" android:required="false"/>

4. 초기 화
private CameraBridgeViewBase mOpenCvCameraView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.HelloOpenCvView);
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    mOpenCvCameraView.setCvCameraViewListener(this);
}
@Override
protected void onResume() {
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
}
private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                try {
                    // load cascade file from application resources
                    InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
                    File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
                    mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
                    FileOutputStream os = new FileOutputStream(mCascadeFile);

                    byte[] buffer = new byte[4096];
                    int bytesRead;
                    while ((bytesRead = is.read(buffer)) != -1) {
                        os.write(buffer, 0, bytesRead);
                    }
                    is.close();
                    os.close();

                    mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
                    if (mJavaDetector.empty()) {
                        mJavaDetector = null;
                    }


                    cascadeDir.delete();

                } catch (IOException e) {
                    e.printStackTrace();
                }

                mOpenCvCameraView.enableView();
            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

여기까지 카메라 화면 을 표시 할 수 있 습 니 다.
lbpcascade_frontalface. xml 이 사람의 얼굴 훈련 데이터 입 니 다.사람의 얼굴 을 검사 하 는 데 쓰 인 다.
5. 얼굴 검사
이 listener 구현
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2
@Override
public void onCameraViewStarted(int width, int height) {
    mGray = new Mat();
    mRgba = new Mat();
mRgbaT=new Mat();
}
@Override
public void
onCameraViewStopped() {
mGray.release()
;
mRgba.release()
;
mRgbaT.release();
}
   @Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        mRgba = inputFrame.rgba();
        mGray = inputFrame.gray();

        Core.transpose(mRgba,mRgbaT); //        Imgproc.resize(mRgbaT,mRgba, mRgba.size(), 0.0D, 0.0D, 0); //          mRgbaF   
        Core.flip(mRgba, mRgba,0); //  x,y0-x 1-y

        Core.transpose(mGray,mRgbaT); //        Imgproc.resize(mRgbaT,mGray, mGray.size(), 0.0D, 0.0D, 0); //          mRgbaF   
        Core.flip(mGray, mGray,0); //  x,y0-x 1-y

        if (mAbsoluteFaceSize == 0) {
            int height = mGray.rows();
            if (Math.round(height * mRelativeFaceSize) > 0) {
                mAbsoluteFaceSize = Math.round(height * mRelativeFaceSize);
            }
        }

        MatOfRect faces = new MatOfRect();

            if (mJavaDetector != null)
                mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, // TODO: objdetect.CV_HAAR_SCALE_IMAGE
                        new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size());


        Rect[] facesArray = faces.toArray();
        for (int i = 0; i < facesArray.length; i++) {
            Log.i("a","face "+facesArray[i]);
            Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);
        }
        return mRgba;
    }
}

얼굴 검사 하 러.
메모: 테스트 할 때 preview 화면 이 90 도 회전 되 었 기 때문에 그림 을 바로 잡 아야 합 니 다.두 개의 매개 변 수 는 모두 회전 해 야 하고 mGray 도 선택해 야 한다. 그렇지 않 으 면 화면 이 바 르 지만 사람의 얼굴 이 감지 되 지 않 는 다.
Core.transpose(mRgba,mRgbaT); //Imgproc.resize(mRgbaT,mRgba, mRgba.size(), 0.0D, 0.0D, 0); //          mRgbaF   
Core.flip(mRgba, mRgba,0); //  x,y0-x 1-y

Core.transpose(mGray,mRgbaT); //Imgproc.resize(mRgbaT,mGray, mGray.size(), 0.0D, 0.0D, 0); //          mRgbaF   
Core.flip(mGray, mGray,0); //  x,y0-x 1-y

좋은 웹페이지 즐겨찾기