bdd2

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
.rar 2,19Mb
09.03.13
82
.rar 2,19Mb 82 Скачать

См. также

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


при fps > 5-7 ловит смытые и наклонные поверхности, задержек визуальных при распознании не замечал. Разрешение не критично, 320 все ловит нормально даже в условиях не очень хорошего освещения. Опять же обрабатывать можно не весь экран, а некоторую его часть.
При fps < 5 не ловит статику (во всяком случае на той камере, без автофокуса, на которой проверяли) соответственно код не распознает.
10. Геннадьевич Бу (Геннадьевич) 1 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) 121 21.05.13 16:44 Сейчас в теме
BAMPER
Самое простое, что приходит на ум - распознал картинку, игнорируешь следующие кадры до какого либо кода подтверждения.
15. umnica2 (Marina__) 04.06.13 00:12 Сейчас в теме

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

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


То же самое. Как исправить?
16. djvu (djvu) 121 10.09.13 16:21 Сейчас в теме
(105) Gazza,
Файл без ошибок во вложении.
Прикрепленные файлы:
Web-камера.epf
17. Бондарчук Тарас (Bond) 13.10.13 21:13 Сейчас в теме
djvu, скажите пожалуйста, PDF417 читает? и можно ли переделать на УФ?
18. djvu (djvu) 121 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) 121 30.01.15 11:54 Сейчас в теме
Дык исходники для этого и выложил, пересобрать надо под x64 и/или держать 32-битную версию фреймверка и к ней путь прописать в системной path
22. Александр Зубцов (iov) 358 12.03.15 18:57 Сейчас в теме
(21) djvu, не будет ли наглостью попросить пересобрать под 64 x ? Ибо даже установка VS и курение мануалов так и не дало желаемого результата.
23. kill3rl88p kill3rl88p (kill3rl88p) 38 29.10.15 13:44 Сейчас в теме
Добрый день, на планшете с Win 10 работать будет? или надо пересобирать? или даже это не поможет?)
24. djvu (djvu) 121 29.10.15 17:44 Сейчас в теме
(23)
В новом браузере по идее - нет (вроде бы там от ActiveX - отказались совсем). В 1С и старой версии эксплорера должно (при условии, что на этой аппаратной платформе работают Aforge (и Zxing)).

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