Распознавание лиц в связке с 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! 35%

Распознавание и загрузка сканов в 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С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить". Программа сама находит таблицу в файле, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает товарные документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, накладную, заказ клиента и т.д.). Содержит модуль работы с электронной почтой. Для поиска таблиц используются новейшие методы OCR-нейросети. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д.

5400 4968 руб.

04.06.2019    95659    274    169    

285

Распознавание документов в "1С:Предприятие 8.3": расширение для типовых конфигураций.

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

Расширение для типовых конфигурация и для самостоятельной интеграции системы распознавания документо удостоверяющих личность и прочих документов непосредственно из информационных баз "1С:Предприятия 8.3" с помощью Content AI - Passport Reader SDK. Расширение позволит не изменяя типовой код конфигурации, расширить текущий функционал несколькими кликами мыши.

12000 руб.

26.01.2016    67770    75    0    

98

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

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

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

20400 руб.

31.05.2023    2984    1    1    

2

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

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

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

1 стартмани

30.01.2023    9801    46    Indgo    34    

88

Улучшенное распознавание плательщиков для 1С Учет в управляющих компаниях ЖКХ,ТСЖ и ЖСК

Банковские операции Распознавание документов и образов Платформа 1С v8.3 Конфигурации 1cv8 Энергетика и ЖКХ Россия Бухгалтерский учет Платные (руб)

Как упростить жизнь бухгалтеру ЖКХ при разнесении оплат из Сбербанка и других банков? Мы создали специальное расширение, которое поможет быстрее обрабатывать платежи. Больше не нужно руками искать собственника лицевого счета, программа сделает это за вас: определит по назначению платежа плательщика и договор по лицевому счету, указанному в назначении платежа.

9000 руб.

21.12.2022    5339    0    2    

2

Робот-загрузчик и архив документов. Распознавание/загрузка сканов документов в 1С8(7.7), архив сканированных документов.

Файловый обмен (TXT, XML, DBF), FTP Учет документов Распознавание документов и образов Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Конфигурации 1cv7 Россия Платные (руб)

Программный комплекс способный распознавать сотни листов за раз любых сканированных(фото) документов (УПД, ТОРГ12, СФ, паспорт и пр.) и загружать их в любую 1С (БП3.0, УТ, КА, УНФ, УПП, 1С7.7 ТиС, ЗУП3 и пр.), а также формировать архив сканированных документов.<br> Робот применяет до 5 способов распознавания. Максимальное качество загрузки документов из бесплатных OCR. Работает без Интернета.

10800 руб.

13.10.2022    7149    1    12    

8

Распознавание текста из изображений и PDF с помощью нейросетей Yandex Vision и 1С

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

Если вам нужно с помощью компьютерного зрения от Yandex быстро распознавать текст из документов и изображений, эта статья для вас!

5 стартмани

13.07.2022    11722    14    kiv1c    5    

35
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Torin 673 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С - тоже понятно. Непонятно, где взять готовое или полуготовое решение для этого.
TitanLuchs; +1 Ответить
3. IgorS 44 05.07.21 17:23 Сейчас в теме
Неактуально. Теперь в магазин все в масках ходят - ковид :)
maksa2005; +1 Ответить
5. KirillGermann 8 05.07.21 23:52 Сейчас в теме
Это да, маски снижают точность распознавания ооочень сильно, а если еще и в солнечных очках и шапке... Остается только развивать технологии распознавания и надеяться что "массочный режим" однажды закончится)
7. user1199510 22.07.22 06:53 Сейчас в теме
Здравствуйте, Скажите пожалуйста, а какую платформу вы используете для распознавания лиц? Какие камеры и софт это делают достойно?
Оставьте свое сообщение