private void addListener() { // 设置回调,回调人脸检测结果。 faceDetectManager.setUseDetect(true); // faceDetectManager.setOnFaceDetectListener(new FaceDetectManager.OnFaceDetectListener() { // @Override // public void onDetectFace(int retCode, FaceInfo[] infos, ImageFrame frame) // { // // TODO 显示检测的图片。用于调试,如果人脸sdk检测的人脸需要朝上,可以通过该图片判断 // Bitmap bitmap = // Bitmap.createBitmap(frame.getArgb(), frame.getWidth(), // frame.getHeight(), Bitmap.Config.ARGB_8888); // handler.post(new Runnable() { // @Override // public void run() // { // // testView.setImageBitmap(bitmap); // } // }); // checkFace(retCode, infos, frame); // showFrame(frame, infos); // } //}); }
protected override void OnStart() { base.OnStart(); // 开始检测 faceDetectManager.start(); faceDetectManager.setUseDetect(true); }
// 从相册检测。 private void detect(string filePath) { FileImageSource fileImageSource = new FileImageSource(); fileImageSource.setFilePath(filePath); detectManager.setImageSource(fileImageSource); detectManager.setUseDetect(true); // detectManager.setOnFaceDetectListener(new FaceDetectManager.OnFaceDetectListener() // { // public void onDetectFace(int status, FaceInfo[] faces, ImageFrame frame) // { // if (faces != null && status != FaceTracker.ErrCode.NO_FACE_DETECTED.ordinal() // && status != FaceTracker.ErrCode.UNKNOW_TYPE.ordinal()) // { // final Bitmap cropBitmap = FaceCropper.getFace(frame.getArgb(), faces[0], frame.getWidth()); // handler.post(new Runnable() // { // public void run() // { // avatarIv.setImageBitmap(cropBitmap); // } // }); // // File file = File.createTempFile(UUID.randomUUID().toString() + "", ".jpg"); // File faceDir = FileUitls.getFaceDirectory(); // if (faceDir != null) // { // String imageName = UUID.randomUUID().toString(); // File file = new File(faceDir, imageName); // // 压缩人脸图片至300 * 300,减少网络传输时间 // ImageUtils.resize(cropBitmap, file, 300, 300); // RegActivity.this.faceImagePath = file.getAbsolutePath(); // submitButton.setVisibility(View.VISIBLE); // } // else // { // toast("注册人脸目录未找到"); // } // } else { // toast("未检测到人脸,可能原因:人脸太小(必须大于最小检测人脸minFaceSize),或者人脸角度太大,人脸不是朝上"); // } //} // }); detectManager.start(); }
private void init() { faceDetectManager = new FaceDetectManager(this); // 从系统相机获取图片帧。 CameraImageSource cameraImageSource = new CameraImageSource(this); // 图片越小检测速度越快,闸机场景640 * 480 可以满足需求。实际预览值可能和该值不同。和相机所支持的预览尺寸有关。 // 可以通过 camera.getParameters().getSupportedPreviewSizes()查看支持列表。 cameraImageSource.getCameraControl().setPreferredPreviewSize(1280, 720); // 设置最小人脸,该值越小,检测距离越远,该值越大,检测性能越好。范围为80-200 previewView.setMirrored(false); // 设置预览 cameraImageSource.setPreviewView(previewView); // 设置图片源 faceDetectManager.setImageSource(cameraImageSource); faceDetectManager.setUseDetect(true); textureView.SetOpaque(false); // 不需要屏幕自动变黑。 textureView.KeepScreenOn = true; bool isPortrait = Resources.Configuration.Orientation == Android.Content.Res.Orientation.Portrait; if (isPortrait) { previewView.setScaleType(ScaleType.FIT_WIDTH); // 相机坚屏模式 cameraImageSource.getCameraControl().setDisplayOrientation(0); } else { previewView.setScaleType(ScaleType.FIT_HEIGHT); // 相机横屏模式 cameraImageSource.getCameraControl().setDisplayOrientation(1); } setCameraType(cameraImageSource); }