Распознаем штрих-коды QR, EAN-13, Code 128 с помошью 1С и веб камеры






Внешняя компонента, поможет распознать штрих-код, используя обычную веб камеру. Умеет работать с UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.

Предисловие.

Несложно заметить, что на просторах интернета достаточно много разработок для генерирования штрих-кодов разного типа. Многие используются в качестве онлайн сервисов, другие — как отдельные приложения и, наконец — как внешние компоненты, в том числе и для 1С. Однако, последние, хоть и генерируются в 1С, распознаны ею уже не могут быть. Поиски решения как распознать штрих-код заняли много времени, и были безуспешны — поэтому было решено создать ActiveX для распознавания штрих-кодов.

Технология.Камера

Работа с камерой осуществляется с помощью библиотеки avicap32.dll. Благодаря ей же, реализован метод ПолучитьИмяУстройства(Индекс) возвращающий имя драйвера, который можно использовать для построения списка устройств ввода видео данных.

Технология.РаспознованиеШтрихКода

Изобретать велосипед незачем ,так как уже есть проверенные библиотеки распознавания:
ZXing-2.1*
MessagingToolkit Barcode*
*Библиотеки бесплатны для некоммерческого использования.

Выбор пал на последнюю, ввиду большей скорости обработки информации, однако замечу, что после множества тестов распознавания сложных штрих-кодов (таких как PDF 317 и CODE 128) процент ошибок ZXing был сравнительно ниже.

ВнешняяКомпонента.Использование

К сожалению, на момент написания статьи не удалось решить проблему использования одной библиотеки для обоих клиентов, поэтому чтобы использовать компонент в толстом клиенте используется Shakmaev.Decoder.dll, для тонкого Shakmaev.TDecoder.dll.
Для начала работы с компонентой убедитесь что на компьютере установлен Microsoft Framework 4.
Затем ее необходимо зарегистрировать выполнив команду:
%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe «.Shakmaev.Decoder.dll» /codebase
 и скопировать файл avicap32.dll(сохраните старый файл, если он уже есть) в папку WindowsSystem32.
Для облегчения работы в папке с ВК вы найдете BAT файл(Registry.bat), который поможет сделать все это автоматически.

[Толстый клиент]

Библиотека для работы с обычными формами Shakmaev.Decoder.dll [GUID: 779D9FB8-C4A3-40c2-9E08-296CDAF1165F]
Если вся работа была проделана правильно, в списке окна Форма-Вставить ActiveX должна появиться строка Shakmaev.Decoder.  Перед началом работы необходимо указать коды каких типов вы будете пытаться распознать. Для этого существуют параметры вида ИскатьХ, где Х — это любой из этого списка поддерживаемых типов штрих-кодов (например ИскатьQR):
UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.
Для удобства в ВК есть параметр «ИспользоватьСигнал«, если присвоить ему значение «Истина«, то при выполнении функции «РаспознатьКод()» системный динамик должен издать звук. К сожалению, это работает только в операционных системах архитектуры x86.
Подробности в обработке «Decoder» архива проекта, форма «ОбычнаяФорма».

[Тонкий клиент, Веб-клиент]

Библиотека для работы с управляемыми формами Shakmaev.TDecoder.dll [GUID: AE078288-5E41-4316-95FF-33AFE7753168]
Чтобы добиться корректной работы ActiveX в управляемом приложении необходимо в настройках обозревателя разрешить выполнение ActiveX сценариев и все что с ними связано. Функции и параметры доступные в обычном приложении тут работают аналогично.
Подробности в обработке «Decoder» архива проекта, форма «УправляемаяФорма».

 

[UPD 27.08.2013]

Любые действия, связанные с регистрацией компоненты, вы должны выполнять с правами администратора.

//Ошибка RegAsm : error RA0000: При записи регистрационной информации в реестр произошла ошибка.//

Cкорее всего, у вас нет прав доступа к ветке реестра HKEY_CLASSES_ROOT.
Алгоритм дейтвий такой:

1. Нажимаем Пуск — Выполнить

2. Пишем regedit и жмем Enter

3. Кликаем правой кнопкой мыши по ветке HKEY_CLASSES_ROOT и выбираем «Разрешения»

4. Выберите группу Администраторы

5. Убедитесь, пункт «Полный доступ» отмечен, в противном случае отметьте его.

6. Нажмите «Применить», и «ОК»

7. Установка должна пройти успешно. При необходимости перезагрузитесь.

//Ошибка RegAsm : error RA0000: Unable to locate input assembly. ‘Путь в ковычках’//

Ошибка связана с тем, что программа регистрации не может найти файл библиотеки. Библиотека компоненты должна находиться в той же папке, что и bat файл.

84 Comments

  1. ildarovich

    Спасибо, давно пора из планшетов POS-терминалы делать! И другие применения напрашиваются.

    Reply
  2. Il

    надо попробовать, интересное решение..

    Reply
  3. savflint

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

    Reply
  4. shakmaev

    (3) savflint,

    1. Аппаратные сканеры в разы дороже веб камеры.

    2. Тут я не настаиваю на альтернативе, просто реализация технологии.

    3. Еще не видел аппаратные сканеры QR, Data Matrix кодов.

    Reply
  5. savflint

    Практически все аппаратные сканеры это делают, и думаю гораздо быстрее этой ВК.

    Reply
  6. snils

    хотел внедрить QR код, все никак не покупали мне сканер. спасибо!

    Reply
  7. wunderland

    Очень полезная штука — цена Веб-камеры и сканера отличаются в разы.

    Reply
  8. arjuna

    Детская игрушка. Необходимо мощное освещение, и точное прицеливание. Для одного двух считываний нормально, но для промышленного применения не годится.

    Reply
  9. shakmaev

    arjuna,

    1. Из примеров работы компоненты можно заметить, что прицеливание работает под разными углами.

    2. Конечно, если использовать камеру 0,3 мп, по понятным причинам распознать штрих код сложно.

    3. В своей компании я внедрил этот инструмент в бизнес процесс, оператор, в стандартно освещенной комнате, тратит не более 5 секунд для распознавания(цикл постоянно ждет появления штрих-кода EAN и QR).

    Ну и наконец, в устройствах(телефоны, планшеты), которые используют похожие алгоритмы, установлены камеры с разрешением от 2 мп, а работают они только если есть освещение.

    Reply
  10. DrAku1a

    Такое и бесплатно! Однозначно плюсую и качаю… Сейчас если и не нужно — в будущем пригодится!!!

    Reply
  11. Светлый ум

    ТСД для EAN-13 стоит 40000 — 70000 т.р.

    для QR в разы больше, а тут поколдовать с планшетом и вот тебе реализация себестоимость которой \r

    4000-20000 т.р.

    Единственное — актуален вопрос освещения, для планшетов это проблема. С другой стороны какой-нибудь смарт типа самсунг галакси со здоровенным экраном и вспышкой вполне подойдет.

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

    поэтому плюс.

    Reply
  12. iov

    (11)Круто … У вас программисты получают разницу от рыночной стоимости и стоимости самоделок? Ништяк…

    Reply
  13. Yury1001

    а как скопировать файл avicap32.dll если он там уже есть и защищен от записи?

    win7, win8 аналогично

    скопировал, зарегистрировал, не работает.

    Reply
  14. shakmaev

    вообще файл avicap32.dll имеет разные версии, возможно, поэтому с уже имеющимся файлом не работает. рекомендую вам попробовать проделать туже работу с правами администратора, предварительно отключив UAC

    Reply
  15. Yury1001

    (14) та я заменил из соседней операционки, всё равно не работает.

    Кто ни будь вообще пробовал?

    Reply
  16. Bacemo

    Признал. Попробовал, получилось. На XP

    Reply
  17. shakmaev

    (13) Yury1001, если есть какие-либо ошибки скрин в студию =)

    Reply
  18. Gavroch.v

    Попробую.Сообщу!

    Reply
  19. Yury1001

    (17) нет ошибок — просто не работает:), скринов не будет — снёс уже

    (18) Gavroch.v, и шо?

    Reply
  20. Sl1ppery

    там где количество сканирований в минуту не важно, данный вариант применим

    (11) Светлый ум,

    да ты брось ТСД для ean стоит около 15к

    Reply
  21. snils

    (21), Windows 7 Pro x64, 1С 8.2 — все работает

    Reply
  22. Kondrat

    Зарегистрировал, скопировал «avicap32.dll», старую длл-ку сохранил

    Проверить обработку не смог, при старте обработки возникает ошибка:

    {Форма.ОбычнаяФорма.Форма(4)}: Ошибка при вызове метода контекста (ПолучитьИмяУстройства)

    Устройство = ЭлементыФормы.Декодер.ПолучитьИмяУстройства(К);

    по причине:

    Произошла исключительная ситуация (Shakmaev.Decoder): Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)

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

    Что делать?

    Reply
  23. shakmaev

    (23) Kondrat, значит оставляете со старой avicap32.dll.

    Если возвращает -1, значит проблема уже в самой работе.

    Можно код процедуры распознавания?

    Reply
  24. Mig_Alm

    Обязательно попробую. Как раз то что и искал. плюс однозначно.

    Reply
  25. jhfrek

    Хотелось бы узнать. Картинки в формате bmp или jpg с QR кодами возможно распознать? Или только через web камеру?

    Reply
  26. shakmaev

    (27) jhfrek, конечно можно, но тогда теряется идея публикации. Если есть необходимость, я могу подкрутить=)

    Reply
  27. jhfrek

    (28)Да, было бы здорово, если бы она ещё умела читать QR код из картинки в каталоге. А то неудобно получается. Скачал картинку с интернета и чтобы прочитать код нужно его распечатывать. С экрана монитора камера читать может только, если картинка большая и очень чёткая.

    Reply
  28. discant

    IMHO, оччень полезная разработка! Спасибо)

    Reply
  29. grayglobus

    Отличная штука, попробую на старом клиенте

    Reply
  30. agulaev

    Супер! Молодец!

    Reply
  31. nataon

    Интересно, надо пробовать. Спасибо автору

    Reply
  32. vladimir_makarov

    Штука интересная, + ставлю однозначно. Только вопрос: с обчного сканера (у меня Mustek) Эта штука будет работать?

    P.S.: спрашиваю потому, что лень скачивать и заниматься экпериментами. Please, проконсультируй, и измени описание на эту тему, чтобы подобных вопросов не было.

    Reply
  33. shakmaev

    (34) vladimir_makarov, не совсем понял суть вопроса — что значит с обычного сканера? суть этой компоненты: распознавание без сканера штрих-кодов, а с помощью веб-камеры

    Reply
  34. vladimir_makarov

    (35)Вот! Могу я вместо Web-камеры использовать обыкновеннй сканер? В отличие от Web-камеры, изображения пердаются с огромной точностью, хоть деньги делай! Суть впроса: сможет ли обработка прочитать штрих-код из обычного графического файла (любого формата)?

    Reply
  35. shakmaev

    (36) vladimir_makarov, да чуть выше уже эта тема поднималась. в данный момент распознает только с веб-камеры. Понял что надо, на неделе сделаю.

    Reply
  36. vladshnurkoff

    Что-то она у мну матерится:

    {Форма.ОбычнаяФорма.Форма(4)}: Метод объекта не обнаружен (ПолучитьИмяУстройства)

    Устройство = ЭлементыФормы.Декодер.ПолучитьИмяУстройства(К);

    Компоненту заменил — перестала работать вебка.

    Что-т мне кааца, не то она что-то инициализирует.

    ЗЫ: Права самые самые, админ я

    Reply
  37. Alex-2

    Добрый день! Будет ли работать в управляемом приложении конфигурации 1С: Клиническая лаборатория (8.2.16.368 — платформа)?

    Reply
  38. alonzomozley

    Спасибо за ВК! Будем пробовать.

    Reply
  39. BAMPER

    За разработку однозначно большой плюс =)

    Но у меня на win 7 выдает это, при регистрации

    Reply
  40. shakmaev

    (41) BAMPER, с правами администратора происходит регистрация? Из скрина видно что «батник» не может найти библиотеку регистрации

    Reply
  41. shakmaev

    (39) Alex-2, прошу прощения за длительный ответ. Работать будет в любой конфигурации так как это написано в статье.

    Reply
  42. shakmaev

    (38) vladshnurkoff, прошу прощения за задержку. Еще актуально?

    Reply
  43. vladshnurkoff

    (44) Неа, у меня немного другая задача стояла — решили с помощью сканера и вот этой байды: http://infostart.ru/public/167879/

    Reply
  44. BAMPER

    (42) Запускал от администратора…

    назначал права полные на папку.

    копировал длл-ки в папку с фреймворком, ничего не помогло =((

    Reply
  45. shakmaev

    (46) BAMPER, какие длл-ки вы копировали в папку с фреймворком? а главное зачем? прочитайте внимательно инструкцию.

    Reply
  46. BAMPER

    Все таки прошу помощи, не хочет не в какую регистрировать библиотеку. Я уже много инфы перерыл в нете.

    Вроде видит длл но вот что:

    Reply
  47. Marina__

    Здравствуйте! Я не пойму как заполняются документы. Просканировал штрих код с помощью web камеры, распознал, а дальше что? Со штрих кодами не когда не работала в 1С. Но я так понимаю, сканируешь и документы должны заполняться?

    Reply
  48. shakmaev

    (49) umnica2, Вообще это ВК для распознавания штрих кодов, а с уже полученным кодом вы можете сделать что хотите. Если говорить о штрих-кодах, то в 1С есть регистр сведений — Штрихкоды, привязанный к номенклатуре по умолчанию. Вы можете дописать ОбработкуПроведения нужных документов, чтобы для каждого формировался штрих-код, ну и потом этой обработкой пользоваться для выборки.

    Reply
  49. senshib

    (37) А можете выложить доделаный вариант или подсказать, в сторону каких сторонних разработок посмотреть? Интересует именно возможность распознать штрих-код из графического файла или выделенной области на нем (если это штрих-код на документе листа формата А4).

    Reply
  50. shakmaev

    (51) senshib, да нужно обновить публикацию, к сожалению, пока не было времени и возможности. Думаю в ближайший срок обновлю компоненту, работу уже начинал в этом направлении

    Reply
  51. qwertor

    (51) senshib, в комплекте с MessagingToolkit Barcode есть консольный вариант утилиты, понимает набор с множества кодов на странице, может с выделеной области, двухмерные(в часности pdf417) понимает лучше чем «железный» сканер.

    Reply
  52. Art77

    Однозначно +.Давно хотел внедрить QR код

    Reply
  53. Art77

    Как вставить компонент на форму 7.7?

    Reply
  54. mc1c80

    Очень нужна компонента. Не могли бы выслать на почту mc1c80@yandex.ru, а то не хватает старт мани для скачки?

    Reply
  55. CheBurator

    адски плюсую

    Reply
  56. Odinas

    Очень полезно, ловите плюс!

    Reply
  57. Bond

    кто подскажет, как подключить камеру ноута…

    а то при открытии окно изображения пустое

    Reply
  58. Bond

    как то не очень правильно работает.

    УНФ. Толстый клиент — камера работает. снимок делает, но в результат выводит -1.

    Тонкий клиент. камера не работает. ВК.contentDocument = неопределено. со всеми вытекающими…

    Reply
  59. shakmaev

    (55) Art77, в 1С 7.7 можно с помощью 1C++ ActiveX(класс АктивИкс) и FormEx(метод ПослеОткрытия), GUID компоненты указан в публикации.

    Reply
  60. shakmaev

    (60) Bond, по толстому клиенту. Возврат «-1» означает, что штрих-код на изображении распознать не удалось. Скорее всего, это связано с тем, что вы используете слабую камеру. Для хорошей работы рекомендую вам использовать камеру с разрешением от 1.3 мега пикселя.

    Что касаемо тонкого клиента, если вы правильно установили Shakmaev.TDecoder.dll, попробуйте разрешить выполнение сценариев ActiveX и снимите прочие ограничения ActiveX элементов в окне «Свойства браузера» панели управления.

    Reply
  61. Bond

    (62) все дллки скопировал в system32. запустил батник. ругалось только на avicap32.dll, но у существующего файла та же версия. в настройках брайзера разрешил все что видел касательно activeX. все равно не отображает ничего в окне. и ругается при нажатии кнопки Старт.

    {Форма.УправляемаяФорма.Форма(14)}: Значение не является значением объектного типа (ИскатьQR)

    ВКОбъект.ИскатьQR = Истина;

    Reply
  62. shakmaev

    (63) Bond, явно прослеживается ошибка в установке компоненты. Давайте уточним, вы установили обе библиотеки? То есть, в Конфигураторе в меню «Форма» -> «Вставить ActiveX» Вы видите Shakmaev.Decoder и Shakmaev.TDecoder? Мне в голову больше ничего не приходит, ошибка в том, что COM для тонкого клиента не находит платформа.

    Reply
  63. dvshil

    Доброго времени суток! Сколько будет стоить решение задачи: вставить в 1С 8.3 УПП кнопку, нажав которую выполняется аналогичное нажатию кнопку «считать код» на сканере штрих-кода, действие.

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

    Reply
  64. hachaturov

    Добрый день разработчик 1С — Александр!

    У меня вопрос — скачал вашу обработку «Распознаем штрих-коды QR, EAN-13, PDF 417 и др. с помощью веб камеры» у нас на ноутбуках в системе -разрядности 32х всё отлично работает, а на ноутах, где стоит Windows 7 Проф 64х — при запуска команды «%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe «.Shakmaev.Decoder.dll» /codebase» выдаёт Ошибку:

    RegAsm : error RA0000 : Невозможно загрузить файл или сборку «file:///D:DecoderShakmaev.Decoder.dll» или один из зависимых от них компонентов. Операция не поддерживается. <Исключение из HRESULT: 0x80131515>,

    Фото — СкринШот — приложил!

    Что посоветуешь???

    Reply
  65. borrman

    Спасибо за разработку. Как раз пытаемся внедрить

    Используем для УФ

    Как подогнать размер картинки? Вылазит за пределы видимости.

    Reply
  66. shakmaev

    (67) borrman, благодарю за оценку работы.

    К сожалению размер компоненты фиксирован, и изменять нельзя — мое упущение.

    Если будет очень уж нужно можно подумать над размерами.

    Reply
  67. roadman

    Великолепно 🙂

    Reply
  68. borrman

    (68) А нельзя как-то картинку масштабировать, которую она отображает? У меня не помещается изображение. Т.е. я сканирую код, все работает, но навести реально не получается — отображает верхний левый кусок картинки.

    P.S.

    Просто это единственная нормальная компонента, которую я нашел для работы с qr-кодом 🙂

    Reply
  69. shakmaev

    (70) borrman, не савсем вас понимаю. Можно скрин в студию?

    Reply
  70. borrman

    (71)

    ну вот как-то так

    в толстом клиенте все корректно

    а в тонком (в HTML) только часть ШК отображает. Чего сделать надо — не пойму.

    Reply
  71. vesh

    (66) hachaturov,

    Поместите руками вот это «Shakmaev.Decoder.dll» в вот сюда %SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe » и запустите .bat

    У меня все заработало

    Reply
  72. dave2000

    Конпоненту для тонкого клиента зарегистрировал, написало «Типы зарегистрированы успешно». Запускаю обработку, в окне пустой квадрат, а при нажатии на «Старт» выдает сообщение: Произошла исключительная ситуация (htmlfile): Отказано в доступе.

    Прилагаю скрин.

    Reply
  73. dave2000

    (74) dave2000,

    ЗЫ: 1С с правами админа тоже запускал, не момогло.

    Reply
  74. shakmaev

    (75) dave2000, скорее всего вы запускаетесь на сервере и у вас стоит запрет на использование ActiveX или других исполняемых скриптов. Чтобы это проверить зайдите в Internet Explorer и проверьте параметры безопасности

    Reply
  75. Rokky78

    Добрый день, Александр. Пытаюсь настроить работу в тонком клиенте. Ситуация 100% как в (74) сообщении. Все зарегистрировалось успешно, но ошибка такая же как на скриншоте в 74 сообщении. ActiveX разрешил везде, где нашел (может быть выложите скриншот, где это сделать? там 4 зоны для всех нужно менять параметры?

    Пытался сделать это на 2-х разных машинах.

    1. Windows 8 планшет (где и предполагается потом ее основная работа). После установки всех разрешений браузер даже не начинает серфинг, а выдает сообщение о уязвимости машины. Результат — как на скриншоте в 74 сообщении.

    2. Для удобства отладки решил сделать это сначала на рабоче машине (Windows XP). То же самое , но перед открытием формы выдается еще такое вот окно.

    Reply
  76. Rokky78

    (74)(75) Проблема решилась?

    Reply
  77. shakmaev

    (77) Rokky78, на Windows 8 работа компоненты не тестировалась. Тут сказать ничего не могу.

    Однако, ошибка, вызванная в Windows XP как раз от того что в параметрах безопасности IE стоит запрет на ActiveX

    Reply
  78. Rokky78

    (79)

    Однако, ошибка, вызванная в Windows XP как раз от того что в параметрах безопасности IE стоит запрет на ActiveX

    Где снять этот запрет? Может я что-то не понимаю? Вот скрин, где меняю настройки. Может что-то не так?

    Reply
  79. shakmaev

    (80) Rokky78, В свойствах Internet Explorer, вкладка Безопасность, кнопка Другой запретить или разрешить использование ActiveX (то есть убрать опцию «Предлагать»).

    Reply
  80. Rokky78

    (81) Получилось запустить камеру на Win XP. Я когда первый раз пробовал все подряд разрешал, что относилось к ActiveX. На всякий случай, может кому пригодится. Нужно только одну настройку изменить «Использование элементов управления ActiveX, не помеченных как безопасные для использования (небезопасно)» и только для зоны «Интернет». Изменение для других зон этой настройки не помогает. Правда постоянно появляется предупреждение «Компьютер подвержен повышенному риску».

    Само распознавание проверить не удалось. Камера, которая под рукой, дает очень нечеткое изображение. Обработка всегда возвращает -1.

    В Windows 8 после аналогичных настроек с безопасностью проявились проблемы с камерой. Словом, на Win8 не работает.

    Reply
  81. dave2000

    Решил порыть еще в других направлениях, накопал библиотеку «Ozeki Camera SDK», слепил на основе примеров как раз то, что мне нужно было. Сканирует QR, EAN13, Code128 и еще кучу всего. Есть исходник и готовая программа, может кому пригодится, выложил тут: http://infostart.ru/public/359549/

    Reply
  82. Goruch

    RegAsm : error RA0000 : Не удалось найти входную сборку «.Shakmaev.TDecoder.dll

    » или одну из ее зависимых сборок.

    Пробовал

    Поместите руками вот это «Shakmaev.Decoder.dll» в вот сюда %SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe » и запустите .bat

    не помогло есть еще варианты?

    Виндус 7 64 бита.

    Reply
  83. kozorez

    Не читает PDF417 на полисе ОМС ( он там не стандартный, не хватает завершающих вертикальных линий) BarcodeScaner на Андроид читает без проблем.

    Reply
  84. itprog

    Можно ли использовать компоненту для распознания ШК в уже отсканированных картинках?

    Reply

Leave a Comment

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