Распознавание лиц

Опубликовано: Последние правки:
Опубликовано: Последние правки:
Drawing a whale with a pencil in sketch book

Статья находится в активной разработке. Она опубликована в таком виде не для издевательства над читателем, а только потому что редактор сказал "можно".

Теоретическая база

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

Пробуем существующие модели

Не буду пересказывать эту статью https://machinelearningmastery.com/how-to-perform-face-recognition-with-vggface2-convolutional-neural-network-in-keras/. В нее просто нужно заглянуть.

Начнем мы с картинок. VGGFace2 http://www.robots.ox.ac.uk/~vgg/data/vgg_face2/

ResNet 50 https://github.com/WeidiXie/Keras-VGGFace2-ResNet50

Многозадачная каскадная сверточная сеть

Модели, которые нас интересуют будут решать задачу классификации, и возможно предсказания, в частности определение пола, возраста, расовой, этнической принадлежности (эту классификацию я буду использовать для мемов). Но в самом первом шаге связанном с обработкой изображений они опираются на совсем другую модель - MTCNN (Multi-task Cascaded Convolutional Networks). https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf

pip install mtcnn tensorflow

Hatefull Memes data/img -> 01235.png, 01247.png https://en.wikipedia.org/wiki/File:Sharon_Stone_Cannes_2013_2.jpg -> sharon_stone1.jpg

>>> import mtcnn
>>> import matplotlib.pyplot as plt
>>> detector = mtcnn.MTCNN()

>>> pixels = plt.imread("01235.png")
>>> results = detector.detect_faces(pixels)
>>> results
[]
>>> pixels = plt.imread("01247.png")
>>> results = detector.detect_faces(pixels)
>>> results
[]
>>> pixels = plt.imread("sharon_stone1.jpg")
>>> results = detector.detect_faces(pixels)
>>> results
[{'box': [269, 133, 106, 145], 'confidence': 0.9998786449432373, 'keypoints': {'left_eye': (292, 191), 'right_eye': (341, 191), 'nose': (312, 216), 'mouth_left': (293, 238), 'mouth_right': (343, 238)}}]

:'(

Может с FaceNet будет больше удачи?

Очень хорошо оформленная статья о том, как задавать переменные окружения https://www3.ntu.edu.sg/home/ehchua/programming/howto/Environment_Variables.html

Первый вопрос, конечно, как это запустить и где взять соленых огурчиков?

Многие (один и тот же человек, но много раз) задаются этим вопросом

https://github.com/davidsandberg/facenet/issues/463 https://github.com/davidsandberg/facenet/issues/1107 https://github.com/davidsandberg/facenet/issues/1115

Хорошо, что автор предоставил подробную вики

https://github.com/davidsandberg/facenet/wiki/Train-a-classifier-on-own-images