Распознавание лиц в связке с 1С "на коленке"

02.07.21

Интеграция - Распознавание документов и образов

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

Конечно, идея не новая, на инфостарте есть несколько статей про работу со сторонними сервисами по распознаванию лиц. Некоторые из данных статей написаны еще в 2017 году (распознавание лиц с тех пор значительно развилось). Тем не менее, надеюсь кому-то будет полезно.

В общем, на досуге пишу платформу по работе с видео потоком и обработкой результатов, платформа еще сыровата, но что-то (например, узнавание лиц из базы) работает вполне себе приемлемо. И родилась тут мысль, интегрировать платформу с 1С. А именно, написать «на коленке» такой механизм, который будет вместо карты лояльности покупателя считывать его лицо и исходя из этого рассчитывать скидку. Кстати «на коленке» пишу специально (чтобы сильно не ругали за кривую архитектуру и реализацию на стороне 1С). Ведь в данном случае цель – проверить гипотезу.

А гипотеза выглядит так:

Покупатель стоит у кассы, его лицо находится в объективе камеры. Камера каждые несколько секунд улавливает его лицо, распознает через нейросеть, и результаты распознавания записываются в БД событий. Далее, кассир вместо привычного:

- У Вас есть карта нашего магазина? Нет? Желаете оформить?

Просто нажимает кнопку «Проверить покупателя», и последнее событие из базы проверяется на наличие у него карты лояльности (виртуальной конечно же). Если таковая есть, 1С учитывает скидки.

Сейчас комплекс выглядит следующим образом:

Платформа работает с изображением с камеры, распознает лица, кидает изображение в нейросеть, получает ответ и записывает результаты в БД MySQL. К демонстрационной базе 1С: Управление торговлей 11.4 требуется реализовать получение данных событий (та самая MySQL база в которой фиксируются результаты с камеры).

 

 

 

Для того, чтобы это заработало, требуется:

  1. Добавить получение событий из БД событий в 1С: УТ.
  2. Добавить в 1С: УТ признак опознанного пользователя.  
  3. Добавить в 1С: УТ процедуру которая будет проверять наличие виртуальной карты лояльности у покупателя.

Итак, начнем с первого пункта.

Правильно было бы написать веб-сервис при обращении, к которому в 1С «прилетали» данные события. Но поскольку «на коленке» то будем подключить базу MySQL в качестве внешнего источника данных. Интересно, как это будет работать если в таблице записей больше чем хотя-бы 100 тысяч? Есть у кого опыт работы с большими таблицами во внешних источниках? Расскажите, как оно. Кроме тех случаев, когда внешние источники используются для разовой загрузки данных в 1С.

 Подключить внешний источник данных в 1С дело нехитрое. Для подключения используется коннектор ODBC

Процедура подключения абсолютно тривиальна, поэтому рассказывать о ней отдельно, смысла нет. Проверим что в режиме 1С: Предприятия таблицы с данными доступны.

 

 

Есть контакт, таблицы доступны, ошибок не выявлено.

Поскольку, делать персональные карты лояльности, для программы которая работает по распознаванию лица было-бы как-то не логично, правильнее использовать для этого справочник «Виды карт лояльности». Для этого, добавляю в данный справочник новую табличную часть «Ники владельцев». В данной табличной части есть всего один реквизит «Ник владельца» с типом строка. Как нетрудно догадаться, в данную табличную часть будут заполняться наименования пользователей в том виде, в котором они содержатся в БД событий.

 

 

Указываем, что код состоит из двух символов. Теперь в системе есть не персонализированная карта лояльности, у которой может быть множество держателей, со скидкой 20% на всё. Данной виртуальной карте присвоен код 18.   

Сразу добавлю себя в табличную часть «Ники владельцев». В базе лиц я числюсь как пользователь с ником Kirill. Добавляю данный ник в таблицу.

Теперь интереснее. На фронте кассира, на форме считывания карты, добавляем кнопку «Считать покупателя» и процедуру для нее.

 

 

 

Приступаем писать процедуру проверки. Как вдруг сталкиваемся вот с этой болью:

 

 

