2016-03-08 2 views
6

Auf den offiziellen Quellen haben die Informationen nicht gefunden ... Es gibt viele Beispiele, wie man mit der Camera API arbeitet, aber wie man mit Camera2API irgendwas arbeitet ... ein paar Diskussionen bei Stake und allen ... gibt es eine ähnliche Frage an mich, aber ich habe ein Problem nicht gelöst. ..Wer hat ein Material, wie man mit der Face Detection Camera 2 API arbeitet?

Link auf die gleiche quetion: Android camera2 face recognition

Ich nahm das Beispiel von Google's API for Camera 2.

Das ist, was ich tat, aber ich habe nicht erkennen, ein Gesicht:

hinzugefügt I

Ereignisse
private void createCameraPreviewSession() { 
    try { 
     SurfaceTexture texture = mTextureView.getSurfaceTexture(); 
     assert texture != null; 

     // We configure the size of default buffer to be the size of camera preview we want. 
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 

     // This is the output Surface we need to start preview. 
     Surface surface = new Surface(texture); 

     // We set up a CaptureRequest.Builder with the output Surface. 
     mPreviewRequestBuilder 
       = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     mPreviewRequestBuilder.addTarget(surface); 

     // Here, we create a CameraCaptureSession for camera preview. 
     mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()), 
       new CameraCaptureSession.StateCallback() { 

        @Override 
        public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 
         // The camera is already closed 
         if (null == mCameraDevice) { 
          return; 
         } 

         // When the session is ready, we start displaying the preview. 
         mCaptureSession = cameraCaptureSession; 
         try { 



//   ---->>   Установка модуля распознания лица 
          mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE, 
            CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL); 



          // Auto focus should be continuous for camera preview. 
          mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, 
            CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); 

          // Flash is automatically enabled when necessary. 
          setAutoFlash(mPreviewRequestBuilder); 

          // Finally, we start displaying the camera preview. 
          mPreviewRequest = mPreviewRequestBuilder.build(); 

          mCaptureSession.setRepeatingRequest(mPreviewRequest, 
            mCaptureCallback, mBackgroundHandler); 
         } catch (CameraAccessException e) { 
          e.printStackTrace(); 
         } 
        } 

        @Override 
        public void onConfigureFailed(
          @NonNull CameraCaptureSession cameraCaptureSession) { 
         System.out.println("Failed строка 757"); 
        } 
       }, null 
     ); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

private CameraCaptureSession.CaptureCallback mCaptureCallback 
     = new CameraCaptureSession.CaptureCallback() { 

    @Override 
    public void onCaptureProgressed(@NonNull CameraCaptureSession session, 
            @NonNull CaptureRequest request, 
            @NonNull CaptureResult partialResult) { 
     process(partialResult); 
    } 

    @Override 
    public void onCaptureCompleted(@NonNull CameraCaptureSession session, 
            @NonNull CaptureRequest request, 
            @NonNull TotalCaptureResult result) { 
     process(result); 
    } 

    private void process(CaptureResult result) { 


---> //здесь проверяю получает ли он массив лиц или нет + непонятный мод 
     Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE); 
     Face[] faces = result.get(CaptureResult.STATISTICS_FACES); 
     if(faces != null && mode != null) 
      System.out.println("tagDDDDDDDDDDDDDDDDDDDDDDDD" + "faces : " + 
        faces.length + " , mode : " + mode); 

     switch (mState) { 
      case STATE_PREVIEW: { 
       // We have nothing to do when the camera preview is working normally. 

//     Here i set Face Detection 
       mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE, 
         CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL); 
       break; 
      } 

hier i max Anzahl der Gesichter ist Überprüfung, dass die Kamera

private void setUpCameraOutputs(int width, int height) { 

    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 
    try { 
     for (String cameraId : manager.getCameraIdList()) { 
      CameraCharacteristics characteristics 
        = manager.getCameraCharacteristics(cameraId); 

      // We don't use a front facing camera in this sample. 
      Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING); 
      if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) { 
       continue; 
      } 

      max_count = characteristics.get(
        CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT); 
      modes = characteristics.get(
        CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES); 

      System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! max_count " + max_count + " modes " + modes); 
bekommen

** Ausgabe ist: **

I/System.out: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! max_count 16 modes [[email protected] 

** Und das ist, was ein Protokoll druckt **

03-08 18:34:07.018 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.048 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.078 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.118 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.148 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.178 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.218 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.258 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.288 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.308 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 
03-08 18:34:07.348 7405-7438/com.example.android.camera2basic I/System.out: tagDDDDDDDDDDDDDDDDDDDDDDDDfaces : 0 , mode : 1 

Warum es nicht das Gesicht ist reterning? Wenn jemand ein korrektes Beispiel hat, geben Sie bitte einen Link an. Wie kann ich Gesichtserkennung mit camera2API machen. Während der Woche, kann ich nicht verstehen (

+0

Haben Sie die Android Entwickler Informationen hier gelesen: http://developer.android.com/reference/android/hardware/camera2/package-summary.html? –

+0

Ja, aber es ist nur allgemeine Beschreibung ... Wie es mich in Gesichtserkennung Kamera 2 API halbieren? –

+0

Werden diese helfen? 1) https://developer.qualcomm.com/software/snapdragon-sdk-android/facial-recognition/user-guide (2) http://code.tutsplus.com/tutorials/an-introduction-to-face- detection-on-android - cms-25212 (3) http://androidbite.blogspot.in/2012/11/android-face-detection-beispiel.html – Stallion

Antwort

2

Mit Play Services 8.3, Google eingeführt Mobile Vision APIs. Es enthält eine einfach zu bedienende API namens Face API, die menschliche Gesichter in Bildern und Videos erkennt. Verwechseln Sie dies nicht mit Gesicht nur Erkennung als Gesichts API unterstützt derzeit Erkennung.

Face API detecting human faces

ein Gesicht Detecting

Wenn die API ein menschliches Gesicht erfasst, es als Gesichtsobjekt zurückgegeben wird. Das Face-Objekt stellt die räumlichen Daten für das Gesicht zur Verfügung, sodass Sie beispielsweise für ein um ein Gesicht herum begrenzende Rechtecke zeichnen können. Wenn Sie Orientierungspunkte im Gesicht verwenden, können Sie dem Gesicht im richtigen Platz hinzufügen. zum Beispiel, um einer Person einen neuen Hut zu geben.

Landmarks detected by Face API

Es kommt auch mit kühlen Methoden wie, ob der Benutzer :) lächelt oder ist er zwinkert;) usw. um nur einige zu nennen.

Schauen Sie sich die Dokumentation und Referenz an, um mehr zu erfahren.

  1. Mobile Vision: Find objects in photos and video, using real-time on-device vision technology.
  2. Face API- Google Developers
  3. Mobile Vision- Youtube
  4. Android developers- Face detection API

this helps :)

