В API есть класс Tracker, который вы распространяете для обратных вызовов, когда лицо изначально обнаружено, обновлено и покидает рамку. Например, FaceTracker имеет следующий код:
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
Я думаю, что вы хотите сделать, это позвонить код для аудио инструкции в OnUpdate метода, на основе значений, передаваемых в для связанного лица.
В этом руководстве рассматривается поток управления трубопровода для приложения лица трекера:
https://developers.google.com/vision/face-tracker-tutorial#creating_the_face_detector_pipeline
В вашем случае, если вы только отслеживание одного пользователя, вы, вероятно, хотите использовать LargestFaceFocusingProcessor, а не MultiProcessor, используемый в примере Face Tracker. Разница в том, что LargestFaceFocusingProcessor специализирован для отслеживания только одного лица (то есть пользователя), а не нескольких лиц. Программа установки будет выглядеть примерно так:
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());
Благодарим за своевременный ответ @ pm0733464. В этот момент я действительно застрял. Да. Вы правы, мне не нужно захватывать несколько лиц, LargestFaceFocusingProcessor должен делать для моих целей. Позвольте мне попробовать. – jaymj
Когда я добавил объект TTS для высказывания какого-либо текста (аудио), на OnUpdate, он прекратил отслеживать лица !! Я тоже попробовал OnNewItem. Не знаю, почему! – jaymj
Возможно, вам нужно запустить TTS в отдельном потоке. Я предполагаю, что вызов, который вы делаете, блокирует, а это означает, что конвейер отслеживания лица не возобновится, пока он не вернется. – pm0733464