Распознавание лиц в 1С - забавная штука

Программирование - Инструментарий

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

В свое время мной был реализован проект вывода в веб геометрического положения всех сотрудников с анализом, кто сколько отработал в офисе: //infostart.ru/public/237336/. На входе этого решения - база данных событий засвета карточек СКУД (а также базы ЗУП, и ActiveDirectory). И это обстоятельство мешает сделать решение универсальным: в каждом офисном центре своя система СКУД с жестким ограничением прав на доступ. При всем желании руководства видеть на экране смартфона, кто где находится, прав на чтение данных СКУДа они могут и не дать человеку, которого они не знают лично, например. А сделать решение коробкой мешает тот факт, что баз СКУД существует большое множество - то есть нужно получать доступ и настраивать запросы на их таблицы.

Теперь, с развитием опен-сорсных технологий распознавания, родилась идея создать распознающий сервер, генерирующий базу данных событий по типу базы данных СКУДа. Это бы гарантировало универсальность решения. Но, забегая вперед, надо сказать, что это решение не может пока являться полной заменой СКУДу - ни одна технология распознавания не обеспечивает даже 99% точности. Но в любом случае это вопрос времени: комбинируя распознавание лица с распознаванием походки, например, в будущем смогут достигнуть точности 99,9% например и это уже будет выше, чем точность СКУДа. Поясню: я работал в реальном бизнес-парке и могу сказать, что постоянно есть поток ошибок, который "разгребается" вручную. У ошибок разные причины, но они всегда есть: как правило, это что-то типа "Иванов с Петровым случайно перепутали карты", или глюк оборудования, либо человек забыл карту, ему выдали гостевую, но в ней неправильно прописали фамилию. В общем, можно смело говорить, что реальная точность карточного СКУД не превышает 99,9%. Так что, по сути, когда-то наступит время, когда от карточного СКУДА откажутся по этой причине. 

