Обнаружение и отслеживание движений лица пользователя может быть очень мощной функцией, которую вы можете разработать в своем приложении. С помощью этой функции вы можете управлять и получать входные запросы от движений лица пользователя для выполнения некоторых намерений в приложении.

Требования для использования ML Kit:

Чтобы использовать HMS ML Kit, вам необходимо интегрировать HMS Core в свой проект, а также добавить HMS ML Kit SDK. После этого добавьте разрешения на запись во внешнее хранилище и камеру.

Вы можете нажать на эту ссылку, чтобы интегрировать HMS Core в свой проект.

После интеграции HMS Core добавьте HMS ML Kitdependencies в файл build.gradle в каталоге приложения.

Добавить права доступа к файлу манифеста:

Процесс разработки:

В этой статье мы собираемся использовать HMS ML Kit для отслеживания движений лица пользователя. Чтобы использовать эту функцию, мы будем использовать 3D-функции ML Kit. Мы собираемся использовать одно действие и вспомогательный класс.

XML-структура действий:

Мы собираемся использовать SurfaceView для использования камеры на экране мобильного телефона. Мы собираемся добавить обратный вызов в нашу SurfaceHolderCamera, чтобы отслеживать, когда она создается, изменяется и уничтожается.

Внедрение представления HMS ML Kit по умолчанию:

ML3DFaceAnalyzer → Анализатор лиц, который используется для обнаружения 3D-лиц.

Lens Engine → Класс с инкапсулированными функциями инициализации камеры, получения кадра и логики управления.

FaceAnalyzerTransactor → Класс для обработки результатов распознавания. Этот класс реализует MLanalyzer.MLTransactor (общий API, который должен быть реализован обработчиком результатов обнаружения для обработки результатов обнаружения) и использует метод transactResult в этом классе для получения результатов распознавания и реализации конкретных услуг.

SurfaceHolder → Добавляя обратный вызов к представлению поверхности, мы будем обнаруживать изменения поверхности, такие как изменение поверхности, создание и уничтожение. Мы будем использовать этот обратный вызов объекта для обработки различных ситуаций в приложении.

В этом блоке кода мы в основном запрашиваем разрешения. Если пользователь уже предоставил свои разрешения в функции инициализации, мы создадим ML3DFaceAnalyzer,чтобы обнаруживать трехмерные лица. Мы будем обрабатывать места изменения поверхности с помощью функций surfaceHolderCallback. Дальше для обработки результатов создадим объект FaceAnalyzerTransactor и транзактор анализатора. После того, как все настроено, мы начнем анализировать лицо пользователя с помощью функции prepareView.

В этом блоке кода мы настроим параметры нашего объекта 3DFaceAnalyzer.

setTracingAllowed →Указывает, следует ли включить отслеживание лица. Из-за того, что мы хотим проследить лицо, мы устанавливаем это значение true.

setPerformanceType → Существует два предпочтительных способа установки этого значения. Режим предпочтения скорости/точности для выбора анализатором приоритета точности или скорости при обнаружении лиц. Мы выбрали TYPE_PRECISION для этого примера.

С помощью метода MLAnalyzerFactory.getInstance().get3DFaceAnalyzer(settings) мы создадим объект 3DFaceAnalyzer.

  • Обработка изменений поверхности

При изменении поверхности мы создадим LensEngine. Мы получим значения ширины и высоты поверхности в функции surfaceChanged по p0 и p1. . Когда мы создадим LensEngine, мы будем использовать эти параметры. Мы создали LensEngine, установив контекст и уже созданный 3DFaceAnalyzer.

applyFps → Устанавливает частоту кадров предварительного просмотра (FPS) камеры. Частота кадров предварительного просмотра камеры зависит от возможностей прошивки камеры.

setLensType →Устанавливает тип камеры: BACK_LENS для задней камеры и FRONT_LENS для передней камеры. В этом примере мы будем использовать фронтальную камеру.

enableAutomaticFocus → Включает или отключает функцию автоматической фокусировки для камеры.

Метод surfaceChanged будет выполняться каждый раз при изменении ориентации экрана мобильного устройства. Мы также обработали эту ситуацию в функции createLensEngine. LensEngine создаст значения ширины и высоты мобильного телефона, проверив ориентацию.

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

освобождение →освобождает ресурсы, занятые LensEngine. Мы используем эту функцию всякий раз, когда вызывается метод surfaceDestroyed.

  • Анализ результатов

Мы создали объект FaceAnalyzerTransactor в методе init. Этот объект используется для обработки результатов.

Из-за того, что он реализован из класса MLTransactor, мы должны переопределить методы destroy и transactResult. С помощью метода transactResult мы можем получить результаты распознавания.MLAnalyzer. Он получает обнаружение в виде списка результатов. Поскольку в этом примере будет только одно лицо, мы получим первый объект ML3DFace в списке результатов.

ML3DFace представляет обнаруженное 3D-лицо. Он имеет такие функции, как ширина, высота, угол поворота, точки 3D-координат и матрица проекции.

get3DFaceEulerX() →угол наклона трехмерной грани. Положительное значение указывает, что лицо смотрит вверх, а отрицательное значение указывает, что лицо смотрит вниз.

get3DFaceEulerY() →угол наклона трехмерного лица. Положительное значение указывает, что лицо поворачивается к правой стороне изображения, а отрицательное значение указывает, что лицо поворачивается к левой стороне изображения.

get3DFaceEulerZ() →3D-угол крена лица. Положительное значение указывает на вращение по часовой стрелке. Отрицательное значение указывает на вращение против часовой стрелки.

Результаты всех вышеперечисленных методов меняются от -1 до +1 в зависимости от движения лица. В этом примере я покажу демонстрацию метода get3DFaceEulerY().

  • Не двигает головой

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

  • Изменение направления головы вправо

Когда я двигал головой в правильном направлении, результаты обычно были между 0,5 и 1. Таким образом, можно сказать, что если значения больше 0,5, пользователь двигал головой в правильном направлении.

  • Изменение направления головы налево

Когда я двигал головой влево, результаты обычно были между -0,5 и -1. Таким образом, можно сказать, что если значения меньше -0,5, пользователь двигал головой влево.

Как видите, HMS ML Kit может успешно определять лицо пользователя и отслеживать движения лица. Этот проект и коды доступны по ссылке github в области ссылок.

Вы также можете реализовать другие функции ML Kit, такие как Службы, связанные с текстом, Службы, связанные с языком/голосом, Службы, связанные с языком/голосом, strong>Службы, связанные с изображениями, Службы, связанные с лицом/телом и Службы обработки естественного языка.

Ссылки:

МЛ Кит

Документация ML Kit

Распознавание лиц с помощью ML Kit

Гитхаб