Я экспериментирую с интерфейсами, причем интерфейс понимаю в широком смысле – это и условно «экраны с кнопками» и речь, звук и т.д. – т.е. все что передает/получает информацию от пользователя к ЭВМ. Анализ видеопотока и раньше использовался в Simple UI – для распознавания текста, штрихкодов с камеры. Но сейчас его возможности расширены и выделены в отдельный режим, который я назвал «ActiveCV» – «активное компьютерное зрение».
Технология позволяет распознавать объекты различными способами, обрабатывать в обработчиках и визуализировать (управлять отрисовкой) в видеопотоке.
Например с помощью визуализации мы видим какие объекты уже обработаны и их не надо повторно сканировать, какие еще нет, а какие – просто лишние (возможно их нужно переставить).
Например с помощью визуализации мы можем показать дополнительную информацию об объекте в видеопотоке и вывести подсказки на экран:
Вот так это было задумано на макете (в этом видео показан дорелизный интерфейс, далее– релизный):
Потоковый режим чем то напоминает работу с RFID но есть важное отличие – в RFID мы не видим объекты которые к нам попадают, а в ActiveCV видим – может потрогать, понимаем где они находятся. Вот видео от начала разработки – тут хорош виден смысл технологии (далее видео уже с релиза)
Казалось бы, нет ничего особенного во всех этих вещах по отдельности, но вместе детекторы(распознавание)+визуализация+ обработчики на Python или 1С вписанные в анализ видеопотока … - все это вместе дает синергетический эффект. Я долго подбирал нужное решение, например нельзя выносить обработку абсолютно всего в обработчики (даже на питоне) – будет низкий FPS, поэтому я использую списки и распределяю нагрузку. Ну и прочие действия, чтобы все работало четко и плавно.
Как с этим работать?
Для работы с этим режимом в конструкторе выделены отдельные метаданные «CV-операция», состоящая из «CV-шагов», по аналогии с Операцией/Экранами. Шагов может быть и всего один как в прилагаемых демо-конфигурациях. В шагах настраивается состав объектов на экране, надписи котрые выводятся, кнопки, разрешение, вариант отрисовки и настройки детектора
Для шага задаются списки отрисовки (которые динамически меняются. Например объект был в зеленом списке, но после сканирования попал в желтый) – желтый, зеленый, красный, серый и невидимый. Также задается список дополнительной информации по объекту в котром можно использовать HTML. И настраивается режим отображения например показывать только зеленый список, остальное – красным.
Детекторы – это алгоритмы, распознающие объекты. Это глаза данного режима. Это распознавание штрихкодов камерой, различное распознавание символьных объектов и физических объектов материального мира.
К уже существующим режимам распознавания текста добавились изменения:
- В режиме распознавания текста (поиск образцов) теперь можно передать просто список, например артикулов через переменную (строка с разделителями «;»). Т.е. не через SQL как раньше – не нужно синхронизировать. SQL остается для больших массивов номенклатур, которые через строку передать затруднительно. Мелочь, но удобно.
- Распознавание автомобильных номеров – один из видов распознавания «по шаблонам». Т.е. заранее грузить номера не надо – она находит номера. Пока только российские.
- Распознавание физических объектов. Система обнаруживает границы объекта воспринимает это как единый объект, находит в нем идентификатор (штрихкод или текст) и связывает этот объект в целом с идентификатором. Т.е. система продолжает трекинг объекта даже если его идентификатор уже не виден. Я сделал этот режим чтобы повысить плавность работы с OCR – убрать мерцание и лишние гипотезы. Это довольно экспериментальная вещь – не знаю как оно приживется и насколько это применимо в продакшн. Но выглядит прикольно. В крайнем случае есть аналогичные детекторы без объектов.
Вот так выглядит трекинг объектов например:
На этом видео показаны режимы работы с объектами и без объектов:
Работа с режимом описана в этой статье справки https://uitxt.readthedocs.io/ru/latest/cv.html. Скажу только что разработка не просто простая, а ну очень простая – всего 4 команды. Таким образом я поддерживаю главный принцип платформы – simple - простоту разработки решений. Просто напомню, что Simple UI создавалась как инструмент, в котором можно быстро накидать фронтовое решение, а потом его просто менять и поддерживать. Не прямо такой полностью визуальный конструктор (у них обычно много ограничений) а сочетание простых принципов и архитектуры, которую легко объяснить на пальцах. Поэтому новый визуальный режим просто обязан был быть простым.
Технологически это все работает оффлайн, не требует интернета. Никаких облачных сервисов и оплаты каждого чиха. Решения работают, например, в глухой тайге, так что зависимые от интернета технологии в Simple UI бы не прижились.
Демонстрационная конфигурация №1 «Учет автомобилей на КПП»
Файлик в приложении к статье – это конфигурация Simple UI. Да, конфигурацию Simple UI вместе с настройками можно поместить в файлик, открыть на устройстве (послать по почте, в вотсапе или просто зайти на этот пост с телефона и скачать) – она сразу же применится и начнет работать (это один из множества видов дистрибуции в Simple UI). Нужно только чтобы стояла Simple UI версии 5.50. Не нужно никакой 1С – конфигурация самостоятельная. В конфигурации можно вести учет номеров и информации к ним и выделять авто зеленым/красным если номер зарегистрирован или «заблокирован». Обычный режим КПП.
Демонстрационная конфигурация №2 «Инвентаризация для УТ11.4»
Конфигурация также самостоятельная , можно загрузить с файлика, но она в виде расширения и работает совместно с сервером, опубликованным из расширения для УТ11.4.13.123. Т.е. она работает оффлайн, но для загрузки справочников/выгрузки результатов нужен сервис из 1С. Она получает данные с 1С, потом, после пересчета отправляет в 1С, в специальный регистр и там они могут быть загружены в Пересчет из этого регистра.
В конфигурации есть “Мастер начальной загрузки”. Нажав в нем кнопку загрузятся данные в справочники и документы. Первым делом нажмите в нем желтую кнопку!
Основной режим конфигурации представляет из себя бесконечный цикл сканирования – штрихкоды сами сортируются в зависимости от того уникальные они или нет. Лучше всего это видно на схеме.
Скачать конфигурацию и доработать под себя можно из поста Готовые решения //infostart.ru/public/1201444/ Важно! Конфигурация написана как пособие/основа для разработки для разработчиков поэтому написана максимально простым кодом. Например 1С-ную часть синхронизации можно (и нужно) оптимизировать по производительности – там уникальные Ид получаются в момент запроса функцией УникальныйИдентификатор() – она работает долго. Лучше записать их заранее. Кроме того, она рассчитана на конкретные условия учета – это не универсальное решение, у меня была другая цель.
Демонстрационная конфигурация №3 Инвентаризация ОС в демо базе
Изза того что первые два примера оффлайновые и с обработчиками на Python могло сложиться впечатление что эта технология работает только с Python. Нет, она прекрасно работает с 1С в режиме он-лайн подключения. Поэтому я добавил конфигурацию "Инвентаризация ОС с Active CV" в демо-базу в комплекте разработчика (24.04.2020). Она работает через веб-сервис, обработка происходит в онлайне на стороне 1С.
Для чего это все нужно?
Применение №1 раскрыто в демо-конфигурации «Инвентаризация с ActiveCV» - смысл в том, чтобы:
А) сканировать быстро и в потоковом режиме никуда не переключаясь – т.е. избавить пользователя от лишних действий
Б) показывать то, что уже отсканировали – т.е. выделять цветом то , что уже не надо пересчитывать. И выделять то что вообще не касается процесса. Таким образом можно быстро, например сверить уникальные коды на погрузке/приемке
Применение №2 – вывод информации на экран. Например (учитывая то, что конфу можно подгрузить хоть с QR-кода, хоть с файла) можно предоставить клиентам удобный интерфейс в торговом зале. Возможности вывода в видеопотоке усилены за счет html
Применение №3 Визуальная навигация - наводите на QR коды и видите куда идти. Человек впервые попавший на склад ориентируется на красный/зеленый и быстро идет куда надо.