Может ли отслеживание лица Mobile Vision API, а не обнаружение, использоваться независимо от его CameraSource? - PullRequest
0 голосов
/ 27 апреля 2018

Этот вопрос касается использования Google Mobile Vision Face API на Android.

История (фон) и что я хочу сделать

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

Теперь я уже успешно реализовал такую ​​функцию с помощью API-интерфейса Mobile Vision Распознавание лиц . Его механизм таков:

  1. CameraView (я использую Фотоаппарат здесь), что может передать каждый кадр камеры в обратном вызове
  2. Я превращаю этот кадр в Bitmap
  3. Растровое изображение передается в Mobile Vision API для обнаружения лица
  4. При обнаружении лица я получаю его положение и размер
  5. Используя эту информацию о положении, нарисуйте что-нибудь в другом пользовательском представлении.

Проблема в том, вышеуказанный процесс, очевидно, занимает слишком много времени . Я могу обновлять положение наложенного изображения 3-5 раз в секунду, еще реже на медленных устройствах.

Если посмотреть на профилирование, то, как ни удивительно, самый тяжелый метод - это шаг 3 (Определение лица). В среднем требуется 100 мс, чтобы выполнить один раз.
Второй тяжелый метод - преобразование кадра NV21 в растровый объект, который занимает около 90 мс.
Подводя итоги, я получаю обновление FPS от 3 до 5.

Но кроме этого, все работает отлично - изображение может быть получено с высоким качеством , с автофокусом и масштабированием .

Как насчет слежения за лицом?

С другой стороны, API Mobile Vision предоставляет еще один API - Отслеживание лица .

В примере приложения Google отслеживание выполняется очень быстро, оно почти мгновенно следует за лицами в окне предварительного просмотра камеры. Как указано в документе, это происходит потому, что механизм совершенно другой - вместо обнаружения лиц в каждом кадре, после обнаружения лица, позиция просто следует за его движением, не выполняя никакого обнаружения лица.

Но на самом деле такой механизм достаточно хорош в моем случае использования!

Однако, глядя на пример кода, похоже, что мне нужно использовать его встроенную реализацию CameraSource. Это можно найти в коде ниже:

    mCameraSource = new CameraSource.Builder(context, detector)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_BACK)
            .setRequestedFps(30.0f)
            .build();

detector является главным героем здесь, и он используется здесь только при переходе к CameraSource. Похоже, я должен придерживаться этого CameraSource.

Однако, хотя этот источник камеры имеет метод takePicture(), я не могу найти способ реализовать автофокус и увеличение .

Наконец, вопрос

Моя конечная цель состоит в том, чтобы реализовать функцию, о которой я упоминал в начале, со следующими требованиями:

  1. Высокое качество изображения
  2. Автофокус
  3. Увеличить
  4. Быстрое положение лица обновление (примерно 10 раз в секунду достаточно хорошо)

1-3 можно сделать с помощью функции распознавания лиц, но не 4;
Хотя 4 можно сделать с помощью Face Tracker, но не 1-3.

Есть ли способ выполнить все 1-4? Я приветствую любые предложения, даже если они используют другую библиотеку вместо Mobile Vision.

Спасибо, что дочитали до конца такой длинный вопрос!

1 Ответ

0 голосов
/ 02 мая 2018

CameraSource.java доступен на GitHub по разрешительной лицензии Apache . Не стесняйтесь добавлять автофокус и зум.

...