Да, я знаю, что эту «боль» можно преодолеть используя таблицу значений, но поскольку пишем «на коленке» то просто добавим регистр сведений в который каждый раз при выполнении процедуры будет записываться последнее событие (а все остальные при этом удаляться, итого в базе не может быть более одной записи в данном регистре). Состав регистра при этом состоит всего из двух измерений (id, user) по аналогии с названиями колонок в MySQL. В данном случае id это порядковый номер события за день, то есть чем больше ID тем актуальнее событие. В случае если события записываются в одно и тоже время с точностью до секунды, то ID лучший вариант определения последнего.               

В итоге, перед началом проверки наличия виртуальной карты у покупателя, обновляем в регистре сведений последнее событие, и далее работаем по нему.  А после этого, проверяем по данному покупателю наличие у него бонусов. В конце, заполняем из запроса значение в реквизит «код карты» (если есть чем заполнить)

Код процедуры получился следующий:

&НаСервере
Процедура СчитатьПокупателяНаСервере()
	Запрос1 = Новый Запрос();
	Запрос1.Текст = 
	 "ВЫБРАТЬ ПЕРВЫЕ 1
	 |	events.id КАК id,
	 |	events.user КАК user
	 |ИЗ
	 |	ВнешнийИсточникДанных.Faces.Таблица.events КАК events
	 |
	 |УПОРЯДОЧИТЬ ПО
	 |	id УБЫВ" ;
	Результат = Запрос1.Выполнить();
	Выборка = Запрос1.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
	МенеджерЗаписи = РегистрыСведений.АктуальноеЛицо.СоздатьНаборЗаписей();
	ТекущийПокупатель = МенеджерЗаписи.Добавить();
	ТекущийПокупатель.ID = Выборка.id;
	ТекущийПокупатель.User = Выборка.user;
	МенеджерЗаписи.Записать();
	КонецЦикла;
	Запрос2 = Новый Запрос();
	Запрос2.Текст =
	"ВЫБРАТЬ
	|	АктуальноеЛицо.User КАК User,
	|	ВидыКартЛояльностиВладеющиеКартой.НикВладельца КАК НикВладельца,
	|	ВидыКартЛояльностиВладеющиеКартой.Ссылка КАК Ссылка,
	|	Карты.Штрихкод КАК Штрихкод
	|ИЗ
	|	РегистрСведений.АктуальноеЛицо КАК АктуальноеЛицо
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКартЛояльности.ВладеющиеКартой КАК ВидыКартЛояльностиВладеющиеКартой
	|			ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|				КартыЛояльности.Штрихкод КАК Штрихкод,
	|				КартыЛояльности.Владелец КАК Владелец
	|			ИЗ
	|				Справочник.КартыЛояльности КАК КартыЛояльности
	|			ГДЕ
	|				КартыЛояльности.Владелец.Наименование ПОДОБНО ""Лицо"") КАК Карты
	|			ПО ВидыКартЛояльностиВладеющиеКартой.Ссылка.Ссылка = Карты.Владелец.Ссылка
	|		ПО АктуальноеЛицо.User = ВидыКартЛояльностиВладеющиеКартой.НикВладельца";
	Результат2 = Запрос2.Выполнить();
	Выборка2 = Запрос2.Выполнить().Выбрать();
	Пока Выборка2.Следующий() Цикл
		ЭтаФорма.КодКарты = Выборка2.Штрихкод;
	КонецЦикла;
	Сообщение = Новый СообщениеПользователю();
	Если ЭтаФорма.КодКарты = NULL Тогда
		Сообщение.Текст = "Покупатель не опознан"
	Иначе Сообщение.Текст = "Обпознан покупатель с ником" + Выборка2.user;
		КонецЕсли
КонецПроцедуры

 

Ошибок нет, пробуем в режиме предприятия.

Платформа распознавания лиц в это время работает примерно так:

 

То есть каждые несколько секунд «узнает» лицо в кадре и пишет в базу событий и записывает в базу результаты. А еще утверждает, что покупатель «чёт приуныл».

 

Запускаем фронт кассира, добавляем в покупки двух «белочек» (просто для данной номенклатуры настроены цены в демонстрационной базе).

 

 

Нажимаем «Считать карту» и новую кнопку «Считать покупателя»

 

 

It works! При нажатии код карты определился как «18» (тот самый код который присвоился карте). Нажимаем «Готово» и «Рассчитать скидки» на фронте кассира.

 

 

Скидка на «белочек» учитана. ЧИТД.

Выводы:

