Фотография с камеры через DirectX

Компонента для получения фотографии с WEB-камеры с использованием DirectX

Часто встречал на сайте компоненты для получения изображения с камеры.

Но основная часть использует для подключения к камере виндовую библиотеку AVICAP.DLL, которая в последних версиях Windows работает далеко не лучшим образом (если вообще работает). Лично у меня частенько был видел только зелёный экран.
Решил переписать получение фотки с использованием DirectX.

Использование в аттаче.

2024.02.01
Доделал, чтобы возвращало сразу двоичные данные — больше не надо что-то кодировать после получения.
Также добавлен метод для наложения водяного знака (см. использование).

18 Comments

  1. premierex

    (0) Автор, поправьте, пожалуйста, в названии понятие «вёб» на одно из общепринятых понятий: веб, вэб (или используйте его англоязычное написание /web/). Честно говоря, непривычно как-то. А так — тема интересная. Direct-X (DirectShow — это как раз тот набор компонентов, позволяющий работать с видео-потоками) — на данный момент, как мне кажется, самый функциональный набор решений для работы с ними в OS Windows.

    Цена компоненты несколько завышена (imho). Есть более функциональные компоненты для работы с web-камерами, размещёнными на infostart.ru.

    Reply
  2. 7OH

    (1) premier, сейчас поправлю и описание и цену понижу.

    Пример кода
    Reply
  3. 7OH

    Добавлен метод наложения водяного знака.

    СтрокаОригинал = Base64Строка(Данные1.ПолучитьДвоичныеДанные());
    СтрокаВодяной   = Base64Строка(Данные2.ПолучитьДвоичныеДанные());
    
    Положение = 5; // 1 — 9
    Прозрачность = 80; //1-100
    двДанныеРезультат = dsWebCam.ДобавитьВодянойЗнак(СтрокаОригинал, СтрокаВодяной, Положение, Прозрачность);
    
    

    Показать

    Reply
  4. user702269_vabuyak

    ребята на 1с 8.3 и Server 2012 R2 работать будет?

    Reply
  5. 7OH

    У нас 2012 и 8.3.9, но это на сервере — всё работает.

    На клиентах — от 7-ки до 10-ки.

    На ХР тоже проблем нет.

    Reply
  6. Tanenok

    Подойдет для УТ 11?

    Reply
  7. 7OH

    (6) Да, конечно.

    У нас УТ 3.1.2 (Украина — аналог УТ 11).

    Нативные компоненты появились ещё в 8.2, так что должно работать в большинстве конфигураций.

    Reply
  8. LtNas

    Я конечно дико извиняюсь, но где описание??? (см.использование) ???? В аттаче только dll и manifest

    Reply
  9. 7OH

    (9) пост 2 и 3.

    В шапку код не пропустили без спойлера, а спойлер туда не ставится — пришлось отдельным постом делать.

    Reply
  10. D_E_S131

    А что в примере (2) за переменная (или реквизит формы) «dsWebCam»?

    Reply
  11. 7OH

    (11) верно подметили — там должно быть Компонента

    Reply
  12. nsirotkin@mail.ru

    Скачал компоненту. Окно с видео открывается, но в результате dsWebCam.Успех=Ложь Win7Sp1 (1C 8.3.14.1630), версия dll 2.2.1.6.

    Что еще можно посмотреть/сделать?

    ps: Тестовую обработку было бы полезно приложить в архив для скачивания… Версии x64 нет/не будет?

    upd: убрал макет с компонентой

    Reply
  13. 7OH

    (13) в вашей обработке немного можно подправить код

    Функция КартинкаИзСтроки(стрКартинка, УникальныйИдентификатор)

    в стрКартинка уже двоичные данные приходят (если нет — постучите в личку).



    В целом проверил — работает.

    directX установлен ?

    Reply
  14. nsirotkin@mail.ru

    (14) С новой компонентой (2.2.1.8) работает нормально. Спасибо.

    Reply
  15. ИНТЕГРА

    (14)

    е приходят (если нет — постучите в личку)

    Мне не приходят )

    После вызова: dsWebCam.Старт(), открывается видео-окно, в нем нажимаю «сфотографировать» и далее по условию не проходит (Если dsWebCam.Успех Тогда … ):

    dsWebCam.Успех == Ложь

    Подскажите в чем может быть проблема?

    PS:

    32бит, 8.3.12.1529. На более новых платформах не тестировал.

    виртуальне веб камеры, вечером дома попробую на «железной» — отпишусь.

    Reply
  16. 7OH

    (16) не в курсе , что это за камеры.

    Успеха нет видимо потому, что не выходит вывод с этой камеры из BMP в JPG запихнуть.

    Опять же — с обычными камерами работает.

    С пробросом в РДП средствами винды тоже работает.

    От версии 1С не зависит — работает и на 8.3.15.1700.

    Тут что-то специфическое в виртуальности.

    Reply
  17. ИНТЕГРА

    (17) проверил на железной камере, на другой конфигурации ПК — результат тот-же 🙁

    Видео с камеры транслируется. Но в строку ничего не приходит:

    &НаКлиенте
    Функция ПодключитьКамеру(ID) Экспорт
    Если Не ПроинициализироватьКомпоненту() Тогда
    Возврат НСтр(«ru= ‘Компонента не установлена'»);
    КонецЕсли;
    dsWebCam.ИмяКамеры = ID;
    dsWebCam.Старт();
    
    Если dsWebCam.Успех Тогда
    
    стрКартинка = dsWebCam.стрКартинка;
    сообщить(dsWebCam.стрКартинка);
    Если Не стрКартинка = Неопределено Тогда
    АдресКартинки = КартинкаИзСтроки(стрКартинка, УникальныйИдентификатор);
    КонецЕсли;
    иначе
    сообщить(«Ничего не пришло») /// *** валится сюда *** ///
    КонецЕсли;
    
    КонецФункции
    

    Показать

    Возможно кокой-то «Дельфийской» компоненты не хватает. Конвертация BMP->JPG каким методом происходит? Эксепшены посмотреть нигде нельзя в логах каких-нибудь?

    Reply
  18. ИНТЕГРА

    (18)Автор прислал новую версию — все получилось. Спасибо ему за это!

    (обещал обновить в публикации)

    Reply

Leave a Comment

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