Может ли оптическое распознавание текста (OCR) работать так же быстро, как сканирование штрих-кода, и что для этого надо сделать? UPD 11.12.19 вошло в релиз https://infostart.ru/public/1166378/

11.12.19

Разработка - Мобильная разработка

В статье рассматривается решение важной проблемы – сканирование объектов, на которые не нанесен или не может быть нанесен штрихкод или RFID по технологическим причинам, но при этом присутствует номер, артикул или какой-либо другой цифро-буквенный идентификатор. Т.е. распознавание текста с целью идентификации объектов учета. Приложено короткое видео с примерами работы. UPD: функции встроены в конструктор https://infostart.ru/public/1166378/

Я думаю многие сталкивались с ситуацией, когда штрихкодов на объектах учета нет и не будет, а ТМЦ(продукцию, оборудование, документы и т.д.) учитывать нужно. При этом все понимают, что решение для автоматизации должно обладать повышенной надёжностью и главное скоростью. Никого не устроит если артикул будет сканироваться пару минут или если из 10 сканирований правильными будет только 7, да даже если из 100 будет правильным 99 – это тоже неприемлемый результат. Кто это будет исправлять потом? Такое решение только ради поиграться.

Алгоритмы распознавания текста (OCR) существуют уже очень давно и успешно применяются в разных областях. Например сканируются бумажные документы. Или книги. Если почитать такую отсканированную книгу (при условии что ее не редактировал редактор) то рано или поздно можно наткнуться на ошибки в распознавании. Такие ошибки  я встречал в 100% отсканированных книг. Чисто практическим путем можно прийти к выводу что все эти алгоритмы не могут гарантировать 100% точность сканирования. Потому что нет внутренней верификации. В случае с текстом верификацией является словарь. Т.е. если сканируется слово «шоколад», даже если «о» смахивает на «0»(ноль) программа не выдаст «ш0к0лад» потому что она сверится со словарем.

А в случае сканирования номера или артикула – вообще нет никакой верификации! Нет никакой проверки целостности (как например в EAN-13) нет даже уверенности в том что блок текста захвачен полностью. Т.е. на таком алгоритме нельзя построить промышленную систему учета? Или всетаки можно?

Как работает решение для непрерывного захвата видеопотока можно посмотреть на приложенном видео – там где показана работа «демо» с бумаги и колеса. Суть в том что алгоритм непрерывно сканирует видеопоток, выделяет в нем блоки и распознает их. Далее по задумке Гугл пользователь должен тапнуть по нужному блоку и распознанный текст покажется на следующем экране (и далее с ним что то делать).

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

Кстати, небольшое отступление о распознавании штрих-кодов камерой телефона. Многие относятся скептически, но библиотека ZXing от Zebra (не стоит путать с библиотекой от 1С) которая стоит в Simple UI показывает результаты, не уступающие оптическим сканерам. Конечно, телефон не заменит специальный дальнобойный лазерный сканер для работы с кара, но для обычных целей это 100%-эффективная замена ССD сканеру. 5 сканирований в минуту – легко!

В общем такой подход считаю неправильным и в вместо этого предлагаю другой.

Суть подхода очень проста и заключается в глубокой интеграции в цикл сканирования видеопотока и верификации сканируемых идентификаторов (артикулов, номеров) в БД приложения. Работает это так. Допустим у нас есть база объектов для сканирования, например  справочник Номенклатура с артикулами. Размер справочника не важен – хоть 100 тысяч объектов.

Если посмотреть на примеры в видео то там видно что видеопоток сканируется несколько раз в секунду – это бесконечный цикл, при этом постоянно выделяются блоки и блоки распознаются в текст. Так сказать появляются гипотезы. Так вот если в этот цикл встроить запрос к базе артикулов чтобы проверять эти «гипотезы» и прерывать цикл когда найдено 100% совпадение – это вот то что я и сделал. Я думаю это не провернуть с 1С (в смысле отсылки запроса, поиск в базе и возврат ответа) – скорость не та. Зато это отлично работает на прямых SELECT-ах к SQL на устройстве(в тесте у меня запрос к «документам» - таблице documents которая хранится в БД приложения Simple UI)

