android UvcCamera中使用OpenCV人脸识别

UvcCamera:
https://xie.infoq.cn/article/7e6a906f7096bb8e743ec2fc1

OpenCV
https://blog.youkuaiyun.com/switch_love_case/article/details/104137311

public class UserFaceActivity extends BaseActivity implements CameraDialog.CameraDialogParent {
   
    private static final String TAG = "UserFaceActivity";

    private final Object mSync = new Object();
    // for accessing USB and USB camera
    private USBMonitor mUSBMonitor;
    private UVCCamera mUVCCamera;
    private SurfaceView surfaceView;
    private Surface mPreviewSurface;

    private boolean isActive, isPreview, isTakePhoto;
    View photoView;

    private CascadeClassifier classifier;
    Mat mFrameChain = new Mat(UVCCamera.DEFAULT_PREVIEW_HEIGHT + UVCCamera.DEFAULT_PREVIEW_HEIGHT/2 , UVCCamera.DEFAULT_PREVIEW_WIDTH, CvType.CV_8UC1);
    private int mAbsoluteFaceSize = 200;
    String code;
    String cur;


    // 手动装载openCV库文件,以保证手机无需安装OpenCV Manager   不加这里将导致无法初始化 级联分类器(开机闪退)
    static {
   
        System.loadLibrary("opencv_java3");
    }

    boolean isFinish;
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.user_face);

        surfaceView = findViewById(R.id.user_face_surface_view);
        mPreviewSurface = surfaceView.getHolder().getSurface();
        code = getIntent().getStringExtra("code");
        ((TextView)findViewById(R.id.face_code)).setText(code);
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
   
            @Override
            public void surfaceCreated(final SurfaceHolder holder) {
   
                Log.v(TAG, "surfaceCreated:");
            }
            @Override
            public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) {
   
                if ((width == 0) || (height == 0)) return;
                Log.v(TAG, "surfaceChanged:");
                mPreviewSurface = holder.getSurface();
                synchronized (mSync) {
   
                    if (isActive && !isPreview && (mUVCCamera != null)) {
   
                        mUVCCamera.setPreviewDisplay(mPreviewSurface);
                        mUVCCamera.startPreview();
                        isPreview = true;
                    }
                }
            }
            @Override
            public void surfaceDestroyed(final SurfaceHolder holder) {
   
                Log.v(TAG, "surfaceDestroyed:");
                synchronized (mSync) {
   
                    if (mUVCCamera != null) {
   
                        mUVCCamera.stopPreview();
                    }
                    isPreview = false;
                    if(mPreviewSurface!=null) {
   
                        mPreviewSurface.release();
                        mPreviewSurface = null;
                    }
                }

            }
        });


        mUSBMonitor = new USBMonitor(this, mOnDeviceConnectListener);


        initClassifier();

        findViewById(R.id.back).setOnClickListener(v -> {
   
            synchronized (mSync){
   
                if(isFinish) return;
                isFinish = true;
                isActive = isPreview = false;
            }
            new Thread(() -> {
   
                try {
   
                    Thread.sleep(1000);
                    finish();
                } catch (InterruptedException e) {
   
                    e.printStackTrace();
                }
            }).start();
        });

        findViewById(R.id.take_photo).setOnClickListener(v -> {
   
            isTakePhoto = true;
        });


        photoView = findViewById(R.id.face_photo);

        initFaceList();

        findViewById(R.id.delete_photo)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值