Технология распознавания лиц развивается (есть коммерческие решения, но они почему-то заоблачно дорогие, несмотря на существование открытого решения OpenFace), но под 1С еще ничего нет. Надо восполнить этот пробел. Наверное, многие видели публикацию на habrahabr "Обучение машины — забавная штука .." (https://habrahabr.ru/post/306568/). В сети есть куча проектов на основе OpenFace, взял некий шаблон за основу и его допилил под свои нужды. Прежде всего, необходима была интеграция с 1С для того, чтобы формировать базу данных событий типа "Камера А, лицо Б, время В". То есть по сути, то же самое, что мы видим в базе данных СКУД (откуда строится мое веб-решение (//infostart.ru/public/237336/), показывающее, кто где находится и сколько кто отработал в офисе. 

Из всех версий Openface была выбрана одна, в которой реализуется распознавание онлайн по 2д-ландмаркам - его скомпилированная версия выложена тут в качетсве демки. Вы можете поиграться с этой версией и увидеть, насколько хорошо она осуществляет захват лиц. Я доработал проект так, что генерация события происходит только при появлении лица в кадре. Так же доработан был вывод информации о лице, таким образом, чтобы можно было интегрировать с 1С - каждое новое событие это новый файл. Для ускорения работы этот файловый поток размещен на виртуальном диске, очистка файлов выполняется алгоритмом из 1С, после того как проведен анализ и загружен лучший кадр в базу данных. Результат вы можете увидеть на прилагаемом видео (https://youtu.be/N3-OOevjkMc).

Для наглядности в 1С внедрен запуск звукового файла, соответствующего опознаному пользователю - компьютер говорит, кого видит (при просмотре звук в колонках сделайте потише, чтобы не испугаться). 

Что мы получаем в итоге: система распознавания уже сейчас может быть создана на основе бесплатных технологий и может быть внедрена за небольшие деньги в любом бизнес-центре или бизнес-территории. Единственное ограничение - система не может быть использована как единственная и основная, она должна ставиться параллельно с карточным СКУДом. Со временем, с развитием опен-сорс проекта, наступит такой момент, что ее можно будет использовать как единственную, но практика показала, что пока этот момент не настал. 

Отдельно следует написать про нейросетевое распознавание, ибо за ним будущее. Если вы провели мониторинг проекта OpenFace, то вы наверняка увидели его реализацию с нейросетью на Docker. Все это уже сейчас отлично работает и бесплатно, вопреки распространенному мнению, что это все должно очень дорого стоить. Если посмотреть на коммерческие реализации - это и MS Azure и отечественные фирмы (не помню название, да и не хочу им делать рекламу) - они предлагают решения в стиле "абонентская плата от 1000 уе" что необоснованно дорого (решение на Azure при этом в разы дешевле). Проблема тут не в том, что обученная нейросеть является ноу-хау, - как я написал выше, есть ее бесплатный вариант, проблема в интеграции. С Azure боятся иметь дело из-за отвратительной политики микрософта "сегодня работает - завтра нет, и бесполезно звонить на линию поддержки", а OpenFace работает в Docker под Ubuntu, и найти специалиста, чтобы он грамотно все это внедрил - это сложная проблема. Видимо, этим всем и объясняется высокая стоимость предлагаемых ныне коммерческих решений. Хотя понятно, что эти времена "срубания бабла на нейросетях" закончатся, тем быстрее, чем больше мы, простые программисты, будем внедрять за_недорого эти все удивительные, пока, технологии. Этой публикацией хотелось бы открыть обсуждение практических реализаций (на платформе 1С) систем распознавания на базе опен-сорсных технологий. Позже выложу ролики реальной эксплуатации этой системы в реальном офисе.

Скачать файлы

Наименование Файл Версия Размер
Распознавание лиц в 1с - забавная штука:
.rar 45,04Mb
11.04.17
24
.rar 45,04Mb 24 Скачать

См. также

Комментарии
1. Вячеслав Кадацкий (marsohod) 120 11.04.17 19:16 Сейчас в теме
2. Юрий П (nano1c) 128 11.04.17 20:03 Сейчас в теме
(1) нет, спасибо за ссылку. но там, как я понял, не совсем распознавание а детектирование без нейросети. вся прелесть проекта OpenFace как раз в бесплатной, обученной на большой выборке, нейрости, которая превращает лицо в 128-вектор, который уже совсем просто обработать, хотя-бы в той же 1с. хотя конечно то, что там просто решается проблема детектирования, это уже большое достижение и возможно некое гибридное решение с нейросетью OpenFace..
3. Николай Зевеке (zekrus) 103 12.04.17 08:05 Сейчас в теме
Доброе утро!
Тема весьма актуальная.
Вопросы:
- Код обработки 1С (пример использования) где?
- Исходный код от файла OpenFace.exe где?
С уважением
sasha777666; Mi4man; KroVladS; +3 1 Ответить 1
4. Юрий П (nano1c) 128 12.04.17 10:13 Сейчас в теме
(3) код обработки вам ничего не даст. исходников конкретно этого экзешника нету - разработчик (это не я) им не поделился - я доводил его под себя в рефлекторе на языке ms_il. еще раз прочитайте текст и поймите что на текущий момент решение нельзя бесплатно скачать в виде коробки. бесплатно скачивайте проект OpenFace и доводите его до ума под свои нужды. но это не будет "простой код" а будет куча всего: нейросервер + видеосервер + всякие костыли для интеграции + 1с. таким образом "коробкой" тут можно условно назвать только образ системы на которой все это развернуто. проще говоря, на данный момент все сложно, и именно поэтому нужны примеры конкретных реализаций, над чем я сейчас и работаю...
unmensch; tkv44; +2 2 Ответить 1
5. Евгений Мадонов (madonov) 150 12.04.17 10:46 Сейчас в теме
А если показать камере фотографию другого сотрудника (например на планшете или смартфоне) ?
Как она поймет, что её обманывают? =)
shard; Makushimo; +2 Ответить 1
6. Николай Зевеке (zekrus) 103 12.04.17 13:42 Сейчас в теме
(4)Очень удобно, теперь нужно в рефлекторе и ваше приложение разбирать.
Не понимаю из вашей публикации - при чем тут 1С (судя по вложениям)?
Эта публикация больше похожа на статью, а не на приложение для скачивания.
sasha777666; DC; +2 1 Ответить 1
7. Юрий П (nano1c) 128 12.04.17 13:59 Сейчас в теме
(6) это и есть статья, - если вам станет от этого легче. "не нравится не читай". могу вам помочь разобрать программу в рефлекторе, я на это потратил кучу времени. 1с тут при том, что все мои решения строятся на нем. Читайте внимательней - на 1с мое решение по анализу движений сотрудников, и это решение наглядно доказало свое превосходство на существующими системами СКУД - запросы в 1с выполняются просто мгновенно по сравнению с тормозами примитивной оболочки СКУД. Сейчас обкатываю еще одну надстройку - захват и распознавание лиц. Готовое такое решение вам никто не отдаст за бесплатно, будьте реалистом)
8. Юрий П (nano1c) 128 12.04.17 14:03 Сейчас в теме
(5) Конечно нет) Существуют несложные методики обмана любых распознавателей. Поэтому я и написал что на текущий момент нет никакого смысла покупать дорогие ком.решения - они в любом случае не могут быть использованы как основная СКУД, они сильно проигрывают карточным системам или по отпечаткам пальцев. Вот если будет опен-сорс проект где и анализ лица и анализ походки и мимики - вот тогда на такую систему уже можно будет положится, но все равно будут пути обмана типа научится походке и создать реалистичную маску)
9. Владислав Фёдоров (feva) 12 12.04.17 14:31 Сейчас в теме
А если я сейчас скачаю смогу на вашем решении разработать жизнеспособный проект? В том плане у вас приложен для скачивания готовый механизм?
10. Юрий П (nano1c) 128 12.04.17 14:40 Сейчас в теме
смотря что вы имеете в виду под "жизнеспособный", скачайте и поиграйтесь, и увидите например что там нельзя подключить ip-cam то есть это уже надо городить костыли. это я не говорю о том какие сложности будут в модификации кода ил. на данный момент я запускаю все это в реальном офисе и не хочу сейчас сказать что да, это все реально круто работает. Это можно будет сказать по прошествии реальной эксплуатации. То что могу сказать сейчас: распознавание по 2д-ландмаркам совсем слабенькое, но даже нейросеть (которая обеспечивает лучший результат на данный момент) очень чувствительна к бороде и очкам - тут непонятно как быть.
11. Владислав Фёдоров (feva) 12 12.04.17 17:33 Сейчас в теме
А на неуправляемых формах стартанёт?
12. Виталий Попов (Сурикат) 135 12.04.17 23:04 Сейчас в теме
Изобретаете жуткий велосипед =(
Ни в коем случае не нужно такие штуки интегрировать в 1С. Оставьте это специализированным ПО
13. Николай Зевеке (zekrus) 103 13.04.17 07:45 Сейчас в теме
(7) Вы видимо не в курсе чем отличается статья от публикации коллега. За чтения статьи с получателей вашего вложения не снимают стартмани (а во вложении пустышка - и 1с(ом) не пахнет). Если у вас есть коммерческий контент, в чем же дело продавайте (но вводить в заблуждение это дурной тон).
Новиков; sasha777666; alur; +3 1 Ответить 1
14. Юрий П (nano1c) 128 13.04.17 09:12 Сейчас в теме
(13) все ворчите? коммерческий контент есть и он отлаживается но вам я его не продам ибо такой клиент - это головная боль, замучаете своим нытьем)

ps а если серьезно, то я вам раскрыл все карты как построить решение на базе того что есть в открытом доступе, но вам этого мало и вместо спасибо вы тут возмущаетесь и минусуете. самому лень пройти по моему пути или в чем причина? в коммерции есть такое понятие как проблемный клиент - много случаев было когда человек покупает машину и потом начинает отсуживать с автосалона деньги, типа того что машина в чем-то не устраивает. в чечне это превратилось в бизнес и бмв и мерседес даже использовали термин "покупательский экстремизм". вот так и вы: вам мало того что вам дали рецепт, вы еще хотите чтобы вам все сделали. и не надо быть Вангой, чтобы понять, что даже если бы вам все кто-то добрый сделал, то вы бы его непременно кинули на деньги ибо ваш экстремизм виден неворуженным глазом. поэтому садитесь за рефлектор и допиливайте интеграцию сами - я показал выше что это не просто возможно но и не так сложно...
FreeArcher; unmensch; +2 3 Ответить 1
15. Юрий П (nano1c) 128 13.04.17 09:14 Сейчас в теме
(12) странно на форуме 1с слышать советы "не надо интегрировать с 1с", вы не ошиблись ли форумом? я выше писал про базу 1с дублирующую СКУД и она в сотни раз быстрее работает, а когда я ее писал тоже приходилось выслушивать "зачем это надо", но когда запустилось все были в шоке от скорости работы...
sasha777666; +1 Ответить
16. Николай Зевеке (zekrus) 103 13.04.17 13:00 Сейчас в теме
(14) Речь не про доработку технологии в целом. А именно в вашей публикации, ну не тянет она на нее (статья за глаза). Жаль потраченного 1 старт мани (стер как мусор).
Новиков; sasha777666; +2 Ответить 1
17. Кирилл Царев (tkv44) 13.04.17 14:49 Сейчас в теме
(16) Это из-за одного стартмани вы столько вони тут развели?
ZUL_MTFKA; Tolpinski; FreeArcher; Новиков; dgolovanov; Anchoret; nano1c; Makushimo; +8 2 Ответить 1
18. Юрий П (nano1c) 128 14.04.17 12:45 Сейчас в теме
(17) +1 теперь представьте что этот человек купит какое-либо 1с-решение. Я даже не говорю про такие коробки от франчей как Итилиум, в котором надо сразу устранять ошибки чтобы он заработал, можно взять хороший пример УТ 11 первых релизов. Примерно половина клиентов откатывалась назад на УТ 10.3, списывая при этом затраты, достигающие иногда сотен тысяч рублей. Мое решение не дотягивает пока даже до такого и я об этом открыто пишу. Ну да, я мог бы сейчас выложить в продажу хакнутый мной экзешник - он дает правильный файловый поток, который удобно принимать в 1с. Но, представим, себе что покупатель-экстремист купит его, скажем за 1 тыр (представьте какие это большие для него деньги!) и допустим его не устроит там что-то - например для ip-камеры нужны костыли, название вирт.диска жестко прописано, при его переполнении программа зависает да мало ли чего еще... Именно поэтому я и не хочу ничего продавать, если кому надо - могу помочь в достижении именно того что конкретно нужно, в общем случае это слишком все абсткратно и сложно, да и не понятно какое именно применение этой системы "взлетит". я тут поделился мыслями почему у наших "нейросетевых компаний" не взлетает сервис распознавания - у них нет понимания кому это нужно и за какие деньги они это готовы купить. А сидеть на 2-3 клиентах которые готовы сорить деньгами - это как минимум ненадежно...
Новиков; tkv44; +2 2 Ответить
19. Александр Закиров (sasha777666) 130 14.04.17 15:56 Сейчас в теме
Да причём тут фин. претензии, вы сами всё в деньги переводите. Прекрасно понимаю предыдущего пользователя, я например скачивая рассчитывал увидеть пример обвязки функционала в виде обработки, ведь публикация называется "Распознавание лиц в 1С - забавная штука"
20. Александр Закиров (sasha777666) 130 14.04.17 16:02 Сейчас в теме
(12) а чем 1С не специализированное ПО?
21. Виталий Попов (Сурикат) 135 14.04.17 21:19 Сейчас в теме
(20)
А тем что 1С не может выступать как приложением верхнего уровня в системе безопасности, т.к. не умеет управлять настройкой доступа.
Т.е. на предприятии где уж запарились доступом, какое-то ПО верхнего уровня стоит (а то бегать и перенастраивать контроллеры, как на заре времен было у BOLID, ой как нехорошо).
И вот тут если бы автор написал об опыте интеграции с известными брендами на рынке СКУД цены бы статье не было, а так мало ли неокрепшие умы начнут все в 1С пихать.

Вроде бы забить на доступ и использовать для учета рабочего времени сотрудников, НО!
Распознавание лиц штука очень ненадежная, не важно какие дескрипторы используются. Изменение освещенности может все поломать координальным образом. Если вы не купили себе нормальный СКУД, то нормальные камеры (которые баланс белого шустро исправляют и с большим динамическим диапазоном) тоже уж ставить не будете.

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

В свое время очень впечатлило способность SURF дескрипторов распознавать предметы за препятствиями. Жаль их вычисление довольно ресурсоемкая задача.

Если кому интересно, есть система Artec Broadway 3D. Там примерно тоже самое только используются 3d карты лиц. Такой подход как раз снимает все проблемы с изменением градиента
22. Александр Закиров (sasha777666) 130 16.04.17 14:04 Сейчас в теме
(21) что вы под этим
управлять настройкой доступа
имеете ввиду?
23. Виталий Попов (Сурикат) 135 16.04.17 15:21 Сейчас в теме
У более менее приличных СКУД обычно бывает следующая архитектура:
1. Локальные контроллеры доступа (в зависимости от бренда с/без энергонезависимой памятью)
2. Центральные контроллеры
3. ПО верхнего уровня, в котором осуществляется управление доступом по зонам/группам доступа (аналоги профилей, групп доступа на последних версий БСП)

Т.е. конфигурирование контроллеров осуществляется на уровне ПО. А аппаратная часть служит только для обеспечения отказоустойчивости.
24. Виталий Попов (Сурикат) 135 16.04.17 15:34 Сейчас в теме
(22)
Прочитал вашу статью по управлению Arduino =)
Не знал о такой возможности, век живи - век учись

Сделаю дополнение к моему предыдущему комментарию:
Я имею ввиду готовые решения для интеграции с решениями СКУД, представленными на рынке.
Чтобы быстро можно наладить обмен данными, а не убить на это человекамесяцы
25. Юрий П (nano1c) 128 17.04.17 23:28 Сейчас в теме
(21)
И вот тут если бы автор написал об опыте интеграции с известными брендами на рынке СКУД цены бы статье не было, а так мало ли неокрепшие умы начнут все в 1С пихать.

а какая разница с какой конкретно системой интегрировать? Я интегрировал с Lyrix но для меня это просто sql-таблицы, и по сути без разницы что за система. Скорость работы достигается только при прямых запросах к скулю. Могу интрегрироваться с любой системой таким образом. Более того, даже к ЗУПам у меня прямые запросы к шифрованным таблицам 1с. И в итоге мы получаем профит в виде мгновенной обработки таких запросов как постройка табелей т-13 за месяц, любые отчеты хоть за месяц, хоть за год строятся практически мгновенно. Посмотрите как подобные вещи строит Lyrix - без слез на это не взглянешь: можно просто не дождаться отчета даже по одному сотруднику). В общем мое решение применяется в большом бизнес-парке и можно уверенно сказать что оно справится с любыми объемами данных. Но я уже повторяюсь - это все вроде как описано в той публикации. В этом решении важна именно архитектура, например если заменить прямые запросы к зупам на "правильные методы 1с" типа ком, то скорость упадет даже не 100 раз, а наверное в 1000 ) Да и вообще, если сталкивались с зуп, то знаете как ужасно он спроектирован и в итоге вместо запроса к одной таблице надо соединять 5 таблиц или еще чего хуже. А учитывая что таблицы 1с зашифрованы - получаем неплохое развлечение. Это мое ноу-хау, которое я не выкладываю, либо делаете все сами либо просите помощи.
С распознаванием тоже примерно так: важна сама информация что решение возможно и надо делать так-то и так-то - чем я с вами и поделился. Не менее важна информация о том что точность пока не очень - это камень в огород фирм впаривающих это распознавание за космические деньги. Это не может стоить дорого просто потому, что сотрудник пару дней не побреется и его уже система примет за другого человека) Ну а про лазерные сканеры 3д - это вроде бы надежно, хотя вот интересно насчет бороды и очков - вы уверены что и с ними сканеры справятся? Я вот не уверен, так что по сути остаются пока только отпечатки пальцев, помимо обычного скуда. Решений по походке пока не видел - но было бы интересно, конечно. Я пока остановился на гибриде обычного скуда с захватом лиц в базу через этот опенфейс - это для борьбы с передачей карты другому сотруднику (по ошибке или умышленно), а распознавание то идет но оно скорее пока как эксперимент..
26. Dmitry (DimonDnepr) 27.04.17 08:35 Сейчас в теме
Доброго дня уважаемые, у меня вопрос околоСКУДный :)

