До старта конференции

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

Программирование - Внешние компоненты

Пример работы с 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
85
.rar 2,19Mb 85 Скачать

См. также

Комментарии
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) 126 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) 126 21.05.13 16:44 Сейчас в теме
BAMPER
Самое простое, что приходит на ум - распознал картинку, игнорируешь следующие кадры до какого либо кода подтверждения.
15. umnica2 (Marina__) 04.06.13 00:12 Сейчас в теме

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

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


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

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