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.: перед регистрацией компонента стоит предварительно подключить к компьютеру камеру (реальную или виртуальную).

22 Comments

  1. DoctorRoza

    Из-за личной безграмотности не понимаю зачем это нужно, но написано умно! 🙂 Возьму на заметку! 🙂

    Reply
  2. Геннадьевич

    Очень интересно.

    Как быстро происходит опознание кода? Какова точность? Это тестировалось?

    Reply
  3. andrei.k

    Спасибо большое. Для первичной внутренней инвентаризации и учета техники нашего отдела АСУ самое то. Вместо вэб-камеры можно подключить камеру смартфона, там разрешение побольше.

    Reply
  4. Геннадьевич

    (4) andrei.k, Уже пробовали? Как результаты?

    Reply
  5. andrei.k

    (5) Геннадьевич, не пробовал, не качал. Мне идея понравилась. Так как есть проблема, сейчас над ней и думаем, по учету техники. И для входящей очень даже ничего. Сканер штрих-кода еще не скоро купим, конкурсы долбанные, да и то пока только для делопроизводителей в документооборот. А так исходники есть, напишем свое что-нибудь.

    Reply
  6. Геннадьевич

    (6) andrei.k, Понятно. Бюджетная организация?

    Reply
  7. andrei.k

    Не, монополисты.

    Reply
  8. djvu
    Как быстро происходит опознание кода? Какова точность? Это тестировалось?

    при fps > 5-7 ловит смытые и наклонные поверхности, задержек визуальных при распознании не замечал. Разрешение не критично, 320 все ловит нормально даже в условиях не очень хорошего освещения. Опять же обрабатывать можно не весь экран, а некоторую его часть.

    При fps < 5 не ловит статику (во всяком случае на той камере, без автофокуса, на которой проверяли) соответственно код не распознает.

    Reply
  9. Геннадьевич

    (9) djvu, Спасибо, вот это ответ, который я хотел услышать, ясно и четко.

    Reply
  10. BAMPER

    Огромный + за данную разработку!!!

    У меня при открытии выскакивает:

    {Форма.Форма.Форма(18,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)

    <<?>>РаботаСоСтрокамиРасширенная.ОРВИнициализироватьПоУмолчанию(об_РгВ);

    {Форма.Форма.Форма(57,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)

    <<?>>РаботаСоСтрокамиРасширенная.ОРВПолучитьМассивСовпаденийСШаблоном(об_РгВ, тек_стр_ТЗ.тек_СтрокаСВебКамеры, шаблон_ПоискРгВ, массив_Результаты, РазмерМассива);

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

    Reply
  11. BAMPER

    Все работает как, надо =)

    Распознает очень быстро, особенно если разрешение выставить максимальное.

    Есть правда еще вопрос: Можно ли установить время(или паузу) до следующего распознавания?

    А то значение PlaintTextQRCode слишком быстро меняется.

    Reply
  12. djvu

    BAMPER

    Самое простое, что приходит на ум — распознал картинку, игнорируешь следующие кадры до какого либо кода подтверждения.

    Reply
  13. Marina__

    У меня при открытии выскакивает:

    {Форма.Форма.Форма(18,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)

    <<?>>РаботаСоСтрокамиРасширенная.ОРВИнициализироватьПоУмолчанию(об_РгВ);

    {Форма.Форма.Форма(57,2)}: Переменная не определена (РаботаСоСтрокамиРасширенная)

    <<?>>РаботаСоСтрокамиРасширенная.ОРВПолучитьМассивСовпаденийСШаблоном(об_РгВ, тек_стр_ТЗ.тек_СтрокаСВебКамеры, шаблон_ПоискРгВ, массив_Результаты, РазмерМассива);

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

    То же самое. Как исправить?

    Reply
  14. djvu

    (105) Gazza,

    Файл без ошибок во вложении.

    Reply
  15. Bond

    djvu, скажите пожалуйста, PDF417 читает? и можно ли переделать на УФ?

    Reply
  16. djvu

    to Bond

    За декодирование ШК отвечает библиотека — ZXing, насколько я помню — с PDF417 она справляется.

    По поводу управляемых форм — компонента сделана как ActiveX, т.е. ей должно быть все равно куда вы ее влепите и чем будут выступать обработчики событий.

    Reply
  17. borrman

    (18) К сожалению, не все равно. ТК не работает с ActiveX (

    Reply
  18. Oleeeg

    А как зарегистрировать в х64 системе?

    При изменении пути на Framework64v2.0.50727 все-равно пишет ошибку про недопустимую сборку NET

    Reply
  19. djvu

    Дык исходники для этого и выложил, пересобрать надо под x64 и/или держать 32-битную версию фреймверка и к ней путь прописать в системной path

    Reply
  20. iov

    (21) djvu, не будет ли наглостью попросить пересобрать под 64 x ? Ибо даже установка VS и курение мануалов так и не дало желаемого результата.

    Reply
  21. kill3rl88p

    Добрый день, на планшете с Win 10 работать будет? или надо пересобирать? или даже это не поможет?)

    Reply
  22. djvu

    (23)

    В новом браузере по идее — нет (вроде бы там от ActiveX — отказались совсем). В 1С и старой версии эксплорера должно (при условии, что на этой аппаратной платформе работают Aforge (и Zxing)).

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

    Reply

Leave a Comment

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