Требуется ли для обнаружения лица SurfaceView для работы? - PullRequest
3 голосов
/ 20 марта 2012

Используя API 14, я создал Activity, которая успешно использует распознавание лиц (я немного новичок в этом деле распознавания лиц).

Я не хочу показывать предварительный просмотр камерытем не мение;Я просто хочу знать, когда лицо пользователя перед камерой.Я добавил несколько кнопок, чтобы сделать SurfaceView видимым / невидимым, и обнаружил, что распознавание лица перестает работать, когда оно невидимо или унесено.

Есть ли способ включить обнаружение лица, не требуя SurfaceView в макете?

Вот как я его кодировал:

            mCamera.setPreviewDisplay(mSurfaceHolder);
            mCamera.startPreview();

            if(mCamera.getParameters().getMaxNumDetectedFaces() >0) {
                mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener() {
                    @Override public void onFaceDetection(Face[] faces, Camera camera) {

                        if(faces.length > 0) {
                            System.out.println("Found someone");
                        }

                    }
                });
                mCamera.startFaceDetection();
            }

Чтобы скрыть вид поверхности, я добавил черный вид.: -)

<View android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000"/>

Я достаточно осмотрелся и пока не нашел большого количества кода, использующего startFaceDetection ().

Спасибо за любые идеи / помощь.

Ответы [ 2 ]

1 голос
/ 27 августа 2013

Вы должны использовать фиктивную SurfaceTexture для своих целей.

  1. Просто создайте объект SurfaceTexture, передав любое целое число, например

     mSurfaceTexture = new SurfaceTexture(1);
    
  2. Теперь откройте камеру и выполните следующие действия.:

    mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
     try{ 
      mCamera.setPreviewTexture(mSurfaceTexture);
    } 
    catch (IOException t) {
      //Do Something here   
    }
    

3) Вы можете делать все остальное точно так же, например, используя распознавание лиц.

0 голосов
/ 14 июня 2012

Предварительный просмотр камеры не отображается, если вы пропустите

setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Я еще не проверял это с Face Detection (нет устройства 4.0, и эмулятор еще не поддерживает его). Но это должно сработать.

Ссылка: https://groups.google.com/forum/?fromgroups#!topic/android-developers/EzBgJRetaCo

Вы также можете попытаться использовать setPreviewTexture (SurfaceTexture st) вместо setPreviewDisplay и использовать SurfaceTexture, которым вы можете управлять.

...