Сканирование штрих-кодов и QR-кодов через веб-камеру



Не так давно возникла потребность сканирования QR-кодов из 1С. Аппаратные сканеры, распознающие QR-коды, стоят бешенных денег, поэтому было решено использовать веб-камеру, которая сейчас есть в каждом ноутбуке. А если даже и нет, то докупить внешнюю USB-вебку не сложно, стоит она копейки (по сравнению со сканерами). Начал искать софт для этих целей, к моему удивлению готовых решений для этих целей оказалось не так-то много. Самым адекватным в использовании оказался ZBar, но он почему-то слишком долго инициализировался при запуске (порядка 10-20 секунд), а после 5-10 минут простоя просто зависал. Пришлось лезть в Visual Studio и самому делать нужный инструмент.

За основу был взят проект с сайта Codeproject и переделан под свои нужды. Сделано всё на основе библиотеки Ozeki Camera SDKКак пользоваться библиотекой написано здесьПо заявлению авторов библиотеки сканируются и распознаются следующие форматы кодов:

1D: CODABAR, CODE 39, CODE 93, CODE 128, EAN 8, EAN 13, ITF, MSI, PLESSEY, RSS 14, RSS EXPANDED, UPC-A, UPC-E,
2D: AZTEC, DATA MATRIX, MAXI CODE, PDF417, QR CODE

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

Как пользоваться:

Вариант 1: Если программу просто запустить, она будет просто сканировать коды и отображать результат в своем окне.

Вариант 2Если при запуске в качестве параметра указать имя файла результата (например так: «QRWebCam.exe result.txt»), она распознает код, автоматически закроется, а результат запишет в указанный файл. Но к сожалению 1С-ная функция ЗапуститьПриложение() не умеет запускать программы с параметрами (можно конечно через bat-файл, но лично меня смущает появляющееся черное консольное окно), поэтому был придуман вариант 3.

Вариант 3В каталоге программы можно создать одноименный ini-файл (QRWebCam.ini) и прописать в нём путь и имя выходного файла — будет работать аналогично варианту 2, но запускать можно без параметров, результат сканирования будет помещен в прописанный файл. Пример содержимого ini-файла:

d:QRWebcam
esult.txt

Для использования в 1С можно написать такой код:

ЗапуститьПриложение("d:QRWebcamQRWebCam.exe", "d:QRWebcam", Истина);

Т = Новый ТекстовыйДокумент;
Т.Прочитать("d:QRWebcam
esult.txt",КодировкаТекста.UTF8);

QRКод = Т.ПолучитьСтроку(1);

Если вдруг кто захочет перекомпилить под себя, исходник прилагается.

28 Comments

  1. dj_serega

    Крутяк. Нужно будет запомнить и опробовать 🙂

    Reply
  2. plutonii

    Здравствуйте.

    Приведите пример QRWebCam.ini?

    Reply
  3. dave2000

    (2) plutonii, структуры, как таковой, нет. Это обычный текстовый файл, первая строчка которого — это путь и имя файла результата. Например: d:QRWebcam
    esult.txt

    расширение «ini» придумал просто так — первое, что в голову взбрело 🙂

    Добавил скриншот.

    Reply
  4. plutonii

    Благодарю, на выхах пощупаю эту тему)

    Reply
  5. SagaKrasava

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

    Reply
  6. 1с_Phil

    Благодарю, а то мой кирпич, под названием «телефон» умеет только звонить. Теперь не надо постоянно дёргать товарищей.

    Reply
  7. nano1c

    Скачал только исходник и вот сразу:

    «Не удалось найти имя типа или пространства имен «Ozeki» (пропущена директива using или ссылка на сборку?)»

    Скачал демки с озеки — они нормально компилятся (но при этом не видят камеру в ноуте), в чем может быть дело?

    ps#k8SjZc9Dxk

    добавил референс на озеки.длл, теперь находит пространста имен ozeki.media но вот далее нет:

    Имя типа или пространства имен «MediaHandlers» отсутствует в пространстве имен «Ozeki.Media» (пропущена ссылка на сборку?)

    Reply
  8. dave2000

    (7) nano1c, где-то в настройках проекта нужно указать пути на каталоги Озеки (sdk или библиотеки). Точнее сейчас не подскажу, давно было, но была та же проблема.

    Reply
  9. dave2000

    (7) nano1c, в студии меню Проект/Добавить ссылку…/Обзор и добавить туда библиотеки по реальным путям. У меня там добавлены VoIPSDK.dll и NVA.dll.

    Reply
  10. nano1c

    (9) а где взять эти компоненты? Да и текущая версия ozeki.dll не содержит те пространства имен что в исходниках — видимо нужна именно та старая версия.

    Reply
  11. vshish

    Вы пишете :

    Но к сожалению 1С-ная функция ЗапуститьПриложение() не умеет запускать программы с параметрами (можно конечно через bat-файл, но лично меня смущает появляющееся черное консольное окно), поэтому был придуман вариант 3.

    Я проверил все она запускает. Командную строку делаешь с параметрами и все.

    Ну и работает. с ини файлом у меня не сработало

    Reply
  12. vshish

    Попробовал на планшете(вин). И получил проблему. В планшете две камеры. И программа видит только переднюю(ну да она же позиционируется как Вэб), а хотелось бы переднюю и как их переключать не понятно. Исходники даже не качал. ибо не владею.

    А на стационаре и с усб веб камерой все прошло на ура. Даже в форму вставил поддержку.

    Досадно.

    Reply
  13. dave2000

    (10) Держите (ссылка действительна 14 дней): http://dropmefiles.com/HFyHb

    Reply
  14. dave2000

    (11)

    Я проверил все она запускает. Командную строку делаешь с параметрами и все.

    Ну и работает. с ини файлом у меня не сработало

    Уже не помню подробности, но на 8.3.5 у меня не получилось через ЗапуститьПриложение() запустить с параметрами (либо не запускалось, либо кушало параметры). Возможно и я что-то не так делал, не было времени разбираться. А с ини-файлом вы что-то не досмотрели, т.к. исправно работает у многих людей уже долгое время.

    Reply
  15. dave2000

    (12) Да, выбора камеры я не предусматривал, не думал прога будет работать и на планшетах, а на ноутах камера обычно одна, поэтому просто брал 1-ю из массива доступных. Если очень критично и актуально, могу на досуге добавить выбор камеры через параметр.

    Reply
  16. vshish

    Ну если посмотришь было бы здорово.

    Мы купили Виндоус планшеты и как заставить его распознать штрихкод без подключения сканера не понятно. Хотя там есть много приложений в магазине, но заставить это приложение распознать первый попавшися ШК и вернуть его содержимое в 1С, не знаю как.

    А тут даже работы на интеграцию, было не более 4 часов.

    Но на обычном компе, где 1 камера все прошло гладко, а на планшете, не очень.

    Reply
  17. Sergik_D

    Выложите пожалуйста библиотеки. Не могу найти nva и voipsdk.

    Reply
  18. dave2000

    (17) Вот архив: http://dropmefiles.com/NXgNN

    Ссылка актуальна до 14 дней

    Reply
  19. user624210_danilk_1995

    Здравствуйте, не могли бы вы выложить еще раз проект на «депоситфайл»?

    Reply
  20. user624210_danilk_1995

    (18) а можно еще раз библиотеки загрузить на deposit ?

    Reply
  21. KazanKokos

    вебка конечно это жесть.

    Совет: Используйте мобильник или планшет(дешевле чем ТСД) + переносной зарядный блок, иначе батарея будет садиться.

    Многие программы по работе с ТСД работают на андроидах и WinCE. Например Cleverence и Datamobile.

    Reply
  22. ujinn

    (18) Dave,

    не пробовали использование нескольких камер одновременно ?

    и сканирование нескольких штрихкодов с одного захода?

    P.S. можете тот выложить файлик еще раз?

    Reply
  23. ch1mera

    (20) Добрый день. Выложите исходники с библиотеками еще раз, пожалуйста .

    Reply
  24. user1029377

    Классная идея !

    Reply
  25. Larkin

    Доброе время.

    Запускаю утилиту, камера инициализируется (горит индикатор) а изображения нет.

    Куда копать?

    Reply
  26. user619592_it.med.rus

    Здравствуйте! А можно как-то переписать, чтобы сканировался какой-либо текст, после определенно заданного текста или как-нибудь попроще, а не bar code и каким-нибудь путем где нибудь отображался этот текст или не подскажите другие похожие решения.

    Reply
  27. Larkin

    (25) Решение найдено. Касперский блокировал.

    Автору огромный плюс в карму! 🙂

    Reply
  28. user604533_stall2706

    Здравствуйте, есть вопросы по работе приложения с Вами можно как то связаться?

    Мой почтовый адрес stall2706@yandex.ru

    Reply

Leave a Comment

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