Native ВК для работы с веб камерой

Внешняя компонента для работы с web-камерой. Написана на Delphi и работает по технологии Native API. Компонента позволяет взаимодействовать c web-камерой посредством avicap.dll. Работает в толстом, тонком и веб клиенте(через IE).

Состав архива

[Сборка CAB для IE]  —  инструмент для построения CAB архива расширения для Internet Explorer;

1Cv8.cf — пример работы с компонентой;

Delphi7Source.zip — архив с исходными текстами компоненты;

pacage.zip — архив с компонентой для загузки в макет 1С.

Использование компоненты

Подключение и установка компоненты производится стандартными методами, описанными в синтакс помощнике.

Компонента = Новый(«AddIn.Компонента.ExecExtention»);

Получение изображения

Получение изображения производится вызовом метода ПолучитьБМП(КодКамеры).

ЗакодированноеИзображение = Компонента.ПолучитьБМП(1);

Параметр КодКамеры — это индекс камеры в системе. Подробнее об этом можно узнать в документации к avicap.dll. Если у вас в системе только одна веб камера оставьте 1.

Поскольку Native API позволяет передавать только простые типы данных (число, строка, булево), передача изображения из компоненты в 1С происходит в виде строки Base64. Соответственно после получения изображения его необходимо сначала преобразовать в двоичные данные.

ДвоичныеДанные = Base64Значение(ЗакодированноеИзображение); // Получаем двоичные данные.

Создаем картинку следующим образом

Фотография = Новый Картинка(ДвоичныеДанные, Ложь); // Создаем картинку

П. С.

Компонента не является готовым решением и лишь иллюстрирует методы взаимодействия с камерой.

За основу взята разработка //infostart.ru/public/88060/.

