Что это?
Машинное обучение все чаще и чаще встречается в жизни обычных людей и бизнеса. Возможности, встроенные в современные смартфоны, позволяют отличать своего владельца по лицу, отличают спит человек или нет, фото перед камерой смартфона или реальный человек.
Технологии компьютерного зрения открывают большие возможности перед бизнесом, их нужно только правильно использовать. Несмотря на очевидные удобства, технологии распознавания лиц вызывают у людей неоднозначную реакцию, а их использование воспринимается частью общества как вторжение в личное пространство. Кроме того, у многих пользователей есть опасения, что их личные данные, к которым большинство людей относят и свои фотографии, будут использоваться без учета их интересов.
В настоящее время, технологиями компьютерного зрения пользуются крупные компании, и службы безопасности. Чем это им помогает? Все довольно просто, например: Крупные сетевые магазины использует распознавание лиц для предотвращения краж. Как? Один раз совершено правонарушение - ну да, с этим ничего не поделать. Не уследили. Но что мы можем сделать что бы предотвратить? Системе покажем фотографию лица с камеры наблюдения и система следующий раз нам сообщит о нахождении в торговом зале похожего лица.
А если не воруют? Можно узнавать постоянных клиентов, информировать сотрудников в зале, например, присылать им сообщение в мессенджер "В зале постоянный клиент: Мария, последний раз был 18 мая, совершил покупку на сумму 7900, предпочитает зеленый цвет, размер одежды 42, обуви 37". Конечно, если выдать эту информацию клиенту сразу на входе - клиент, скорее всего, испугается. Но, это огромное поле для творчества сотрудников в зале.
Компьютерное зрение помогает сетям анализировать планограмму (размещение товаров на полке), анализировать рекламные конструкции на улицах города, распознавать номер автомобилей и многое другое - то, что сделать "вручную" дорого/сложно/долго и т. д. Например, в некоторых кинотеатрах находятся системы распознавания эмоций, и заказчик услуг по анализу получает данные о том, какие эмоции испытывал человек во время просмотра фильма. Звучит жутковато, за нами следят..., но в современном мире происходит много вещей, о которых мы даже не догадываемся.
Как это?
Нейросети. Сейчас этот раздел машинного обучения справляется с задачами подобного рода лучше всего. Нейросети в 1С ? Да, уже были на Инфостарте примеры реализации сетей внутри 1С, использования внешних сервисов распознавания лиц. При большом объеме запросов внешние сервисы - это не очень дешево, нет возможности дополнительной обработки или расчетов с использованием других алгоритмов.
В данной демонстрационной базе используется библиотека для машинного обучения с открытым исходным кодом dlib.net. В библиотеке реализовано множество возможных методов машинного обучения, не только нейронные сети и глубокое обучение.
Этапы:
-
Инициализация
В данном случае, библиотека dlib выступает как инструмент. Ей нужны входные данные для обработки. Входные данные - это математические модели, обученные на большом количестве изображений и изображение для анализа. В базе модели находятся в общих макетах, извлекаются при первом использовании, поэтому первый запуск может быть долгим. Математические модели взяты обученные командой dlib. Но, если у вас есть множество примеров для обучения, то можно обучить сеть работать именно с Вашими данными, что позволит повысить точность.
-
Определение местоположения лица
После загрузки моделей и изображения в память происходит процесс определения местоположения лица. В зависимости от задач эту информацию тоже можно использовать, например выделить область на изображении для контроля или сохранить в базе для дальнейшего использования.
-
Извлечение данных лица
На данном этапе происходит практически магия. Упрощенно: каждый пиксель кодируется позицией x,y и цветом r, g, b, Из набора этих данных вычисляется представление (вектор, эмбединг) из 128 чисел с плавающей точкой в диапазоне -1...1. Эти данные можем сохранить и в дальнейшем использовать. Нам понадобиться математика...
-
Поиск в базе данных
Сохраняем в базе данных набор вычисленных данных для нашей коллекции известных фотографий и лиц. Вычисляем вектор для исследуемого изображения.
Эти данные нам особо ни о чем не говорят, это представление лица нашей нейросети. Для поиска похожих лиц нам нужно найти Евклидово расстояние между векторами.
Для вычисления прекрасно подходит СКД, в которой реализованы функции возведения в степень и квадратного корня, отборы на группировки и сортировки.
Вычисление расстояния между векторами представления реализовано в представленной базе в общем макете.
Попробовать
- Скачиваем и разворачиваем базу. Инструкции в документации к платформе)
- Регистрируем лица в базе документом регистрации лиц. Векторы лиц рассчитываются при проведении.
- На рабочем столе демонстрационного пример выбираем изображение для анализа
- Получаем результат. Дистанция - это то, на сколько отличаются лицо на анализируемом изображении от тех, что зарегистрированы в базе.
0 - один и тот же человек, 1 - разные люди.
В описании к используемым моделям фигурирует цифра 0.6. При указании такого порога сеть распознает с 98% точностью.
Заключение
Внешняя компонента, находящаяся в базе, имеет 32-битную разрядность и для упрощения демонстрации реализована не оптимально, например, в одно процедуре находится распаковка и загрузка математической модели и сети, а это 100 мб.
Конечно, сама библиотека dlib имеет множество настроек и параметров, в том числе поддержку GPU, поэтому, оптимизация алгоритмов происходит под конкретную задачу. Например, можно указать параметр - сколько раз "покрутить" изображение, для расчета данных лица, что улучшит точность распознавания. Допустим, мы зарегистрировали в базе фотографию человека анфас. Но, у нас на входе в помещение стоит камера сбоку, мы не может поставить ее в середине прохода, поэтому фотографии лиц получаются немного сбоку. Если на лице выделить 3 точки: 2 глаза и кончик носа и посчитать расстояние между ними в фотографии, зарегистрированной в базе. Примерно равное расстояние. А если фото сбоку - пропорции расстояния изменяются. Поэтому, если выполнить 2D вращение влево и вправо и посчитать среднее значения расстояния, то оно будет более близкое к значению расстояния на исходной фотографии, чем расстояние, посчитанное с одной фотографии сбоку. А если точек не 3 а 70? погрешность уменьшается и качество распознавания увеличивается.
В конфигурации установлен режим совместимости с 8.3.5, можно развернуть на этой платформе и более поздних. Код конфигурации полностью открыт.