2016-03-31 4 views
0

Я пытаюсь сделать простое приложение, чтобы проинструктировать пользователя (звуковые инструкции), когда лицо обнаружено и на основе отслеживаемого уровня счастья. Я использую FaceTracker в качестве базы для своей программы.Обнаружение лица и отслеживание с использованием видения android

Я не могу определить, когда лицо обнаружено, и где я могу вставить звуковые инструкции в конвейер, обнаруженный лицом. Я имею в виду, как контроль течет по трубопроводу.

Может кто-нибудь предложить на это?

ответ

0

В 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()); 
+0

Благодарим за своевременный ответ @ pm0733464. В этот момент я действительно застрял. Да. Вы правы, мне не нужно захватывать несколько лиц, LargestFaceFocusingProcessor должен делать для моих целей. Позвольте мне попробовать. – jaymj

+0

Когда я добавил объект TTS для высказывания какого-либо текста (аудио), на OnUpdate, он прекратил отслеживать лица !! Я тоже попробовал OnNewItem. Не знаю, почему! – jaymj

+0

Возможно, вам нужно запустить TTS в отдельном потоке. Я предполагаю, что вызов, который вы делаете, блокирует, а это означает, что конвейер отслеживания лица не возобновится, пока он не вернется. – pm0733464