2014-01-29 3 views
6

Ich arbeite mit Gesichtserkennung in Android und ich möchte Folgendes erreichen:
1. Verwenden Sie Gesichtserkennung Listener in Android für die Erkennung Gesichter auf Kamera-Rahmen.
2. Wenn ein Gesicht am Kamerarahmen erkannt wird, extrahieren Sie das Gesicht und speichern Sie es auf einem externen Speicher.Aufnahme von Kamera-Rahmen in Android nach Gesichtserkennung

Nach dem Surfen durch vorhandene Fragen habe ich festgestellt, dass es keine direkte Möglichkeit gibt, erkannte Gesicht zu Bitmap zu konvertieren und auf der Festplatte zu speichern. Jetzt möchte ich den gesamten Kamerarahmen erfassen und speichern, in dem das Gesicht erkannt wurde und ich nicht konnte.

Die aktuelle Code-Struktur ist wie folgt:

FaceDetectionListener faceDetectionListener = new FaceDetectionListener() { 

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

     if (faces.length == 0) { 
     } else { 
      displayMessage("Face detected!"); 
      // CODE TO SAVE CURRENT FRAME AS IMAGE 
      finish(); 
     } 
    } 
}; 

Ich habe versucht, dies zu erreichen, indem Takepicture in der obigen Methode aufrufen, aber ich war nicht in der Lage, den Rahmen zu speichern, diesen Ansatz verwenden. Bitte schlagen Sie mir eine Möglichkeit vor, wie Sie den Kamerarahmen speichern können.

Antwort

1

Ich konnte einen direkten Weg nicht finden, den Kamerarahmen innerhalb FaceDetectionListener zu speichern. Daher habe ich für meine Anwendung die Art und Weise geändert, in der ich die Kameravorschaudaten verwaltete. Ich benutzte die PreviewCallback Schnittstelle von Camera Klasse und implementierte die Logik in onPreviewFrame Methode der Schnittstelle. Der Umriss der Implementierung ist wie folgt:

class SaveFaceFrames extends Activity implements Camera.PreviewCallback, Camera.FaceDetectionListener { 

    boolean lock = false; 

    public void onPreviewFrame(byte[] data, Camera camera) { 
     ... 
     if(lock) { 
      Camera.Parameters parameters = camera.getParameters(); 
      Camera.Size size = parameters.getPreviewSize(); 
      YuvImage image = new YuvImage(data, parameters.getPreviewFormat(), size.width, size.height, null); 
      ByteArrayOutputStream outstr = new ByteArrayOutputStream(); 
      image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 100, outstr); 
      Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size()); 
      lock = false; 
     } 
    } 

    public void onFaceDetection(Camera.Face[] faces, Camera camera) { 
     ... 
     if(!lock) { 
      if(faces.length() != 0) lock = true; 
     } 
    } 
} 

Dies ist keine ideale Lösung, aber es hat in meinem Fall funktioniert. Es gibt Bibliotheken von Drittanbietern, die in diesen Szenarien verwendet werden können. Eine Bibliothek, die ich verwendet habe und sehr gut funktioniert, ist Qualcomm's Snapdragon SDK. Ich hoffe, dass jemand das nützlich findet.

+0

hi! Ich brauche das auf meiner App. Kannst du mir den richtigen Flow oder Code zur Verfügung stellen, wo ich Videoaufnahmen mit Gesichtserkennung finde? – Reshma

+0

@Reshma: Ich würde vorschlagen, dass Sie sich Qualcomm's Snapdragon SDK für Android anschauen - https://developer.qualcomm.com/software/snapdragon-sdk-android. – Bhoot

Verwandte Themen