- Введение в обнаружение лиц на Android
- 1. Настройка проекта
- 2. Обнаружение лиц
- 3. Понимание ориентиров
- 4. Дополнительные данные лица
- Заключение
- Русские Блоги
- Введение в Android для разработки распознавания лиц на основе бесплатного SDK от Arcsoft
- введение
- Цель проекта
- Пошаговая реализация распознавания лиц
- Определить и реализовать связанные функции базы данных лица
- Реализация бизнес-логики
- Реализация распознавания лиц
Введение в обнаружение лиц на Android
Представленная с библиотеками Vision в Play Services 8.1, Face Detection позволяет вам как разработчику анализировать видео или изображение, чтобы найти человеческие лица. Когда у вас есть список лиц, обнаруженных на изображении, вы можете собирать информацию о каждом лице, таком как ориентация, вероятность улыбки, открывать или закрывать глаза у кого-то, а также конкретные ориентиры на их лице.
Эта информация может быть полезна для нескольких приложений, таких как приложение для камеры, которое автоматически делает снимок, когда все в рамке улыбаются с открытыми глазами или для увеличения изображений с глупыми эффектами, такими как рожки единорога. Важно отметить, что распознавание лиц не является распознаванием лица. Хотя информация может быть собрана о лицах, эта информация не используется библиотекой Vision для определения того, являются ли два лица одним и тем же лицом.
В этом руководстве будет использоваться неподвижное изображение для запуска API обнаружения лиц и сбора информации о людях на фотографии, а также иллюстрации этой информации с наложенной графикой. Весь код этого руководства можно найти на GitHub.
1. Настройка проекта
Чтобы добавить библиотеку Vision в свой проект, вам необходимо импортировать Play Services 8.1 или более в ваш проект. В этом учебнике импортируется только библиотека Play Services Vision. Откройте файл build.gradle вашего проекта и добавьте следующую строку компиляции в узел dependecies .
После того, как вы включили Play Services в свой проект, вы можете закрыть файл build.gradle вашего проекта и открыть AndroidManifest.xml. Вам нужно добавить элемент meta-data , определяющий зависимость лица в узле application вашего манифеста. Это позволяет библиотеке Vision знать, что вы планируете обнаруживать лица в своем приложении.
Когда вы закончите настройку AndroidManifest.xml, вы можете продолжить и закрыть его. Затем вам нужно создать новый класс с именем FaceOverlayView.java. Этот класс расширяет View и содержит логику обнаружения лиц в проекте, отображая растровое изображение, которое было проанализировано и нарисовано поверх изображения, чтобы проиллюстрировать точки.
Начнем с добавления переменных-членов в верхней части класса и определения конструкторов. Объект Bitmap будет использоваться для хранения растрового изображения, которое будет проанализировано, и объекты SparseArray of Face будут хранить каждое лицо, найденное в растровом изображении.
Затем добавьте новый метод внутри FaceOverlayView , называемый setBitmap (Bitmap bitmap) . На данный момент это просто сохранит битмап, переданный ему, однако позже вы будете использовать этот метод для анализа изображения.
Затем вам нужно растровое изображение. Я включил один в пример проекта GitHub, но вы можете использовать любое изображение, которое вы хотели бы, чтобы играть с Face Detection и посмотреть, что работает, а что нет. Когда вы выбрали изображение, поместите его в каталог res/raw. В этом учебнике предполагается, что изображение называется face.jpg.
После того, как вы поместили свое изображение в каталог res/raw, откройте res/layout/activity_main.xml. Этот макет содержит ссылку на FaceOverlayView , чтобы он отображался в MainActivity .
С установленным макетом откройте MainActivity и настройте FaceOverlayView из onCreate() . Вы делаете это, получая ссылку на представление, просматривая файл изображения face.jpg из исходного каталога в качестве входного потока и преобразуя его в растровое изображение. После того, как у вас есть растровое изображение, вы можете вызвать setBitmap на FaceOverlayView , чтобы передать изображение в свое пользовательское представление.
2. Обнаружение лиц
Теперь, когда ваш проект настроен, пришло время начать распознавать лица. Android. В setBitmap (Bitmap bitmap) вам необходимо создать FaceDetector . Это можно сделать с помощью FaceDetector.Builder , позволяя вам определить несколько параметров, которые влияют на то, как будут распознаваться быстрые лица и какие другие данные создаст FaceDetector .
Параметры, которые вы выбираете, зависят от того, что вы пытаетесь сделать в своем приложении. Если вы включите поиск ориентиров, то лица будут обнаружены медленнее. Как и в большинстве случаев в программировании, все имеет свои компромиссы. Чтобы узнать больше о вариантах, доступных для FaceDetector.Builder , вы можете найти официальную документацию на веб-сайте разработчика
Вам также необходимо проверить, работает ли FaceDetector . Когда пользователь впервые использует обнаружение лиц на своем устройстве, Play Services необходимо выйти и получить набор небольших собственных библиотек для обработки запроса вашего приложения. Хотя это почти всегда будет сделано до того, как ваше приложение завершит запуск, важно справиться с непредвиденными обстоятельствами, что это не удалось.
Если FaceDetector работает, вы можете преобразовать растровое изображение в объект Frame и передать его детектору для сбора данных о лицах на изображении. Когда вы закончите, вам нужно будет отпустить детектор, чтобы предотвратить утечку памяти. Когда вы закончите обнаружение лиц, вызовите invalidate() , чтобы вызвать перерисовку представления.
Теперь, когда вы обнаружили лица на своем изображении, пришло время их использовать. В этом примере вы просто нарисуете зеленую рамку вокруг каждого лица. Поскольку invalidate() вызывается после того, как лица были обнаружены, вы можете добавить всю необходимую логику в onDraw (Canvas canvas) . Этот метод гарантирует, что битмап и грани установлены, затем нарисуйте растровое изображение на холсте, а затем нарисуйте квадрат вокруг каждой грани.
Так как разные устройства имеют разные размеры дисплея, вы также будете отслеживать масштабированный размер растрового изображения, чтобы все изображение было всегда видимым на устройстве, и все наложения рисуются соответствующим образом.
Метод drawBitmap (Canvas canvas) рисует ваше растровое изображение на холсте и соответствующим образом определяет его, а также возвращает множитель для правильного масштабирования ваших других измерений.
Метод drawFaceBox (Canvas canvas, double scale) становится немного интереснее. Каждое обнаруженное и сохраненное лицо имеет значение позиции выше и слева от каждого лица. Этот метод займет это положение и нарисует из него зеленый прямоугольник, чтобы охватить каждую грань в зависимости от ее ширины и высоты.
Вам нужно определить свой объект Paint , а затем прокрутить каждое Face в вашем SparseArray , чтобы найти его положение, ширину и высоту и нарисовать прямоугольник на холсте, используя эту информацию.
На этом этапе вы сможете запустить приложение и увидеть свое изображение с прямоугольниками вокруг каждого обнаруженного лица. Важно отметить, что API распознавания лиц по-прежнему остается довольно новым на момент написания этой статьи, и он не может обнаружить каждого лица. Вы можете играть с некоторыми настройками в объекте FaceDetector.Builder , чтобы надеяться собрать больше данных, хотя это не гарантировано.
3. Понимание ориентиров
Ориентиры — это точки интереса на лице. API Face Detection API не использует ориентиры для обнаружения лица, а скорее определяет лицо целиком, прежде чем искать ориентиры. Вот почему открытие ориентиров — это необязательная настройка, которая может быть активирована через FaceDetector.Builder .
Вы можете использовать эти ориентиры в качестве дополнительного источника информации, например, где находятся глаза субъекта, чтобы вы могли реагировать соответствующим образом в своем приложении. Есть 12 ориентиров, которые можно найти:
- левый и правый глаз
- левое и правое ухо
- левый и правый ушные наконечники
- основание носа
- левая и правая щека
- левый и правый угол рта
- основание рта
Знаки, которые доступны, зависят от угла распознанного лица. Например, у кого-то, стоящего перед боком, будет только один глаз, который означает, что другой глаз не будет обнаружен. В следующей таблице показано, какие ориентиры должны обнаруживаться на основе угла Эйлера Y (направление влево или вправо) лица.
Euler Y | Видимые ориентиры |
---|---|
36° | Правый правый глаз, правый рот, правое ухо, основание носа, правая щека |
Ориентиры также невероятно просты в использовании в вашем приложении, поскольку вы уже включили их во время обнаружения лица. Вам просто нужно вызвать getLandmarks () на объекте Face , чтобы получить List из Landmark , с которыми вы можете работать.
В этом уроке вы нарисуете небольшой круг на каждом обнаруженном ориентире, вызвав новый метод, drawFaceLandmarks(Canvas canvas, double scale) , из onDraw(canvas canvas) вместо drawFaceBox(Canvas canvas, double scale) . Этот метод занимает положение каждого ориентира, настраивает его для масштаба растрового изображения, а затем отображает знаковый круг индикатора.
После вызова этого метода вы должны увидеть маленькие зеленые круги, покрывающие обнаруженные грани, как показано в примере ниже.
4. Дополнительные данные лица
Хотя положение лица и его ориентиров полезно, вы также можете узнать больше информации о каждом лице, обнаруженном в вашем приложении, с помощью некоторых встроенных методов из объекта Face . Методы getIsSmilingProbability () , getIsLeftEyeOpenProbability () и getIsRightEyeOpenProbability () пытаются определить, открыты ли глаза или если обнаруженное лицо улыбается, возвращая поплавок в диапазоне от 0.0 до 1.0. Чем ближе к 1.0, тем более вероятно, что человек улыбается или у него открывается левый или правый глаз.
Вы также можете найти угол лица по осям Y и Z изображения, проверив его значения Эйлера. Значение Z Euler будет всегда сообщаться, однако вы должны использовать точный режим при обнаружении граней для получения значения X. Вы можете увидеть пример того, как получить эти значения в следующем фрагменте кода.
Заключение
В этом уроке вы узнали об одном из основных компонентов библиотеки Play Services Vision, Face Detection. Теперь вы знаете, как распознавать лица в неподвижном изображении, как собирать информацию и находить важные ориентиры для каждого лица.
Используя то, что вы узнали, вы сможете добавить некоторые замечательные функции в свои собственные приложения для увеличения количества неподвижных изображений, отслеживания лиц в видеопотоке или всего остального, что вы можете себе представить.
Источник
Русские Блоги
Введение в Android для разработки распознавания лиц на основе бесплатного SDK от Arcsoft
Перепечатано с: https://blog.csdn.net/feishixin/article/details/77718680
введение
Эпоха искусственного интеллекта быстро приближается, среди которых распознавание лиц в настоящее время является самой популярной технологией, и она также все чаще используется в Китае, например, смахивающая карта лица, приложение с отпечатком лица, распознавание личности, контроль доступа к лицу и т. Д. Текущая технология распознавания лиц делится на два способа: вызовы WEBAPI и SDK. Для WEBAPI требуется сетевое взаимодействие в реальном времени, а вызовы SDK можно использовать в автономном режиме.
Как относительно обширная платформа Android, как добиться распознавания лиц.
Эта статья представит мой опыт в этой области в качестве примера.
SDK для распознавания лиц, предоставленный ArcSoft на этот раз, этот SDK также может быть разработан в соответствии с различными сценариями применения и имеет высокую целевую направленность. Включая распознавание лиц, отслеживание лиц и распознавание лиц, он может нормально работать даже в автономном режиме.
ArcSoft — компания по обработке изображений, имеющая опыт работы в Силиконовой долине. Помимо технологии Face она также имеет ряд технологий обработки изображений и видео. Их алгоритм обработки двойной камеры и алгоритм улучшения лица включают в себя ряд производителей мобильных телефонов, включая OPPO VIVO и SUMAMNG.
Цель проекта
Нам нужно реализовать функцию распознавания лиц. Проще говоря, это задняя камера машины, которая распознает информацию о лице, снятую в режиме реального времени в камере.Если база данных человека была зарегистрирована, она отображает информацию о распознанном лице, такую как зарегистрированное имя, если это не так, это означает, что она не зарегистрирована.
Эта функция имеет несколько прикладных сценариев, таких как железнодорожные станции или системы регистрации и контроля доступа.
Процесс распознавания лиц
Распознавание лиц включает в себя два необходимых процесса: регистрацию лиц и распознавание в реальном времени.
Регистрация лица относится к регистрации информации о функции лица в базе данных информации о лице. Там может быть много источников регистрации лица, таких как
Национальный ID Банк
Корпоративная самостоятельная библиотека распознавания лиц
Большая интернет-база данных
Извлечение элемента лица является необратимым процессом, вы не можете восстановить фотографию лица человека из информации об элементе лица.
Когда используется онлайн-библиотека, необходимо передать информацию о фотографии или извлечь значения параметров изображения.
Автономный SDK относительно безопасен, но онлайн-SDK обычно предоставляет больше методов доступа и вызова, которые следует выбирать в соответствии с реальной ситуацией.
Процесс регистрации и распознавания лиц можно представить на следующем рисунке.
Перед разработкой нужно перейти на официальный сайт Hongsoft
http://www.arcsoft.com.cn/ai/arcface.html
Загрузите библиотеку Android. В загруженном сжатом файле 3 сжатых файла, как показано ниже:
Среди них первое распознавание лиц, распознавание лиц.
Обнаружение лица является основой технологии лица. Используя ArcSoft Face Engine, оно может помочь вам обнаружить и найти лица на изображениях (изображениях или видео).
Второе распознавание лица,
Распознавание лиц. Механизм может работать независимо в терминальном устройстве или на независимом сервере, а приложение может независимо запускать алгоритм, который может обеспечить конфиденциальность пользовательских данных, автономно работать и защищать конфиденциальную информацию пользователя.
Третье отслеживание лиц,
Отслеживание лица. Точно определите местонахождение и отследите положение области лица, так как положение лица человека изменяется, положение лица может быть быстро определено, и это подходит для различных выражений, пола, возраста, позы, освещения и других условий.
Структура этих трех пакетов в основном одинакова, нам нужно распаковать их.
-doc В этом каталоге хранятся документы GUIDE, которые являются пояснительными документами, представляют некоторые общедоступные API и предоставляют пример кода.
— библиотеки, используемые при разработке библиотек. Вам нужно ссылаться на все из них в одной структуре каталогов на ваш проект.
— пример кода кода
Примечание: Коды активации APP_Id и SDK_Key также необходимы во время разработки.Эти коды активации можно найти в разделе «Управление учетной записью-> Ваша запись приложения», а соответствующий код активации можно найти в соответствующем приложении загрузки.
Версия и экологические требования
В соответствии с инструкциями SDK мы используем android arm32 и версию 5.0. IDE, которую мы используем, — это android studio, вы также можете использовать eclipse, но все же рекомендуется использовать android studio, поскольку теперь это стандарт де-факто.
Пошаговая реализация распознавания лиц
Эта статья будет основана на этих трех библиотеках, начиная с регистрации лица и заканчивая распознаванием лица. Продемонстрировать процесс распознавания лица во всем. Если вы не хотите начинать с нуля, вы можете перейти кhttps://github.com/asdfqwrasdf/ArcFaceDemoЗагрузите полный образец программы
Откройте андроид студию, соберите проект, выберите API совместимость 4.0.
Пакет Arcsoft Face SDK является таким пакетом, вы можете найти и импортировать эти файлы в сжатый пакет, который вы скачали.
Папка проекта после импорта показана ниже.
Определить и реализовать связанные функции базы данных лица
Как упоминалось ранее, мы хотим определить нашу собственную базу данных лиц. База данных лиц хранится в списке в программе и сохраняется в виде txt-файла в системе.
Через механизм запросов вы можете узнать, что информация о лице хранится в классе AFR_FSDKFace. Основная структура этого
Если регистрация лица необходима, нам нужно определить другой класс, чтобы связать информацию о лице с именем.
Массив байтов, содержащий длину и содержание информации о функции.
Мы определяем эти функции в классе FaceDB. FaceDB должен включать определение движка, инициализацию, сохранение информации о лице в хранилище и чтение информации о лице из хранилища.
Из соображений структуры программы мы разделяем код, связанный с распознаванием лиц, на класс FaceDB и определяем необходимые переменные
Определите конструктор с параметрами для инициализации двигателя
Определите деструктор для освобождения системных ресурсов, занятых движком
Реализовать функции добавления и чтения лиц
Обычно база данных лиц сохраняется в базе данных. На этот раз мы используем List для выполнения простого моделирования и сохранения его в текстовом файле, чтения текста при необходимости и записи в файл при сохранении.
Мы используем метод addFace для добавления информации о лице для регистрации в базу данных лиц
Читать лица из файла, используя loadFaces
Реализация бизнес-логики
Осуществление регистрации лица
Обязательным условием для распознавания лиц является то, что информация о лицах сначала должна быть зарегистрирована в базе данных лиц, а база данных лиц зарегистрирована.
Первый шаг — это, конечно же, регистрация фотографий. Мы можем использовать камеру или фотографии. Мы используем AlertDialog, чтобы открыть окно выбора
Обрабатывается в соответствующем обработчике событий
После получения фотографии нам необходимо реализовать распознавание лиц в будущем.
В приведенном выше коде мы получили данные изображения bmp, которые нам нужны, и вынули изображение.
Мы реализуем этот код в классе Application с помощью функции decodeImage
Вызовите AFD_FSDK_StillImageFaceDetection, чтобы вернуть обнаруженную информацию о лице
Для регистрации лица необходимо сначала определить лицо. Для статических изображений Angsoft Face SDK соответствует FD и предоставляет имя метода с именем AFD_FSDK_StillImageFaceDetection.
Давайте посмотрим на список параметров
тип | имя | объяснение |
---|---|---|
byte[] | data | Входные данные изображения |
int | width | Ширина изображения |
int | height | Высота изображения |
int | format | Формат изображения |
List | list | Обнаруженные лица будут добавлены в список. |
Обратите внимание, что механизм объектов AFD_FSDKFace используется повторно для внутреннего использования. Чтобы сохранить его, клонируйте объект AFD_FSDKFace или сохраните его отдельно
AFD_FSDKFace является результатом распознавания лиц и определяется следующим образом
mRect определяет прямоугольник Rect
Перед этим необходимо отметить, что формат изображения, используемый ArcSoft Face SDK, является форматом NV21, поэтому нам необходимо преобразовать полученные изображения в соответствующий формат. Соответствующие функции преобразования представлены в Android_extend.jar.
Теперь мы можем вызвать метод AFD_FSDK_StillImageFaceDetection
Нарисуйте рамку лица
Список содержит информацию о положении и глубине обнаруженных лиц.
Мы можем нарисовать информацию об обнаруженном положении лица на картинке в прямоугольной рамке для представления информации об обнаруженном лице.
Зарегистрировать личную библиотеку
Лицо обнаружено, мы можем ввести соответствующую информацию описания и добавить ее в базу данных лиц.
Чтобы повысить точность распознавания, мы можем зарегистрировать информацию о лице для человека несколько раз.
Наконец, не забудьте уничтожить механизм распознавания лиц.
Реализация распознавания лиц
После того, как приведенный выше код подготовлен, мы можем запустить нашу функцию распознавания лиц. Мы используем стороннюю библиотеку расширений, библиотеку расширений ExtGLSurfaceView CameraGLSurfaceView, которая использует ImageView и TextView для отображения обнаруженных лиц и соответствующей информации описания.
Во-первых, определить макет.
Поскольку формат изображения, требуемый движком, является NV21, формат изображения в камере должен быть предварительно установлен на NV21
Чтобы распознать лицо с камеры, вам нужно использовать библиотеку FT. Библиотека FT оптимизирует часть обнаружения лица алгоритма отслеживания лица. Это библиотека, оптимизированная для обработки видео.
Инициализируйте Механизм Обнаружения Лица (FT)
Как и FD, нам нужно инициализировать движок распознавания лиц FT.
В функции обработки события предварительного просмотра камеры сначала вызывается функция распознавания лица FT, а затем вызывается функция числа извлечения функции информации о лице в FR.
Результаты лица сохраняются в результате. Мы можем сохранить его или сравнить с другой информацией в системе.
Когда информация о функции счета больше 0,6, мы можем считать, что лицо совпадает. Отображается информация о совпадении лиц.
В приведенном выше цикле вы можете видеть, что это поиск в реальной библиотеке. Наша цель — продемонстрировать, что на практике мы можем выпрыгнуть из цикла после нахождения грани с высоким совпадающим значением.
Давайте посмотрим на результаты пробега.
Это довольно хорошо. Чжун Ханьлян красивый.
Весь код в этом документе можно найти вhttps://github.com/asdfqwrasdf/ArcFaceDemoСкачать. Если вам нужно найти больше демонстраций для распознавания лиц, вы также можете перейти на форум Hongsoft.
http://www.arcsoft.com.cn/bbs/forum.php?mod=forumdisplay&fid=45&page=1
Приложение: проблемы и решения
Если вы используете примеры из github, вы можете столкнуться со следующими проблемами.
Plugin with id ‘com.android.application’ not found
Исходный код, загруженный непосредственно с github, будет иметь эту проблему.
Решение: Откройте файл [папка проекта] \ app \ build.gradle
Добавить в конец файла
Failed to find build tools revision 25.0.0.2
Это происходит главным образом потому, что версия сборки не совпадает с версией, указанной в Gradle. Следуйте инструкциям, чтобы загрузить или изменить обозначение версии.
После того, как загруженный код скомпилирован в Gradle, эта ошибка будет возникать непосредственно по умолчанию. Причина кроется в использовании нативных библиотек. Собственные библиотеки не поддерживают текущую архитектуру процессора.
Сначала проверьте, импортируется ли необходимый файл. Всего нужно импортировать четыре .so файла.
Кроме того, убедитесь, что вы используете отладку реальной машины. Поскольку камера называется, пожалуйста, используйте отладку реальной машины.
Распознавание лиц является современной технологией горячей точки, с широким спектром применения, хорошим пользовательским интерфейсом, низкой зависимостью от аппаратного обеспечения и не требует дорогостоящих сенсорных чипов. Камера высокого разрешения может сделать это. Предыдущая стоимость заключалась в том, что SDK для распознавания лиц был более дорогим, но теперь, когда ArcSoft SDK является бесплатным, стоимость интеграции значительно снижается.
Источник