利用Android实现人脸识别并统计人脸数

  介绍

利用Android实现人脸识别并统计人脸数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

利用Android实现人脸识别并统计人脸数”> <br/> </p> <p>最近项目需求是统计当前摄像头中的人脸个数,安卓有提供现成的Api,最终实现效果如上图。</p> <p> <强>分析思路和步奏:</强> <br/> </p> <p>主要使用到的类:SurfaceView, CameraManager, CameraDevice.StateCallback, CameraCaptureSession.StateCallback。</p> <p> 1。通过SurfaceView展示预览区。<br/> 2。在SurfaceView创建成功后通过CameraManager获取当前设备可用的摄像头。<br/> 3。检测摄像头权限。<br/> 4。通过CameraManager打开摄像头。<br/> 5。在打开成功的回调中通过CameraDevice创建会话。<br/> 6。在会话创建成功的回调方法中创建预览请求。<br/> 7。在预览请求的回调方法onCaptureCompleted()方法中获取预览界面中返回的人脸数。</p> <p>以下是实现步奏:<br/> </p> <p> 1。xml </p> <pre类= & lt; LinearLayout xmlns: android=癶ttp://schemas.android.com/apk/res/android"   android: layout_width=癴ill_parent"   android: layout_height=癴ill_parent"   android:取向=皏ertical"比;      & lt; SurfaceView   android: id=癅 + id/sv"   android: layout_width=癿atch_parent"   android: layout_height=? dp"   android: layout_weight=?”;/比;   & lt;/LinearLayout>

java

cameraManager=(cameraManager) getSystemService (Context.CAMERA_SERVICE);   surfaceHolder=sv.getHolder ();   表面=surfaceHolder.getSurface (); //获取可用的相机列的表   String [] cameraIdList=cameraManager.getCameraIdList ();
如果(checkSelfPermission (Manifest.permission.CAMERA) !=PackageManager.PERMISSION_GRANTED) {//TODO:考虑//活动# requestPermissions//请求丢失的权限,然后覆盖//公共空>//获取开启相机的相关参数
  CameraCharacteristics特点=cameraManager.getCameraCharacteristics (cameraIdList [1]);//可用于判断是否支持人脸检测,以及支持到哪种程度
  faceDetectModes=characteristics.get (CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES);//支持的人脸检测模式
  cameraManager。mStateCallback openCamera (cameraIdList [1], null); 
camera.createCaptureSession (arrays . aslist(表面),新的CameraCaptureSession.StateCallback () {   @Override   公共空间> CaptureRequest。Builder captureRequest=camera.createCaptureRequest (CameraDevice.TEMPLATE_PREVIEW);   captureRequest.addTarget(表面);   captureRequest.set (CaptureRequest。CONTROL_MODE CameraMetadata.CONTROL_MODE_AUTO);   captureRequest.set (CaptureRequest。STATISTICS_FACE_DETECT_MODE getFaceDetectMode ());   session.setRepeatingRequest (captureRequest.build (), captureCallback,新处理程序());
利用Android实现人脸识别并统计人脸数