Т.е. этот метод работает только по существующим артикулам. Не возможна ситуация «Такого артикула нет в базе». Режим сканирования будет пытаться распознать пока не распознает и цикл не прервется. Работа такая же внешне как с распознаванием штрихкодов через камеру – распознал, цикл закончился.

Для теста я просто сделал открытие карточки найденного товара на экране. Распознал – карточка открылась. Это не часть конструктора, нельзя встроить в процессы  – просто искусственный тест. Посмотрите видео, как это работает.

По результатам тестирования скорость при нормальной освещенности сопоставима со скоростью сканирования штрих кодов оптическим сканером. Каких то скрытых проблем не выявлено. Это конечно сильно зависит от состава и начертания текста, поверхностей, освещенности. Но согласитесь – шины довольно сложный объект?

Особенности библиотеки:

  • Работает полностью OFFLINE хотя есть и онлайн режим. Специально выключал всю связь, Simple UI работала с настройкой Off-line
  • Иногда телефон нагревается, когда долго ждешь
  • Распознает только латиницу. Есть и другие языки кроме английского но кириллицу не распознает. Это можно частично обойти если делать замену похожих букв. Но понятноЮ не все буквы похожи
  • Непонятен вопрос с лицензированием (об это далее)

 

Хоть распознавание и показало себя отлично я пока не встраиваю его в распространяемое решение Simple UI, но могу предоставить apk с встроенным распознаванием по запросу всем желающим. Причина в том, что я не понимаю как оно лицензируется. И судя по форумам не один я. У Гугла есть тарифы, они более чем божеские и можно было бы отдавать клиенту решение с его ключом чтобы он платил. Вот цены на online: https://cloud.google.com/vision/pricing Но! Конкретно та библиотека и модель работают OFFline, а нигде не указывал свой идентификатор Firebase и ничего не платил… Халява? Может дело в том что ML Kit имеет статус beta? Но я не представляю как они будут контролировать число сканирований (чего?) в месяц… В общем, пока этот вопрос выясняется.

OCR распознавание текста мобильная разработка Андроид SimpleUI

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

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

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54423    135    102    

160

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33019    80    157    

173

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

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

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    91738    507    186    

293

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1598    informa1555    0    

25

Создание экранов в произвольной разметке (xml) в SimpleUI

Мобильная разработка Бесплатно (free)

Я сделал альтернативный способ рисования экранов и списков в виде стандартной xml-разметки (стандартных xml-файлов для Android). Теперь можно рисовать в Android Studio или Figma в визуальном редакторе, прицеплять в симпле и работать дальше как обычно.

27.11.2023    1474    informa1555    1    

19

Релиз 11.75 Simple UI. Октябрь 2023

Мобильная разработка Мобильная платформа Бесплатно (free)

В новом релизе сразу много всего: интегрирована собственная документно-ориентированная СУБД SimpleBase, развит функционал работы, доработана OCR и ActiveCV, работа с диалогами (более удобная) и много всего другого полезного. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

02.10.2023    2404    informa1555    12    

24

Как начать зарабатывать на разработке мобильных приложений уже завтра!

Мобильная разработка Мобильная платформа Бесплатно (free)

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

17.08.2023    2235    natashik.angel    2    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. protexprotex 126 28.11.19 08:44 Сейчас в теме
Вот по Вашей теме - https://infostart.ru/public/266244/
Хотелось бы узнать Ваше мнение и в чем отличие. Спасибо.
2. informa1555 2605 28.11.19 08:45 Сейчас в теме
(1) Она неактивна или находится на модерации
3. protexprotex 126 28.11.19 08:48 Сейчас в теме
(2)
Название случайно поменял и на модерацию отправил. Я там года четыре назад разработал компоненту. И там на лету также производится поиск артикулов и пр. и в 1С передается.
6. informa1555 2605 28.11.19 09:12 Сейчас в теме
(3) я надеюсь потом когда модерации пройдет прочитаю Ваш пост, но как мне кажется там подход как раз такой какой мне не нравится - "компонента отдает артикул 1с" я как раз за другой подход.
8. protexprotex 126 28.11.19 09:20 Сейчас в теме
(6) Ну Вы же можете на стороне 1С проанализировать этот артикул. Я к примеру, это очень интенсивно использую в этой разработке - https://infostart.ru/video/w630732/
там моя программа анализирует каждый кадр и посылает приемнику (1С, например) распознанные данные. И программа - приемник находит наиболее достоверный результат из всех посланных методов наиболшего кол-ва распознанных версий. Т.е. пришло от моей программы результаты - O345BM52 O345BM52 O346BM52 O845BM52 O345BM52 - мы видим, что в данных O345BM52 встретилось 3 раза (еще можно учесть коэффициент распознавания и учесть средневзвешанный ответ) - и выносим вердикт, что это O345BM52
9. informa1555 2605 28.11.19 09:59 Сейчас в теме
(8) я с этого начинал, скорость не та - 1с лагает
11. protexprotex 126 28.11.19 10:27 Сейчас в теме
(9)
Ну тогда сама компонента может находить наиболее вероятный, а уже в 1С возвращать результат. Это быстро. Я так и делаю. Все очень быстро.
12. informa1555 2605 28.11.19 11:45 Сейчас в теме
(11) с наиболее вероятным результатом наиболее вероятно влететь на неустойку в первый же день. Это не устраивает. Я про это и пишу чем такой подход плох. Он может что то о найти а может нет. Я довольно плотно сижу на теме wms и не наблюдаю что распознавание работает повсеместно. Хотя есть потребности, маркировка стоит денег да и не всегда возможна в принципе, чё бы не распознавать казалось бы. То что у Вас есть компонента это прекрасно, но если бы я ее использовал в Simple UI то в том режиме как я использую google vision
13. protexprotex 126 28.11.19 12:35 Сейчас в теме
(12) Не согласен. Приведу пример из давней уже разработке. В Питерском заводе по сканированию артикулов водных счетчиков - все прекрасно работает вот уже два года. Ошибка распознавания артикула - за два года не обнаружилась ни разу. Могу скинуть видео/фото проекта. Правда, там используется не контурный алгоритм, а быстрая корреляция. Но это суть дела не меняет. Если у Вас есть достаточное количество измерений, то среднее значение (матожидание) будет очень близко к истинному. На этом строиться вся теория бустинга, например. Также и беккинг. А математичесая база в них железобетонная.
14. informa1555 2605 28.11.19 16:43 Сейчас в теме
(13) Ну я же не спорю. Почему нельзя использовать несколько измерений? Распознал алгоритм 30 блоков, по 10 нашлись артикулы(сразу SQLем), из них один повторился 7 раз допустим, т.е. его частота 7/10, а у остальных меньше - значит берем его. Не?
15. protexprotex 126 28.11.19 16:55 Сейчас в теме
(14) Если коэффициент распознавания более 0.75 (например), то да. Тот же коэффициент корреляции Пирсона - если коэффициент более 0.75, и таких версий хотя бы две - то тут более 90 процентов вероятность что это правильно распознанных объект. Ну а если более версий - то можно сказать, что все 100. И никто не мешает применить беккинг. Взять три независимых алгоритма распознавания и по трем алгоритмам построить гипотезы. Проверял на бустинге. Строил 80 независимых алгоритмов и делал усреднение по ответам. Точность получалась 99%. И никто не мешает построить не 80, а 200. Там вообще почти все 100 будет.
informa1555; +1 Ответить
19. memb3r 29.11.19 17:09 Сейчас в теме
(12) Так и Google vision не дает 100% результат и может выдать "похожий" артикул. Значит это решение тоже не подходит для бизнеса?
22. informa1555 2605 29.11.19 17:20 Сейчас в теме
(19) Так там проверка идет по базе сразу же. В этом смысл.
23. memb3r 02.12.19 08:48 Сейчас в теме
(22) если, допустим, в базе есть артикул 12345 и 2345, то есть высокая вероятность того, что вместо 12345 ваша система подберет 2345, верно? Здесь нужно вводить контрольный знак и сверять контрольную сумму.
27. informa1555 2605 02.12.19 09:21 Сейчас в теме
(23) Так оно не найдет в базе 2345 и продолжит поиск. В этом весь смысл и есть. Вы когда шкод сканируете оно тоже не останавливается пока не отсканирует
32. memb3r 02.12.19 12:00 Сейчас в теме
(27) найдёт, в базе 2345 есть артикул.
25. protexprotex 126 02.12.19 08:53 Сейчас в теме
(22) По поводу проверки - опять же это как с номером машины - если в нашей базе есть номер O354BC52, а реально заехала машина O854BC52, но система выдала именно O354BC52, то при проверке по Вашему алгоритму приметься O354BC52 - т.к. этот номер есть в базе. Косяк будет... Как Вы решаете эту проблему? (с артикулом та же история может быть)
memb3r; informa1555; +2 Ответить
28. informa1555 2605 02.12.19 09:28 Сейчас в теме
(25) Да, такое возможно. В конкретных решениях нужно анализировать базу артикулов на похожесть. Кроме того, Вы подали отличную идею насчет частоты результатов, которую я сейчас встроил в Simple UI и опробую. Обязательно напишу как это на практике.
Прикрепленные файлы:
29. protexprotex 126 02.12.19 10:08 Сейчас в теме
(28) Спасибо. Интересно узнать о результатах. Но я бы все же лучше привязался не просто к частоте появления, а (если выборка - ответов большая) вычислил -p*log(p) информационную энтропию о оперировал бы ей. Это было бы намного стабильней. Т.к. информационная энтропия учитывает вероятность появления (в контексте Вашей задачи) символа в распознанном артикуле.
informa1555; +1 Ответить
30. informa1555 2605 02.12.19 10:20 Сейчас в теме
(29) p-это вероятность же? какая там выборка должна быть как Вы считаете? Допустим у меня всего 2000 артикулов, из них для 1000 есть похожие варианты 3-4 наверное (для каждого из этих 100) - это очень приблизительно. FPS у меня допусти 5 в секунду. Сколько надо набрать измерений чтобы статистические методы работали?
31. protexprotex 126 02.12.19 11:58 Сейчас в теме
(30) Да. p - это вероятность. Но тут это ни к чему. На одном ответе нужно посчитать информационную энтропию. Выборка ответов - это не то что Ваша распознающая программа выдала, а это выборка ответов по Вашей базе артикулов (т.е. возможные артикулы). т.е.:
энтропия системы Вашего ответа программы является суммой с противоположным знаком всех относительных частот появления символов в данной позиции артикула, умноженных на их же двоичные(можно и натур. основание использовать - это от выбранной единицы измерения зависит) логарифмы. Т.е. получив артикул из распознающей программы Вы можете высчитать среднюю энтропию Вашего ответа. И чем она меньше, тем более достоверный у Вас результат. А вот уже по Вашей обучающей выборке можно посчитать какая вероятность (p) нахождения конкретного символа в данной позиции.
33. protexprotex 126 02.12.19 12:01 Сейчас в теме
(31) Там еще частоту появления в данной позиции артикула символа можно скоррелировать с частотой появления соседних с ним символов. Но это уже нужно применительно к конкретному формату артикула привязывать.
4. protexprotex 126 28.11.19 08:51 Сейчас в теме
5. informa1555 2605 28.11.19 09:04 Сейчас в теме
(4) Да это весьма познавательно, я тоже плотно занимаюсь ML и всем этим, но тут суть поста в другом - тестирование системы которую можно отдать кладовщикам в промышленную эксплуатацию. Которая быстро и 100% точно будет считывать. Это вроде бы похоже но кардинально отличается))
7. protexprotex 126 28.11.19 09:15 Сейчас в теме
(5) Вы какой метод применяете в своей разработке? - (моя продемонстрированная разработка очень старая - сейчас уже мой движок "ушел" на много дальше - сейчас там применяю AdaBoost, нейронные сети и быструю корреляцию. Контурный анализ тоже есть, но он очень чуствителен к шумам - и в итоге выделение контура без разрывов получается только на относительно качественных кадрах. Склеить контур тоже можно, но тут бывает проблема с близким расположением объектов интереса)
10. informa1555 2605 28.11.19 10:01 Сейчас в теме
(7) без понятия)) Гугл какой то использует. Мне даже не интересно. Интересуют только эксплуатационные характеристики
16. kiv1c 809 29.11.19 16:40 Сейчас в теме
Вот я тоже писал статью про использование Goggle Cloud Vision https://infostart.ru/public/586313/
17. protexprotex 126 29.11.19 16:55 Сейчас в теме
21. informa1555 2605 29.11.19 17:16 Сейчас в теме
(16) А это не тот сервис)) У меня Firebase ML Kit. У того чисто облачное распознавание как я понял.
theelectric; +1 Ответить
24. memb3r 02.12.19 08:50 Сейчас в теме
(21) Firebase - это облачные решения. У вас, как я понимаю, отрабатывает библиотека от Google vision и не используются возможности Firebase.
26. informa1555 2605 02.12.19 09:19 Сейчас в теме
(24) не только. Там модель 1 раз скачивается и все работает полностью оффлайн. Такой вот firebase для андроид. Я не знаю почему оно так называется. Насколько я понимаю у Гугл дублируются решения. Т.е. при выключенном вайфай, прочей связи и т.д. Проверено на пактике 100%. В видосе это работает на телефоне у которого нет симки и вайфай выключен.
38. SkyD 24.07.22 19:32 Сейчас в теме
(16)Скажите для распознавания необходимо загружать картинку на облако Гугл или можно использовать локальную картинку?
39. informa1555 2605 24.07.22 20:29 Сейчас в теме
(38)
(38) Добрый день! Никакой облачной обработки, все оффлайн в рамках платформы Simple UI. Без иетернета работает. Посмотрите видео на моём канале по ActiveCV и SimpleUI
18. memb3r 29.11.19 17:03 Сейчас в теме
У вас на картинке с шиной 0 не распознался?
20. informa1555 2605 29.11.19 17:13 Сейчас в теме
(18) сначала нет потом - да. Он делает несколько распознаваний в секунду и с нулем и без нуля, по всякому. По каждому распознаванию программа ищет. Как найдет, поиск прерывается. Скрин сделан в момент когда без нуля было, а долей секунды позже произошло распознавание.
34. dkvartal69@yandex.ru 29.04.20 18:09 Сейчас в теме
Интересны ваши решения. На базе своих разработок мобильное приложение создать сможете?
35. informa1555 2605 29.04.20 18:11 Сейчас в теме
(34)Спасибо. Конечно смогу. Тем и промышляю
36. dkvartal69@yandex.ru 30.04.20 08:58 Сейчас в теме
Отлично. Какие данные требуются от меня и каким образом (канал) можем пообщаться?
37. informa1555 2605 30.04.20 09:49 Сейчас в теме
(36) Здравствуйте! моя почта dv1555(собакен)hotmail.com. По почте отвечу по остальному.
Оставьте свое сообщение