Может кто-нибудь подсказать/надоумить как в управляемых формах на Win7-64 можно достучаться к веб-камере и получить фото?

То, что нашел, работает или на обычных формах или максимум на WinXP...
27. Алексей Иванов (IvanovAV) 14 16.06.17 03:32 Сейчас в теме
Мы реализовали, аналогичную систему на сканерах лица и отпечатков пальцев Anviz. К нашему удивлению все работает. Далее настроил интеграцию 1С и СУБД Anviz, через СОМ -соединение. На практике оказалось проще, чем я думал.
28. Юрий П (nano1c) 128 16.06.17 12:39 Сейчас в теме
(27) что за сканеры лиц? ком слишком медленный, прямые запросы ну раз в 1000 наверное быстрее...
29. Алексей Иванов (IvanovAV) 14 16.06.17 12:49 Сейчас в теме
(28) нечто похожее как на видио https://www.youtube.com/watch?v=c0T3SeaHKj0 у него своя база данных, туда пишется таблица таблица с ИД человека и временем сканирования. К которой я программно подключился через компоненту,
30. Дмитрий Воронцов (informa1555) 341 19.06.17 10:36 Сейчас в теме
(2) Я правильно понимаю, что этот "128-вектор" - это выход c convolutional слоя в виде расположения сработавших "фильтров" , а "обработать" это типа fullconnected слой создать на 1С? Или там какя то другая архитектура? Судя по картинке там вроде CNN да?
31. Юрий П (nano1c) 128 20.06.17 09:22 Сейчас в теме
(30) тут главное понимать что такое нейросеть и в чем ее прелесть. до конца я это осознал когда написал на 1с сравнение 2д-лендмарков. результат просто никакой. а если сравнивать выход нейросети, вот эти 128-вектора то это уже совсем другое дело. вы можете и свою нейросеть написать прямо на 1с, но это очень долго и в итоге будет тормозить. на создание вот этой опенсорсной нейросети опенфейс ушли годы и при всех ее минусах (докер под линукс, проблемы с интеграцией) она является сейчас единственным бесплатным вариантом, который при этом хоть както работает...
32. kav kav (alexkmbk) 16 21.06.17 14:01 Сейчас в теме
Если алгоритм написан не на языке 1С, тогда это уже не распознавание на 1С, а вопрос подключения сторонник библиотек ))
Оставьте свое сообщение