2016-03-31 15 views
0

Ich versuche, eine einfache App, um den Benutzer (Audio-Anweisungen) zu unterrichten, wenn ein Gesicht erkannt wird und basierend auf der Glücksstufe verfolgt. Ich verwende FaceTracker als Basis für mein Programm.Gesichtserkennung und Tracking mit Android-Vision

Ich kann nicht identifizieren, wenn ein Gesicht erkannt wird und wo kann ich die Audioanweisungen in die Gesicht erkannt Pipeline einfügen. Ich meine, wie die Kontrolle in der Pipeline fließt.

Könnte jemand bitte dies vorschlagen?

Antwort

0

In der API gibt es eine Tracker-Klasse, die Sie für Callbacks erweitern, wenn das Gesicht zum ersten Mal erkannt, aktualisiert und der Rahmen verlassen wird. Zum Beispiel hat Facetracker den folgenden Code:

private class GraphicFaceTracker extends Tracker<Face> { 
    ... 

    @Override 
    public void onNewItem(int faceId, Face item) { 
     mFaceGraphic.setId(faceId); 
    } 

    @Override 
    public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { 
     mOverlay.add(mFaceGraphic); 
     mFaceGraphic.updateFace(face); 
    } 

https://github.com/googlesamples/android-vision/blob/master/visionSamples/FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/FaceTrackerActivity.java#L280

Ich denke, was man sich wünschen kann, ist der Code für die Audio-Anweisungen in der onUpdate Methode zu tun, auf den übergebenen Werten basiert anrufen für das zugehörige Gesicht.

Dieses Tutorial beschreibt die Steuerungsablauf der Pipeline für das Gesicht Tracker App:

https://developers.google.com/vision/face-tracker-tutorial#creating_the_face_detector_pipeline

In Ihrem Fall, wenn Sie nur einen einzigen Benutzer-Tracking, Sie wollen wahrscheinlich LargestFaceFocusingProcessor anstatt das verwenden, MultiProcessor, der im Face-Tracker-Beispiel verwendet wird. Der Unterschied besteht darin, dass LargestFaceFocusingProcessor darauf spezialisiert ist, nur ein Gesicht (d. H. Den Benutzer) und nicht mehrere Gesichter zu verfolgen. Setup würde so etwas wie gehen:

Tracker<Face> myTracker = new Tracker<Face>() { 
    @Override 
    public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { 
     // issue audio instructions 
    } 
}; 

detector.setProcessor(
    new LargestFaceFocusingProcessor.Builder(detector, myTracker).build()); 
+0

Vielen Dank für die rechtzeitige Antwort, @ pm0733464. Ich war wirklich an diesem Punkt fest. Ja .. Sie haben Recht, ich muss nicht mehrere Gesichter erfassen, LargestFaceFocusingProcessor sollte für meinen Zweck tun. Lass mich es ausprobieren. – jaymj

+0

Als ich ein TTS-Objekt hinzufügte, um etwas Text (Audio) auszusprechen, hörte es bei OnUpdate auf, Gesichter zu verfolgen !! Ich habe sogar OnNewItem versucht. Weiß nicht warum !! – jaymj

+0

Wahrscheinlich müssen Sie TTS in einem separaten Thread starten. Ich vermute, dass der Anruf, den Sie gerade machen, blockiert, was bedeutet, dass die Gesichtserkennungspipeline nicht fortgesetzt wird, bis sie zurückkehrt. – pm0733464