Распознавание лиц в 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С) систем распознавания на базе опен-сорсных технологий. Позже выложу ролики реальной эксплуатации этой системы в реальном офисе.

33 Comments

  1. marsohod

    А это не пробовали?

    https://msdn.microsoft.com/magazine/mt788628

    Reply
  2. nano1c

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

    Reply
  3. zekrus

    Доброе утро!

    Тема весьма актуальная.

    Вопросы:

    — Код обработки 1С (пример использования) где?

    — Исходный код от файла OpenFace.exe где?

    С уважением

    Reply
  4. nano1c

    (3) код обработки вам ничего не даст. исходников конкретно этого экзешника нету — разработчик (это не я) им не поделился — я доводил его под себя в рефлекторе на языке ms_il. еще раз прочитайте текст и поймите что на текущий момент решение нельзя бесплатно скачать в виде коробки. бесплатно скачивайте проект OpenFace и доводите его до ума под свои нужды. но это не будет «простой код» а будет куча всего: нейросервер + видеосервер + всякие костыли для интеграции + 1с. таким образом «коробкой» тут можно условно назвать только образ системы на которой все это развернуто. проще говоря, на данный момент все сложно, и именно поэтому нужны примеры конкретных реализаций, над чем я сейчас и работаю…

    Reply
  5. madonov

    А если показать камере фотографию другого сотрудника (например на планшете или смартфоне) ?

    Как она поймет, что её обманывают? =)

    Reply
  6. zekrus

    (4)Очень удобно, теперь нужно в рефлекторе и ваше приложение разбирать.

    Не понимаю из вашей публикации — при чем тут 1С (судя по вложениям)?

    Эта публикация больше похожа на статью, а не на приложение для скачивания.

    Reply
  7. nano1c

    (5) Конечно нет) Существуют несложные методики обмана любых распознавателей. Поэтому я и написал что на текущий момент нет никакого смысла покупать дорогие ком.решения — они в любом случае не могут быть использованы как основная СКУД, они сильно проигрывают карточным системам или по отпечаткам пальцев. Вот если будет опен-сорс проект где и анализ лица и анализ походки и мимики — вот тогда на такую систему уже можно будет положится, но все равно будут пути обмана типа научится походке и создать реалистичную маску)

    Reply
  8. feva

    А если я сейчас скачаю смогу на вашем решении разработать жизнеспособный проект? В том плане у вас приложен для скачивания готовый механизм?

    Reply
  9. nano1c

    смотря что вы имеете в виду под «жизнеспособный», скачайте и поиграйтесь, и увидите например что там нельзя подключить ip-cam то есть это уже надо городить костыли. это я не говорю о том какие сложности будут в модификации кода ил. на данный момент я запускаю все это в реальном офисе и не хочу сейчас сказать что да, это все реально круто работает. Это можно будет сказать по прошествии реальной эксплуатации. То что могу сказать сейчас: распознавание по 2д-ландмаркам совсем слабенькое, но даже нейросеть (которая обеспечивает лучший результат на данный момент) очень чувствительна к бороде и очкам — тут непонятно как быть.

    Reply
  10. feva

    А на неуправляемых формах стартанёт?

    Reply
  11. Сурикат

    Изобретаете жуткий велосипед =(

    Ни в коем случае не нужно такие штуки интегрировать в 1С. Оставьте это специализированным ПО

    Reply
  12. zekrus

    (7) Вы видимо не в курсе чем отличается статья от публикации коллега. За чтения статьи с получателей вашего вложения не снимают стартмани (а во вложении пустышка — и 1с(ом) не пахнет). Если у вас есть коммерческий контент, в чем же дело продавайте (но вводить в заблуждение это дурной тон).

    Reply
  13. nano1c

    (13) все ворчите? коммерческий контент есть и он отлаживается но вам я его не продам ибо такой клиент — это головная боль, замучаете своим нытьем)

    ps а если серьезно, то я вам раскрыл все карты как построить решение на базе того что есть в открытом доступе, но вам этого мало и вместо спасибо вы тут возмущаетесь и минусуете. самому лень пройти по моему пути или в чем причина? в коммерции есть такое понятие как проблемный клиент — много случаев было когда человек покупает машину и потом начинает отсуживать с автосалона деньги, типа того что машина в чем-то не устраивает. в чечне это превратилось в бизнес и бмв и мерседес даже использовали термин «покупательский экстремизм». вот так и вы: вам мало того что вам дали рецепт, вы еще хотите чтобы вам все сделали. и не надо быть Вангой, чтобы понять, что даже если бы вам все кто-то добрый сделал, то вы бы его непременно кинули на деньги ибо ваш экстремизм виден неворуженным глазом. поэтому садитесь за рефлектор и допиливайте интеграцию сами — я показал выше что это не просто возможно но и не так сложно…

    Reply
  14. nano1c

    (12) странно на форуме 1с слышать советы «не надо интегрировать с 1с», вы не ошиблись ли форумом? я выше писал про базу 1с дублирующую СКУД и она в сотни раз быстрее работает, а когда я ее писал тоже приходилось выслушивать «зачем это надо», но когда запустилось все были в шоке от скорости работы…

    Reply
  15. zekrus

    (14) Речь не про доработку технологии в целом. А именно в вашей публикации, ну не тянет она на нее (статья за глаза). Жаль потраченного 1 старт мани (стер как мусор).

    Reply
  16. tkv44

    (16) Это из-за одного стартмани вы столько вони тут развели?

    Reply
  17. nano1c

    (17) +1 теперь представьте что этот человек купит какое-либо 1с-решение. Я даже не говорю про такие коробки от франчей как Итилиум, в котором надо сразу устранять ошибки чтобы он заработал, можно взять хороший пример УТ 11 первых релизов. Примерно половина клиентов откатывалась назад на УТ 10.3, списывая при этом затраты, достигающие иногда сотен тысяч рублей. Мое решение не дотягивает пока даже до такого и я об этом открыто пишу. Ну да, я мог бы сейчас выложить в продажу хакнутый мной экзешник — он дает правильный файловый поток, который удобно принимать в 1с. Но, представим, себе что покупатель-экстремист купит его, скажем за 1 тыр (представьте какие это большие для него деньги!) и допустим его не устроит там что-то — например для ip-камеры нужны костыли, название вирт.диска жестко прописано, при его переполнении программа зависает да мало ли чего еще… Именно поэтому я и не хочу ничего продавать, если кому надо — могу помочь в достижении именно того что конкретно нужно, в общем случае это слишком все абсткратно и сложно, да и не понятно какое именно применение этой системы «взлетит». я тут поделился мыслями почему у наших «нейросетевых компаний» не взлетает сервис распознавания — у них нет понимания кому это нужно и за какие деньги они это готовы купить. А сидеть на 2-3 клиентах которые готовы сорить деньгами — это как минимум ненадежно…

    Reply
  18. sasha777666

    Да причём тут фин. претензии, вы сами всё в деньги переводите. Прекрасно понимаю предыдущего пользователя, я например скачивая рассчитывал увидеть пример обвязки функционала в виде обработки, ведь публикация называется «Распознавание лиц в 1С — забавная штука»

    Reply
  19. sasha777666

    (12) а чем 1С не специализированное ПО?

    Reply
  20. Сурикат

    (20)

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

    Т.е. на предприятии где уж запарились доступом, какое-то ПО верхнего уровня стоит (а то бегать и перенастраивать контроллеры, как на заре времен было у BOLID, ой как нехорошо).

    И вот тут если бы автор написал об опыте интеграции с известными брендами на рынке СКУД цены бы статье не было, а так мало ли неокрепшие умы начнут все в 1С пихать.

    Вроде бы забить на доступ и использовать для учета рабочего времени сотрудников, НО!

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

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

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

    Если кому интересно, есть система Artec Broadway 3D. Там примерно тоже самое только используются 3d карты лиц. Такой подход как раз снимает все проблемы с изменением градиента

    Reply
  21. sasha777666

    (21) что вы под этим

    управлять настройкой доступа

    имеете ввиду?

    Reply
  22. Сурикат

    У более менее приличных СКУД обычно бывает следующая архитектура:

    1. Локальные контроллеры доступа (в зависимости от бренда с/без энергонезависимой памятью)

    2. Центральные контроллеры

    3. ПО верхнего уровня, в котором осуществляется управление доступом по зонам/группам доступа (аналоги профилей, групп доступа на последних версий БСП)

    Т.е. конфигурирование контроллеров осуществляется на уровне ПО. А аппаратная часть служит только для обеспечения отказоустойчивости.

    Reply
  23. Сурикат

    (22)

    Прочитал вашу статью по управлению Arduino =)

    Не знал о такой возможности, век живи — век учись

    Сделаю дополнение к моему предыдущему комментарию:

    Я имею ввиду готовые решения для интеграции с решениями СКУД, представленными на рынке.

    Чтобы быстро можно наладить обмен данными, а не убить на это человекамесяцы

    Reply
  24. nano1c

    (21)

    И вот тут если бы автор написал об опыте интеграции с известными брендами на рынке СКУД цены бы статье не было, а так мало ли неокрепшие умы начнут все в 1С пихать.

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

    С распознаванием тоже примерно так: важна сама информация что решение возможно и надо делать так-то и так-то — чем я с вами и поделился. Не менее важна информация о том что точность пока не очень — это камень в огород фирм впаривающих это распознавание за космические деньги. Это не может стоить дорого просто потому, что сотрудник пару дней не побреется и его уже система примет за другого человека) Ну а про лазерные сканеры 3д — это вроде бы надежно, хотя вот интересно насчет бороды и очков — вы уверены что и с ними сканеры справятся? Я вот не уверен, так что по сути остаются пока только отпечатки пальцев, помимо обычного скуда. Решений по походке пока не видел — но было бы интересно, конечно. Я пока остановился на гибриде обычного скуда с захватом лиц в базу через этот опенфейс — это для борьбы с передачей карты другому сотруднику (по ошибке или умышленно), а распознавание то идет но оно скорее пока как эксперимент..

    Reply
  25. DimonDnepr

    Доброго дня уважаемые, у меня вопрос околоСКУДный 🙂

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

    То, что нашел, работает или на обычных формах или максимум на WinXP…

    Reply
  26. IvanovAV

    Мы реализовали, аналогичную систему на сканерах лица и отпечатков пальцев Anviz. К нашему удивлению все работает. Далее настроил интеграцию 1С и СУБД Anviz, через СОМ -соединение. На практике оказалось проще, чем я думал.

    Reply
  27. nano1c

    (27) что за сканеры лиц? ком слишком медленный, прямые запросы ну раз в 1000 наверное быстрее…

    Reply
  28. IvanovAV

    (28) нечто похожее как на видио https://www.youtube.com/watch?v=c0T3SeaHKj0 у него своя база данных, туда пишется таблица таблица с ИД человека и временем сканирования. К которой я программно подключился через компоненту,

    Reply
  29. informa1555

    (2) Я правильно понимаю, что этот «128-вектор» — это выход c convolutional слоя в виде расположения сработавших «фильтров» , а «обработать» это типа fullconnected слой создать на 1С? Или там какя то другая архитектура? Судя по картинке там вроде CNN да?

    Reply
  30. nano1c

    (30) тут главное понимать что такое нейросеть и в чем ее прелесть. до конца я это осознал когда написал на 1с сравнение 2д-лендмарков. результат просто никакой. а если сравнивать выход нейросети, вот эти 128-вектора то это уже совсем другое дело. вы можете и свою нейросеть написать прямо на 1с, но это очень долго и в итоге будет тормозить. на создание вот этой опенсорсной нейросети опенфейс ушли годы и при всех ее минусах (докер под линукс, проблемы с интеграцией) она является сейчас единственным бесплатным вариантом, который при этом хоть както работает…

    Reply
  31. KAV2

    Если алгоритм написан не на языке 1С, тогда это уже не распознавание на 1С, а вопрос подключения сторонник библиотек ))

    Reply
  32. ShelbyWhite

    эта система Опен Фейс в 1с внедрена в массы? Юрий П, можете связаться со мной? shelby.nastya@icloud.com Есть ли вообще программы которые могут открывать смену сотрудника и закрывать? Подскажите.( про Битрикс24 в курсе)

    Reply
  33. nano1c

    (33) Поскольку я все это делал на энтузиазме, и учитывая что не нашел спонсора на серьезное внедрение этого проекта то, на данный момент никакой новой информации нет. Я делаю сейчас совсем другой проект — может по его окончании и вернусь к этой интересной теме..

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *