使用人脸检测 google-vision 检测到人脸时拍照

Posted

技术标签:

【中文标题】使用人脸检测 google-vision 检测到人脸时拍照【英文标题】:take picture when face detected using FaceDetector google-vision 【发布时间】:2017-07-30 03:30:58 【问题描述】:

我在这里找到了演示代码:https://github.com/googlesamples/android-vision/blob/master/visionSamples/FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/FaceTrackerActivity.java

我的问题是如何在检测到人脸时拍照并将其保存到设备,当我们拍摄第一张照片时,下一张照片将在检测到人脸时 5 秒后拍摄,因为我们无法将多张照片保存到设备。

【问题讨论】:

你知道怎么拍照吗?检测到人脸时调用它! 是的,我想是的。但我不知道何时检测到人脸以及如何处理。 【参考方案1】:

您必须在相机 API 中添加 FaceDetectionListener 然后调用 startFaceDetection() 方法,

CameraFaceDetectionListener fDListener = new CameraFaceDetectionListener();
mCamera.setFaceDetectionListener(fDetectionListener);
mCamera.startFaceDetection();

实现Camera.FaceDetectionListener,你在onFaceDetection覆盖方法中接收到检测到的人脸,

private class MyFaceDetectionListener 
          implements Camera.FaceDetectionListener 

@Override
public void onFaceDetection(Face[] faces, Camera camera) 

    if (faces.length == 0) 
        Log.i(TAG, "No faces detected");
     else if (faces.length > 0) 
        Log.i(TAG, "Faces Detected = " + 
              String.valueOf(faces.length));

        public List<Rect> faceRects;
        faceRects = new ArrayList<Rect>();

        for (int i=0; i<faces.length; i++) 
            int left = faces[i].rect.left;
            int right = faces[i].rect.right;
            int top = faces[i].rect.top;
            int bottom = faces[i].rect.bottom;
            Rect uRect = new Rect(left0, top0, right0, bottom0);
            faceRects.add(uRect);
        

        // add function to draw rects on view/surface/canvas
    

根据您的情况, new Handler().postDelayed(new Runnable,long seconds) 在 5 秒后在可运行对象内拍摄第二张照片。 如果您有任何疑问,请告诉我。

【讨论】:

谢谢,但问题是 onFaceDectiion 调用了很多次,所以如果使用 Handler 会引发异常:“Can't create handler inside thread that has not called Looper.prepare()” Looper.prepare() 方法用于在线程中创建队列。所以只要提到这样, mHandler = new Handler(Looper.getMainLooper()) @Override public void handleMessage(Message message) // 这是你在 UI 线程中工作的地方。 // 你的工人在消息中告诉你要做什么。 ;否则,我建议 AsyncTask 适用于大多数在后台运行的东西。一旦完成 onPostExecute 将调用 doInBackground 中的 Keep 方法来更新 UI。

以上是关于使用人脸检测 google-vision 检测到人脸时拍照的主要内容,如果未能解决你的问题,请参考以下文章

使用位图时,Android MLKit 人脸检测未检测到人脸

人脸检测实战:使用opencv加载深度学习模型实现人脸检测

使用dlib人脸检测模型进行人脸活体检测:眨眼检测

如何使用 react-native-camera 人脸检测器检测人脸?

人脸检测实战进阶:使用 OpenCV 进行活体检测

OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)