29 Comments

  1. Diversus
    Поскольку Native API позволяет передавать только простые типы данных(число, строка, булево), передача изображения из компоненты в 1С происходит в виде строки Base64.

    Вы не правы! Возвращать можно сразу двоичные данные.

    Вот работающий пример возвращающий скриншот в формате JPEG с типом ДвоичныеДанные:

    function TGraphicsNative.GetScreenShotFunc(RetValue: PV8Variant;
    Params: PV8ParamArray; const ParamCount: Integer;
    var v8: TV8AddInDefBase): Boolean;
    Var
    Bitmap: TBitmap;
    jpeg: TJPEGImage;
    Stream: TMemoryStream;
    DC: HDC;
    begin
    Bitmap := TBitmap.Create;
    jpeg := TJPEGImage.Create;
    Stream := TMemoryStream.Create;
    try
    
    Bitmap.Height := Screen.Height;
    Bitmap.Width := Screen.Width;
    DC := GetDC(0);
    Bitblt(Bitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0,
    0, SRCCOPY);
    ReleaseDC(0, DC);
    
    jpeg.Assign(Bitmap);
    jpeg.CompressionQuality := 80; // Качество JPEG
    
    jpeg.SaveToStream(Stream);
    Stream.Position := 0;
    V8SetBlob(RetValue, Stream.Memory, Stream.Size); //<< Возвращаем JPEG с типом ДвоичныеДанные
    
    finally
    
    // Очищаем память.
    Stream.Free;
    jpeg.Free;
    Bitmap.Free;
    
    end;
    
    Result := true;
    
    end;
    

    Показать

    Reply
  2. nextkmv

    Спасибо, не знал!

    Reply
  3. Diversus

    (2) Да не за что… Сам промучился с этим долго, пока путем проб и ошибок не получилось.

    Reply
  4. nextkmv

    Очень мало документации, особенно по интеграции в браузеры. Я к сожалению не смог найти информации по внедрению в Chrome, а в FF у меня внедрить так и не получилось. Компонента устаканивалась но при запуске FF говорил что расширение невозможно запустить.

    Reply
  5. CheBurator

    Можно ли ВК использовать в 7.7…?

    Reply
  6. nextkmv

    Нет ВК написана на native API, которая появилась в 8.2. Но для семёрки я где то видел готовую обработку на инфостарте.

    Reply
  7. vitalya24

    клево, супер, я плюсанул. Только вопрос, только у меня не показывается предпросмотр перед тем как сделать снимок или у всех?

    Reply
  8. nextkmv

    (7) vitalya24, Пред просмотр заложен в ВК для удобства, но вы можете переписать ее исходный код прилагается.

    Reply
  9. Konstatine

    Спасибо! Огромнейшее! Под тонкий клиент лучшее решение!

    Reply
  10. nextkmv

    Пожалуйста. Правда за время работы выявились некоторые недочеты, в частности компонента корректно работает только если есть одно устройство захвата в системе. Если в системе есть еще устройства, сканер например, то для нормальной работы их приходиться отключать в диспетчере устройств. В планах переписать компоненту с использованием библиотеки opencv на C++. Но это как только время появится.

    Reply
  11. Key-Zed

    А как сделать Resize снимка. Ну очень надо.

    Reply
  12. nextkmv

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

    Reply
  13. Konstatine

    Добрый день! Посдкажите 2 вопроса: 1) компонента преобразует двоичные данные в картинку. А как задать нужное разрешение картинки? 2) Вы пишите, что эта обработка будет работать в IE. Пожалуйста, распишите подробней процесс настройки в браузере, никак разобраться не могу..

    Reply
  14. nextkmv

    Добрый день!

    1) Компонента преобразует картинку в Base64 строку а затем 1С преобразует строку в картинку обратно. Разрешение при этом всегда равно разрешению камеры. Встроенного механизма изменения размера нет. Но вы можете самостоятельно реализовать данный функционал в компоненте, исходный код у вас есть в архиве Delphi7Source.zip.

    2) Откройте тестовую конфигурацию в режиме веб клиента в браузере IE. При первом вызове компоненты платформа установит ее в браузер. В тестовой конфигурации вы можете посмотреть как происходит установка компоненты.

    Reply
  15. Konstatine

    Спасибо!

    Reply
  16. Konstatine

    По поводу 2 вопроса..открыл конфигурацию в браузере, при открытии обработки программа спросила установить компоненту? После нажатия ДА выходит сообщение: «Установка внешней компоненты не выполнена. В процессе установки произошла ошибка.» Подскажите с чем это может быть связано? Или может можно как-то вручную установить эту компоненту? Благодарю.

    Reply
  17. nextkmv

    Трудно сказать но я думаю что проблема скорее всего в настройках безопасности в IE. Нужно разрешить в настройках безопасности IE использование внешних компонент в том числе Activex.

    Так же обращаю ваше внимание что компонента не является готовым решением а лишь демонстрирует механизм работы с камерой из Delphi(через вызовы WinAPI) и взаимодействие с 1С по технологии Native API, так же она не тестировалась на работу со всеми версиями платформы 1С и браузера IE. И используете вы ее на свой страх и риск.

    Reply
  18. Konstatine

    Подскажите, удавалось ли Вам установить компоненту в браузере? Если да, то какая у Вас версия IE? Настройки безопасности на самом низком уровне, но установить не получается. Спасибо.

    Reply
  19. Konstatine

    …или может ее можно установить вручную (т.е. скачать, распаковать)?

    Reply
  20. Prooa

    (19) Интересует этот же вопрос.

    Reply
  21. Konstatine

    (17) nextkmv, подскажите, вопрос так и не решился.

    Reply
  22. bayce

    Компонента хорошая.

    Но если бы можно улучшить ее.

    Есть компонента с хорошим функционалом, но к сожалению работает не стабильно.

    http://infostart.ru/public/341805/#comm

    Reply
  23. nextkmv

    Компонента писалась довольно давно, с тех пор много что изменилась(Например кросплатформенность и мобильная платформа). В принципе я могу начать разработку новой версии, с учетом новых требований. Пишите свои пожелания а я попробую их реализовать.

    Я бы добавил следующие возможности:

    — Возможность настройки разрешения снимка;

    — Возможность снимать видео;

    — Возможность подключения проффесиональных цифровых камер для съемки номенклатуры;

    — Возможность быстрой съемки, в один клик;

    — Работа в толстом, тонком, web клиенте(укажите какие браузеры востребованы, так как для каждого требуется своя сборка), возможно мобильная версия компоненты(фотографируем на телефон выгружаем в основную ИБ);

    — Возможно нужен функционал распознования изображений, например QR кода на коробках.

    Пишите свои предложения, желательно в порядке приоритетности реализации.

    Reply
  24. igorekpanchenko
    Reply
  25. Key-Zed

    (23) nextkmv, Дерзай, очень жду.

    К списку предложений привинтить работу со сканером.

    Reply
  26. Konstatine

    Подскажите пожалуйста такой вопрос:

    Внезапно на нескольких компьютерах начала выходить ошибка: «Не найден файл внешней компоненты».

    Помогает перезагрузка. С чем такое может быть связано? Куда копать?

    Саму внешнюю компоненту еще раз у вас скачал и заменил макет, но не помогло.

    Благодарен за любой дельный совет.

    Reply
  27. nextkmv

    (26) Konstatine, странная ситуация. Попробуйте обновить платформу 1С.

    Reply
  28. anig99

    Спасибо! Работает даже на XP под 8.3

    Reply
  29. user5300

    не работает… Черный экран и не возвращает картинку снимка …

    Reply

Leave a Comment

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