• 【原创】【Android Camera】—— 关于FaceDetection


    本文是个人开发Camera APP中总结的问题之一,主要介绍FaceDetection的基本使用方法和注意问题。文中如有错误和不足,欢迎批评指正。
     
    一、关于FaceDetection
        1、版本支持
            FaceDetection是Android ICE_CREAM_SANDWICH (Android Version 4.0,ADT 14)版开始增加的功能,实际是否支持还得依赖于设备自身的限制(Camera.Parameters.getMaxNumDetectedFaces() > 0)。
        2、FaceDetectionListener
            下面是FaceDetectionListener接口的源码:
        /**
         * Callback interface for face detected in the preview frame.
         *
         */
        public interface FaceDetectionListener
        {
            /**
             * Notify the listener of the detected faces in the preview frame.
             *
             * @param faces The detected faces in a list
             * @param camera  The {@link Camera} service object
             */
            void onFaceDetection(Face[] faces, Camera camera);
        }    
            
            FaceDetectionListener只有一个方法,FaceDetection(Face[] faces, Camera camera)。其中faces是检测到的人脸数组(注意可能检测不到),camera是当前Camera对象。
            使用时,需要创建一个FaceDetectionListener并重写onFaceDetection方法,在方法中遍历faces进行处理。
            Example:
        mCamera.setFaceDetectionListener(new NodinFaceDetectionListener());     
        
        class NodinFaceDetectionListener implements FaceDetectionListener {
            private static final String TAG = "NodinFaceDetectionListener";
            
            @Override
            public void onFaceDetection(Face[] faces, Camera camera) {
                // TODO Auto-generated method stub
                if (null == faces || faces.length == 0) {
                    //TODO Hide face frame.
                    Log.d(TAG"onFaceDetection : There is no face found.");
                } else {
                    //Face face = faces[0];
                    //Rect faceRect = face.rect;
                    //TODO Calculate the size of face frame and show.
                    Log.d(TAG"onFaceDetection : At least one face has been found.");
                }
            }
        }
        3、启动FaceDetection
        启动FaceDetection很简单,mCamera.startFaceDetection().
        但是需要注意一个问题:startFaceDetection()方法必须在Camera的startPreview之后调用
        4、停止FaceDetection
        mCamera.stopFaceDetection().
        同样需要注意顺序问题:stopFaceDetection()方法必须在Camera的stopPreview之前调用
        5、关于takePicture
        Google API描述,在执行Camera的takePicture方法时,系统会自动调用stopPreview同时停止FaceDetection。如果此后又调用了stopFaceDetection()方法,会抛出IllegalStateException:stop facedetection failed.由于该异常是从底层抛出的,无法确定异常抛出行,解决起来比较棘手。在此例中,由于FaceDetection在takePicture时已经stop,如果再调用stopFaceDetection()方法,会出现该问题。在使用FaceDetection时,使用状态标识来记录Face Detector的状态,在takePicture时将标识设为stop并在start和stop方法中判断标识状态,可以避免该问题。
     
    ——2013.5.14 写于北京

    作者:Nodin
    出处:http://www.cnblogs.com/monodin
    个人博客网站:http://www.coderself.com
    关于作者:爱摄影,爱旅行,爱自由,爱生活,更要爱自己。活在当下,也在为未来打拼!
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    ASP.NET Cookies的使用
    How to trigger editing of elements inside a reorderlist?
    Not in 的LinQ实现
    .Net中TextBox回车捕捉
    多个TermQuery或一个MultiFieldQueryParser构建BooleanQuery多个域的检索学习实例代码
    ASP.NET的异常处理
    一些有用的API 之 飛信發短信
    C# lock 避免多人同时操作
    一個人性化的“Error 404”,不要錯過!
    SQL索引系列(四)
  • 原文地址:https://www.cnblogs.com/monodin/p/3099169.html
Copyright © 2020-2023  润新知