2012-03-20 3 views
3

Использование API 14 Я создал операцию, которая успешно использует распознавание лиц (я немного новичок в этом материале обнаружения лиц).Требуется ли распознавание лиц SurfaceView?

Однако я не хочу показывать предварительный просмотр камеры; Я просто хочу знать, когда лицо пользователя находится перед камерой. Я добавил несколько кнопок, чтобы сделать SurfaceView Visible/Invisible, и я обнаружил, что распознавание лица перестает работать, когда оно НЕВОЗМОЖНО или GONE.

Есть ли способ включить обнаружение лица, не требуя 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(); 
      } 

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

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

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

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

+0

Вы когда-нибудь находили ответ на этот вопрос? Я нашел проект, который использует обнаружение лиц, но, пытаясь использовать только обнаружение лица без поверхностного обзора, я не понял, как это сделать. https://github.com/ProjPossibility/2014-CSUN-Cam4Blind – portfoliobuilder

ответ

0

Камера предварительного просмотра не получает отображается, если опустить

setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

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

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

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

+0

Эта ссылка является довольно старым материалом и устаревшей. ['setType (int)'] (http://developer.android.com/reference/android/view/SurfaceHolder.html#setType%28int%29) устарел тем временем, и в соответствии с настройкой документации этот флаг будет не влияют на новые устройства: * «это игнорируется, это значение устанавливается автоматически, когда это необходимо». * 'setPreviewTexture (SurfaceTexture)' может работать, но доступен только в API 11+. Может быть, комбинация обоих сделает трюк? :) –

1

Для ваших целей вам следует использовать манекен 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

Это не сработало для меня, и похоже, что вы передаете неправильный идентификатор в 'Camera.open'. (Я не думаю, что константы 'CameraInfo' являются идентификаторами камеры.) – Sam

Смежные вопросы