gifts2017

Web-камера со сканером qr-кодов

Опубликовал djvu (djvu) в раздел Программирование - Внешние компоненты

Пример работы с web-камерой из 1С с распознаванием qr-кодов. Компонент работы с веб-камерой представлен ActiveX-объектом, выполненным для работы в среде CLR (Microsoft Framework v2.0.50727) x32. В основе работы с видеопотоком лежит библиотека AForge, а за распознавание qr-кодов отвечает библиотека ZXing. Пример представлен вместе с исходными кодами проекта для MS Visual Studio 2010.

Для работы с компонентой требуется зарегистрировать ее в реестре для COM-взаимодействия. Сборка собрана под х32 (Microsoft Framework v2.0.50727). Этот момент следует учитывать при регистрации сборки в х64 системах, где параллельно существуют обе версии Framework. Все файлы примера доступны в архиве для скачивания и расположены в трех папках:

dll-com (файлы компонента для регистрации и библиотеки, а так же пример регистрации в файле register_me_32.bat )

WebCameraPlayerAxCtrl (исходные файлы проекта компонента для MS VS 2010)

Пример работы веб-камеры (файл внешней обработки для 1С где приведен пример работы с видеокамерой)

Сборка не подписана, поэтому при регистрации следует указывать параметр "/codebase" для задания пути в реестре, по которому следует искать сборку.

Кратко о принципах работы с компонентой:

На форме размещаем элемент управления ActiveX: "WebCameraPlayerAxCtrl.WebCameraPlayerControl"

для элемента управления необходимо назначить обработчки событий:

CustomingSizeVideoSourceInTargetWindowEventTrue (позволяет "подогнать" размер экрана видеокамеры на форме, под текущее разрешение камеры. Данные о видимой области изображения веб-камеры находятся в свойствах компонента frame_VisibleClipBoundsWidthframe_VisibleClipBoundsHeight)

QRCodeToPlaintTextEventTrue (срабатывает при удачном декодировании qr-кода с изображения веб-камеры, расшифрованный текст расположен в свойстве компонента PlaintTextQRCode)

ImageToBase64StringEventTrue (срабатывает после вызова метода компонента GetCurrentImage(), после того как компонент сохраняет в свойстве CurrentImageToSaveBase64 , текущее, на момент вызова метода, изображение, полученное с веб-камеры; хранится изображение в строковом формате Base64)

BarCodeImageToSaveBase64EventTrue (срабатывает после вызова метода компонента GetBarCodeImage(ТекстДляКодирования, 12),   Base64-версия картинки qr-кода хранится в свойстве компонента BarCodeImageToSaveBase64. 12 - это код выбора конструктора ZXing, который отвечает за кодирование текста в QR-формат. Коды других вариантов кодирования можно посмотреть в исходных файлах проекта.)

Метод StopCurrentVideoSource() компонента, стоит вызывать перед закрытием формы обработки, где расположен компонент, для корректного отключения от видеопотока.


Ссылки на проекты исходных кодов:

http://zxingnet.codeplex.com/   (библиотека для работы со штрих-кодами)

http://stackoverflow.com/  (собственно здесь был найден пример ActiveX-компонента и работа с событиями при регистрации .NET сборок для COM-взаимодействия)

http://www.aforgenet.com/  (библиотека для работы с видеопотоками)

P.S.: перед регистрацией компонента стоит предварительно подключить к компьютеру камеру (реальную или виртуальную).

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

Наименование Файл Версия Размер
WebCameraPlayerAxCtrl.rar 82
.rar 2,19Mb
09.03.13
82
.rar 2,19Mb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Роза (DoctorRoza) 10.03.13 19:01
Из-за личной безграмотности не понимаю зачем это нужно, но написано умно! :) Возьму на заметку! :)
3. Геннадьевич Бу (Геннадьевич) 22.03.13 18:35
Очень интересно.
Как быстро происходит опознание кода? Какова точность? Это тестировалось?
4. Андрей К. (andrei.k) 27.03.13 08:11
Спасибо большое. Для первичной внутренней инвентаризации и учета техники нашего отдела АСУ самое то. Вместо вэб-камеры можно подключить камеру смартфона, там разрешение побольше.
5. Геннадьевич Бу (Геннадьевич) 27.03.13 11:40
(4) andrei.k, Уже пробовали? Как результаты?
6. Андрей К. (andrei.k) 27.03.13 11:56
(5) Геннадьевич, не пробовал, не качал. Мне идея понравилась. Так как есть проблема, сейчас над ней и думаем, по учету техники. И для входящей очень даже ничего. Сканер штрих-кода еще не скоро купим, конкурсы долбанные, да и то пока только для делопроизводителей в документооборот. А так исходники есть, напишем свое что-нибудь.
7. Геннадьевич Бу (Геннадьевич) 27.03.13 12:03
(6) andrei.k, Понятно. Бюджетная организация?
8. Андрей К. (andrei.k) 27.03.13 12:46
9. djvu (djvu) 28.03.13 16:32
Как быстро происходит опознание кода? Какова точность? Это тестировалось?


