gifts2017

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

Опубликовал Dave Nikolsky (dave2000) в раздел Оборудование - Сканер штрих-кода

Не так давно возникла потребность сканирования 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\result.txt

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

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

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

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

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

Скачать файлы

Наименование Файл Версия Размер
Исходник 32
.zip 63,19Kb
08.10.15
32
.zip 63,19Kb Скачать
QRWebcam 61
.zip 26,85Mb
08.10.15
61
.zip 26,85Mb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Галюк (dj_serega) 25.05.15 16:15
Крутяк. Нужно будет запомнить и опробовать :)
2. Антон А (plutonii) 27.05.15 12:29
Здравствуйте.
Приведите пример QRWebCam.ini?
Mihailniri; +1 Ответить 1
3. Dave Nikolsky (dave2000) 27.05.15 14:20
(2) plutonii, структуры, как таковой, нет. Это обычный текстовый файл, первая строчка которого - это путь и имя файла результата. Например: d:\QRWebcam\result.txt

расширение "ini" придумал просто так - первое, что в голову взбрело :)

Добавил скриншот.
4. Антон А (plutonii) 27.05.15 15:37
Благодарю, на выхах пощупаю эту тему)
5. SagaKrasava 26.03.16 20:23
Классная обработка. Можно опробовать данную обработку в программе лояльности клиентов. А именно вместо депозитных, дисконтных (скидочных) карточек. Но тогда нужно еще и мобильное приложение с привязкой к базе клиента. Многие заведения общепита работают на мобильных терминалах (наладонники). Можно было бы сканировать QR код с экрана телефона клиента не отходя от столика.
6. Александр Кох (1с_Phil) 19.09.16 15:55
Благодарю, а то мой кирпич, под названием "телефон" умеет только звонить. Теперь не надо постоянно дёргать товарищей.
7. Юрий П (nano1c) 23.09.16 11:06
Скачал только исходник и вот сразу:
"Не удалось найти имя типа или пространства имен "Ozeki" (пропущена директива using или ссылка на сборку?)"

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

ps^
добавил референс на озеки.длл, теперь находит пространста имен ozeki.media но вот далее нет:
Имя типа или пространства имен "MediaHandlers" отсутствует в пространстве имен "Ozeki.Media" (пропущена ссылка на сборку?)
8. Dave Nikolsky (dave2000) 23.09.16 18:25
(7) nano1c, где-то в настройках проекта нужно указать пути на каталоги Озеки (sdk или библиотеки). Точнее сейчас не подскажу, давно было, но была та же проблема.
9. Dave Nikolsky (dave2000) 23.09.16 18:43
(7) nano1c, в студии меню Проект/Добавить ссылку.../Обзор и добавить туда библиотеки по реальным путям. У меня там добавлены VoIPSDK.dll и NVA.dll.

10. Юрий П (nano1c) 24.09.16 11:38
(9) dave2000, а где взять эти компоненты? Да и текущая версия ozeki.dll не содержит те пространства имен что в исходниках - видимо нужна именно та старая версия.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа