Чтобы сделать правильную фотографию для удостоверения личности, необходимо выполнить ряд условий: одно из них — это оголенный овал лица. быть видимым, и ничто не должно мешать естественная форма лица. Об этом говорится в Законе о регистрации актов гражданского состояния.
Изображение 1 неверно
Давайте рассмотрим, что может быть наиболее частой причиной затемнения изображения человека на фотографии. Законодатель приводит нам в качестве примера закрытие лица игрушкой или другим предметом и волосами.
Поразмыслив, можно прийти к выводу, что причиной укрытия также может быть слишком длинная челка (выходящая на брови и глаза), головные уборы (шапки, тюрбаны), крупные украшения, воротники или шарфы.
Как грамотно исключить такие случаи?
На помощь нам придут два решения в области искусственного интеллекта Api обнаружения лиц из Google ML Kit и сеть семантической сегментации BiseNet, обученная на наборе данных CelebAMask-HQ.
Давайте сначала посмотрим на вторую из этих сетей. Его задача — семантическая сегментация, то есть разделение изображения на определенные, заранее определенные области. В случае этой сети это в основном элементы физиогномики, такие как кожа лица, губ, глаз, бровей, ушей и волос, а также одежда, головные уборы и украшения. Результаты этого деления можно увидеть на фото 2.
Именно благодаря этой сети мы можем проверить, есть ли у человека на фото головной убор или серьги. Головные уборы на фотографиях для документов в Украине запрещены не только из-за возможности закрывать лицо, но всегда при условии, что их ношение не продиктовано религиозными соображениями.
Поэтому, если на фотографии будет обнаружен головной убор, мы можем сразу отклонить это как неправильное. В случае с сережками дело не так очевидно, они не запрещены, если они не слишком большие и не влияют на вид лица.
Таким образом, обнаружение украшения само по себе не приводит к отклонению фотографии, но проверка его размера по отношению к размеру лица является важным определяющим фактором.
Чтобы проверить, не слишком ли большие украшения на фотографии, сначала разрешите нашей сети сегментирования разделить фотографию лица на все обнаруженные ею области.
На следующем этапе подсчитываем площадь кожи лица и площадь, занимаемую сережками. Затем мы сравниваем эти значения друг с другом. В ходе нескольких тестов мы определили, что сережки размером более 0,5% кожи лица уже могут считаться слишком большими для фотографий в документе.
фото 2: Семантическая сегментация лиц с сетью BiseNet, обученная на источнике набора данных CelebAMask-HQ: https://github.com/zllrunning/face-parsing.PyTorch
Устранение проблемы украшений и головных уборов дает очень высокий доход, но это не самые распространенные случаи прикрытия лица на фотографиях.
Самый типичный, потому что лицо покрывает вызванные волосами, слишком длинная челка, перекрытие бровей и глаз, распущенные волосы по бокам щек, распущенные пряди, проходящие по лицу.
Эта проблема была гораздо более сложной, и ее нельзя было решить, проверив наличие волос или даже посчитав их площадь. Сам факт наличия даже самой объемной прически еще не означает, что вы закрываете лицо. Необходимо было внедрить совершенно новый подход, и в этом нам помог еще один инструмент -Api распознавания лиц из Google ML Kit.
Это решение позволяет быстро обнаруживать лица и отмечать на них ключевые точки, как описано на фото 3. Оно не дает нам информации о размере конкретных элементов на лице, но быстро позволяет нам узнать, где именно они расположены. Мы решили этим воспользоваться.
Как видно на фотографии ниже, синяя линия соединяет 36 точек, которые определяют контур лица, обычно проходят с правой и левой стороны лица, а также подбородок (в середине контура лица) и через половину лба.
Объединение всех этих точек в одну согласованную маску дает нам информацию о том, где, согласно сети обнаружения, находится лицо.
Эта сеть устойчива к любым видам вуали. Он точно предсказывает, где находится все лицо, даже если вы не можете его полностью видеть, на основе большого количества информации, такой как положение глаз, положение носа и т. д.
С другой стороны, представленная нами ранее сеть сегментации маркирует кожу лица только там, где она видна. Легко увидеть, что, вероятно, там, где эти две сети возвращают неперекрывающиеся маски, имело место какое-то перекрытие.
изображение 3 Ключевые точки распределения на лице и соответствующие числа из источника ML Kit Face Detection: https://developers.google.com/ml-kit/vision/face-detection
Возможной проблемой при таком подходе может быть … челка. В общем, челка — это не стрижка, запрещенная на фото для документов, запрещена только та, которая закрывает брови и/или глаза. Однако, как мы отметили ранее, точки обнаружения из ML Kit Api проходят посередине лба. Если ниже этой линии есть волосы, это будет считаться прикрытием лица. Это нежелательная ситуация. Поэтому, чтобы этого не произошло, мы решили «вырезать» созданную маску с обнаруженными точками точно над бровями.
Для этого мы ограничили выбор точек от диапазона 0-35 до диапазона 5-31 (как показано на фото 3). Таким образом, маска, полученная в результате обнаружения, не будет учитывать пространство над бровями, и, следовательно, не откажется от правильных фотографий.
В такой подготовленной ситуации мы выполняем вычитание маски сегментации из маски обнаружения.
Если эта операция оставляет какие-либо фрагменты мы знаем, что лицо было закрыто. Считаем ли мы это покрытие проблемным, зависит только от принятого порога. Снова сравниваем площадь «вырезок» с общей площадью обнаруженного лица. Основываясь на нашем исследовании, мы предположили, что если размер этих «вырезок» превышает 1% площади кожи лица, лицо слишком прикрыто.
Вышеупомянутая ситуация хорошо иллюстрируется фото 4.
Все эти решения вместе делают обнаружение покрытия лица в нашем приложении Photo.me очень быстрым, так что оно работает в реальном времени на работающей камере, а также в основном надежно.
фото 4: создание изображения из исходного изображения 1) маска сегментации 2) маска обнаружения с удаленной частью над бровями 3) разница обеих масок, показывающая окклюзию
Наконец, давайте рассмотрим, для чего еще мы можем использовать описанные выше инструменты. Как я уже упоминал, Google ML Kit Api — очень легкий и быстрый инструмент.
Благодаря этому мы можем быстро получить информацию, есть ли на фотографии лица или даже изображение с камеры. Точного определения кепки, украшений или области лица не будет, но мы очень быстро получаем точную информацию, где находится лицо на обрабатываемой клетке.
Кроме того, Api также возвращает информацию о вероятности открытия каждого из глаз и о том, улыбается ли человек на фотографии или нет. Такая информация позволяет нам обрезать исходную фотографию до обнаруженного лица и дополнительно изучить его параметры в уменьшенном размере.
На фотографиях для документов тоже не стоит улыбаться и глаза должны быть открыты. Следовательно, эта информация может быть очень полезной во многих местах.
В случае сети BiseNet мы можем получить еще больше информации для сегментации, например, если у человека есть очки, вырежьте их и проверьте, нет ли темноты. линзы или отражения.
Мы также можем узнать, где именно видны все элементы лица, и подстроить под это окончательный размер фотографии. Сегментация фона позволяет нам проверить, достаточно ли он яркий и однородный.
Сегментация кожи лица позволяет вырезать ее и проверить, равномерно ли она освещена, не содержит ли теней и рентгеновских лучей, а также имеет ли свет естественный цвет. И все это пока лишь часть возможностей, которые есть у этих инструментов. Их использование ограничено только вашей фантазией.