Библиотека dlib

*На дворе 2020 год. И уже не нужно использовать Dlib. Нигде. Вот тут я сделал популярный рассказ на что нужно переходить, что на порядок лучше и работает в любых условиях – https://youtu.be/2fnNhYCpToE
А вот тут моя краткая заметка почему для ComputerVision не читать статьи старше 3 лет – http://cv-blog.ru/?p=327

Есть одна замечательная библиотека, которая известна куда менее, чем OpenCV, но несущая в себе ряд замечательных функций + на полной OpenSource лицензии. Это Dlib. Библиотека включает в себя много чего, например: несколько реализаций SVM, несколько реализаций нейронных сетей, подборку функций матричной геометрии, подборку алгоритмов градиентного спуска, SURF|HOG.


Но мы остановимся на самом интерсном:
1) Обученный HOG-каскад для поиска лиц + машинерия для обучения HOG-каскадов (что отсутствует в OpenCV).
2) Поиск особых точек на лицах.
Сам по себе HOG каскад работает иначе, чем Haar. Он менее устойчивый когда лицо не фронтально, но в разы более устойчивый, когда лицо расположено фронтально. Так как в большинстве задач интересны именно фронтальные лица, HOG подходит хорошо. Плюс, простое объединение HOG + Haar из OpenCV значительно расширяют возможность детектирования лиц.

Поиск особых точек – очень интересная и важная технология. Существует множество проприетарных решений + множество открытых, но плохих. По-моему dlib решение – одно из первых открытых и хороших. Итоговый результат у Dlib такой:
test3

test1 test2
Почему эта технология важна?
Все открытые базы по распознаванию лиц/распознаванию эмоций – это фронтальные лица. Или же лица, приводимые к фронтальным. Все открытые и обученные CNN нейронные сети по распознаванию эмоций, по распознаванию лиц – обучены на фронтальных лицах. Отсюда вывод: если мы хотим распознать лицо, то нам нужно привести его к фронтальному состоянию. А это невозможно без определения точных параметров лица. Для этого-то нам и нужно получить особые точки.
Так же, можно заметить, что целый ряд развлекатльных приложений тоже спользует их: FaceSwap, MSQRD.
Что дальше?
Есть ряд “расширенных” фреймворков, включающих в себя dlib + каие-нибудь нейронки для дальнейших распознаваний. Например OpenFace или OpenBR. При их использовании можно собрать рабочее распознавание лиц/эмоций за несколько вечеров.

Сама по себе установка dlib ужасно простая и не требующая ничего. Заходим сюда, идём по инструкции. Есть с++ реализация + порт на Python.