package com.novoda.magicmirror.facerecognition; import com.google.android.gms.vision.MultiProcessor; import com.google.android.gms.vision.Tracker; import com.google.android.gms.vision.face.Face; import com.google.android.gms.vision.face.FaceDetector; public class FaceTracker extends Tracker<Face> { private final FaceListener faceListener; private FaceExpression currentExpression; private FaceTracker(FaceListener faceListener) { this.faceListener = faceListener; } @Override public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { float smiling = face.getIsSmilingProbability(); FaceExpression expression = FaceExpression.fromSmilingProbability(smiling); setNewFace(expression); } private void setNewFace(FaceExpression expression) { if (currentExpression != expression) { faceListener.onNewFace(expression); currentExpression = expression; } } @Override public void onMissing(FaceDetector.Detections<Face> detectionResults) { setNewFace(FaceExpression.LOOKING); } @Override public void onDone() { setNewFace(FaceExpression.LOOKING); } public static class Factory implements MultiProcessor.Factory<Face> { private final FaceListener faceListener; public Factory(FaceListener faceListener) { this.faceListener = faceListener; } @Override public Tracker<Face> create(Face face) { return new FaceTracker(faceListener); } } public interface FaceListener { void onNewFace(FaceExpression expression); } }