В целом, все это максимально просто с точки зрения реализации, поэтому сомнений что идея «взлетит» не было. Опасения вызывала скорость работы 1С с внешними источниками, то есть что пока он получит данные, в базе создастся еще несколько событий и то что получит 1С будет уже не актуальным. Но по-факту запрос 1С вытащил актуальное событие из БД MySQL.

Как это можно использовать еще? На скриншотах видно, что помимо «узнавания» система также пытается определить пол, возраст и эмоции человека. Исходя из этого кассир также может попытаться определить возраст. Это актуально в случаях если на продукцию стоит ограничение 18+. Конечно есть вероятность того что система неправильно определит человека. Но можно усложнить логику - в зависимости от уровня соответствия человека в объективе тому что в базе. Если уровень соответствия не высок, но система определяет что это «именно тот покупатель» то можно задавать вопрос кассиру – учитывать ему скидку или нет? Но это размышления из серии – «а что, если»? 

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

Насколько подобное решение может быть эффективно для бизнеса? Не важно, мы же кодеры)). Лучики добра всем в лапки!

Распознавание лиц карты лояльности нейросеть управление торговлей 11

См. также

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101399    296    173    

312

Распознавание номеров автомашин с ip - камер, видео, фото

Распознавание документов и образов Периферийные устройства Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    3805    2    1    

3

SALE! 30%

Когда много сканов: Автоматическое прикрепление сканированных документов

Учет документов Распознавание документов и образов Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Обработка экономит время, распознавая и прикрепляя сканированные оригиналы документов к документам в 1С. Поддерживаются штрихкоды, QR-коды, отсканированные PDF документы без штрихкодов, полученные в результате потокового сканирования PDF документы, сформированные в ЭДО PDF документы.

6480 4536 руб.

23.12.2021    12084    7    24    

7

Распознавание BarCode Web-камерой и передача данных в 1С

Сканер штрих-кода Распознавание документов и образов Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Программа позволяет распознать графический код посредством USB Web-камеры и записать результат в буфер обмена. Впоследствии его можно прочитать средствами 1С.

6 стартмани

26.01.2024    571    0    alexkozin    0    

0

Полностью голосовое управление учетной системой. Вести из лаборатории

Нейросети Мессенджеры и боты Распознавание документов и образов Бесплатно (free)

Под голосовым вводом я понимаю не просто проговаривание в микрофон заранее запрограммированных команд. А настоящий голосовой ввод. Когда пользователь говорит, что ему нужно в свободном формате, на естественном языке. Можно ли сделать на этом полноценную учетную систему? Telegram, API и немного магии (GPT).

27.09.2023    1419    mkalimulin    14    

14

Распознавание паспорта РФ. Python+1С без сторонних сервисов

Распознавание документов и образов Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

В данной публикации мы рассмотрим методы разработки приложений на Python + 1С для распознавания Паспорта РФ.

1 стартмани

30.01.2023    13614    75    Indgo    41    

94
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Torin 741 02.07.21 10:04 Сейчас в теме
Прикольная идея :) +
KirillGermann; +1 Ответить
2. gubanoff 63 05.07.21 14:42 Сейчас в теме
(0) Платформу для распознавания в студию забыли прикрепить к статье, а так все гуд :)
4. KirillGermann 8 05.07.21 23:43 Сейчас в теме
(2) Платформу если крепить к статье, то только с железкой на которой она крутиться) Иначе, "не взлетит"))
6. gubanoff 63 06.07.21 09:08 Сейчас в теме
(4) Тогда непонятна польза для сообщества. Что распознавание работает - это понятно. Что его можно прикрутить к 1С - тоже понятно. Непонятно, где взять готовое или полуготовое решение для этого.
simuljakr; TitanLuchs; +2 Ответить
3. IgorS 43 05.07.21 17:23 Сейчас в теме
Неактуально. Теперь в магазин все в масках ходят - ковид :)
maksa2005; +1 Ответить
5. KirillGermann 8 05.07.21 23:52 Сейчас в теме
Это да, маски снижают точность распознавания ооочень сильно, а если еще и в солнечных очках и шапке... Остается только развивать технологии распознавания и надеяться что "массочный режим" однажды закончится)
7. user1199510 22.07.22 06:53 Сейчас в теме
Здравствуйте, Скажите пожалуйста, а какую платформу вы используете для распознавания лиц? Какие камеры и софт это делают достойно?
simuljakr; +1 Ответить
Оставьте свое сообщение