Как определить, имеет ли изображение лица сплошной фон с высоким контрастом между лицом и фоном?

#image-processing

Вопрос:

Мы интегрируем набор устройств распознавания лиц в платформу управления, управляющую разрешениями доступа, камерами безопасности и т.д. Устройства имеют API REST, с помощью которого мы можем загружать изображения пользователей и получать либо двоичное представление функций, найденных на каждом лице, либо ошибку, когда никакие функции не могут быть извлечены. Я не знаю, какой алгоритм использует читатель для извлечения функций, и мне вряд ли скажут, так как это большая часть основного бизнеса производителя.

Изображения предоставляются самими пользователями с помощью онлайн-средства проверки, которое отправляет их простаивающему читателю и проверяет, возвращает ли оно строку функций или ошибку. В ходе наших тестов мы обнаружили, что изображения с сплошным фоном и высоким контрастом между ним и лицом работают лучше, чем изображения с шумным фоном и/или с низким контрастом между этим фоном и лицами, содержащимися на изображениях. Часто читатель может извлечь черты лица из изображений с шумным фоном, но последующий процесс идентификации приводит к значительно большей доле ошибок, чем при использовании более чистых изображений.

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

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

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

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

Существуют ли какие-либо подходящие подходы к этой проблеме?

Комментарии:

1. Вы можете не только найти лица на изображении, но и их ориентиры, позу, центральное лицо, самое большое лицо и т.д. github.com/fisakhan/Face_Pose является актуальным для вас вопросом. Если вы предоставите несколько примеров входных изображений и структурную схему, объясняющую ваш вопрос, я смогу точно ответить на ваш вопрос.