+0

wirklich nein, ich habe dies alle Ressourcen gelesen, aber etw falsch tun und ich bekam kein Gesicht ... es gibt immer 0. Es ist warum ich bin Beispiel –

+0

haben Sie die Face API ausprobiert? –

+0

ja, ich habe es ausprobiert ... aber soweit ich verstehe, funktioniert es nicht mit Camera 2 API ... Es gibt ein Gesichtserkennung Proben auf Foto, aber ich brauche auf Vorschau ... Und es gibt nicht Codebeispiele wie Sie es implementieren –

0

Aleksey,

Ihre Reques tBuilder sieht korrekt aus, aber ich denke, dass das Problem darin liegt, wie Sie das zu verwendende Kameragerät auswählen. Ich habe das gleiche Setup wie du und es funktioniert.

private boolean setUpCameraOutputs() { 
    Activity activity = getActivity(); 
    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 
    if (manager == null) { 
     ErrorDialog.buildErrorDialog("This device doesn't support the Camera2 API."). 
      show(getFragmentManager(), "dialog"); 
     return false; 
    } 
    try { 
     // Find a CameraDevice that supports Face recognition, and configure state. 
     for (String cameraId : manager.getCameraIdList()) { 
      CameraCharacteristics characteristics 
        = manager.getCameraCharacteristics(cameraId); 

      // We only use a camera that supports Faces. 
      if (!contains(characteristics.get(
          CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES), 
        CameraCharacteristics.STATISTICS_FACE_DETECT_MODE_SIMPLE)) { 
       continue; 
      } 

      StreamConfigurationMap map = characteristics.get(
        CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 

      synchronized (mCameraStateLock) { 
       mCharacteristics = characteristics; 
       mCameraId = cameraId; 
      } 
      return true; 
     } 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 

    // If we found no suitable cameras for capturing Faces, warn the user. 
    ErrorDialog.buildErrorDialog("This device doesn't support Face detection"). 
      show(getFragmentManager(), "dialog"); 
    return false; 
} 

Hoffentlich der obige Code wird zumindest helfen Sie feststellen, ob das Problem mit dem Gerät liegt oder mit der Art und Weise Sie die Kamera zugreifen.

+0

Danke für Ihre Antwort! aber ich weiß, dass die kamera richtig funktioniert, weil ich diese ausgabe "max_count 16" bekommen habe, bedeutet das, dass mein gerät 16 gesicht zählen kann ... und zweitens, in meiner app benutze ich nur die rückkamera es bedeutet, dass es gesichter erkennen sollte es ist Hauptkamera ... aber es erkennt immer noch nicht ... wirklich ich bin ein Anfänger in Android. Wenn Sie in Ihrer App mit Gesichtserkennung Erfolg haben, können Sie mir bitte diesen Teil Ihres Codes zeigen, wo Sie ihn gemacht haben? –

+0

Da ich das gleiche googlesamples Projekt als Sie als Grundlage für mein Arbeitsbeispiel verwendet habe, sollte der einzige Unterschied in diesem Modul sein. Könnten Sie versuchen, den obigen Code zu vertauschen und zu sehen, welche Code-Pfade aktiviert werden? Dies könnte einen Hinweis auf den Schuldigen geben. –

+0

Sorry, ich habe versucht, dieses Problem für mich selbst zu lösen, aber wieder ohne Erfolg ... Ich verstehe nicht genau, was meinst du "sehen, welche Code-Pfade aktiviert werden"? –

Verwandte Themen