при fps > 5-7 ловит смытые и наклонные поверхности, задержек визуальных при распознании не замечал. Разрешение не критично, 320 все ловит нормально даже в условиях не очень хорошего освещения. Опять же обрабатывать можно не весь экран, а некоторую его часть.
При fps < 5 не ловит статику (во всяком случае на той камере, без автофокуса, на которой проверяли) соответственно код не распознает.
10. Геннадьевич Бу (Геннадьевич) 28.03.13 18:08
(9) djvu, Спасибо, вот это ответ, который я хотел услышать, ясно и четко.
12. Anton Bashkeev (BAMPER) 06.05.13 05:10
Огромный + за данную разработку!!!
У меня при открытии выскакивает:
{Форма.Форма.Форма(18,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)
<<?>>РаботаСоСтрокамиРасширенная.ОРВИнициализироватьПоУмолчанию(об_РгВ);
{Форма.Форма.Форма(57,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)
<<?>>РаботаСоСтрокамиРасширенная.ОРВПолучитьМассивСовпаденийСШаблоном(об_РгВ, тек_стр_ТЗ.тек_СтрокаСВебКамеры, шаблон_ПоискРгВ, массив_Результаты, РазмерМассива);

Что можно сделать?
13. Anton Bashkeev (BAMPER) 20.05.13 11:16
Все работает как, надо =)
Распознает очень быстро, особенно если разрешение выставить максимальное.
Есть правда еще вопрос: Можно ли установить время(или паузу) до следующего распознавания?
А то значение PlaintTextQRCode слишком быстро меняется.
14. djvu (djvu) 21.05.13 16:44
BAMPER
Самое простое, что приходит на ум - распознал картинку, игнорируешь следующие кадры до какого либо кода подтверждения.
15. umnica2 (Marina__) 04.06.13 00:12

У меня при открытии выскакивает:
{Форма.Форма.Форма(18,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)
<<?>>РаботаСоСтрокамиРасширенная.ОРВИнициализироватьПоУмолчанию(об_РгВ);
{Форма.Форма.Форма(57,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)
<<?>>РаботаСоСтрокамиРасширенная.ОРВПолучитьМассивСовпаденийСШаблоном(об_РгВ, тек_стр_ТЗ.тек_СтрокаСВебКамеры, шаблон_ПоискРгВ, массив_Результаты, РазмерМассива);

Что можно сделать?


То же самое. Как исправить?
16. djvu (djvu) 10.09.13 16:21
(105) Gazza,
Файл без ошибок во вложении.
Прикрепленные файлы:
Web-камера.epf
17. Бондарчук Тарас (Bond) 13.10.13 21:13
djvu, скажите пожалуйста, PDF417 читает? и можно ли переделать на УФ?
18. djvu (djvu) 23.10.13 16:01
to Bond
За декодирование ШК отвечает библиотека - ZXing, насколько я помню - с PDF417 она справляется.
По поводу управляемых форм - компонента сделана как ActiveX, т.е. ей должно быть все равно куда вы ее влепите и чем будут выступать обработчики событий.
19. Артем Боровлев (borrman) 16.04.14 20:03
(18) К сожалению, не все равно. ТК не работает с ActiveX (
20. Oleg Havrysh (Oleeeg) 08.12.14 11:53
А как зарегистрировать в х64 системе?
При изменении пути на Framework64\v2.0.50727 все-равно пишет ошибку про недопустимую сборку NET
21. djvu (djvu) 30.01.15 11:54
Дык исходники для этого и выложил, пересобрать надо под x64 и/или держать 32-битную версию фреймверка и к ней путь прописать в системной path
22. Александр Зубцов (iov) 12.03.15 18:57
(21) djvu, не будет ли наглостью попросить пересобрать под 64 x ? Ибо даже установка VS и курение мануалов так и не дало желаемого результата.
23. kill3rl88p kill3rl88p (kill3rl88p) 29.10.15 13:44
Добрый день, на планшете с Win 10 работать будет? или надо пересобирать? или даже это не поможет?)
24. djvu (djvu) 29.10.15 17:44
(23)
В новом браузере по идее - нет (вроде бы там от ActiveX - отказались совсем). В 1С и старой версии эксплорера должно (при условии, что на этой аппаратной платформе работают Aforge (и Zxing)).

В общем, многое зависит от аппаратной плаформы, что под нее умеют фреймверки майкрософтовские (Aforge - вроде бы не порт, а вот на счет ZXing - не уверен).
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа