0. SerG_121 440 28.04.11 12:11 Сейчас в теме

ActiveX компонента WebCamX для работы с веб-камерой!

Искал нормальную компоненту без .NET для работы с Web-камерой, нашел одну, но она платная.
Тогда я решил сделать свою ActiveX.
Моя компонента умеет:
1. - Получать изображение с камеры.
2. - Писать видео с камеры в файл, в формате (*.asf).
3. - Делать снимок с камеры и сохранять в файл, в форматах (*.bmp; *.jpg; *.png).
4.- Умеет проигрывать видео.

Для начало работы необходимо зарегистрировать компоненту в системе. Например:
regsvr32 "Полный путь к файлу WebCamX.ocx"

Так же имеется обработка пример для 1с8.2. В этой обработке показано как можно работать с этой компонентой.
Желаю удачи! Не забываем ставить плюсы и коментить :)

Перейти к публикации

ja-maik-a; +1 Ответить
Комментарии
Избранное Подписка Сортировка: Древо
94. -Yura- 17.06.13 19:07 Сейчас в теме
Дайте кто нибудь ссылку на скачивание, инфостарт не дает скачать. Буду благодарен
95. Vovus 4 28.06.13 18:22 Сейчас в теме
Почему то не удается зарегистрировать компоненту WIn Server 2008 r2 64 "Не найден указанный модуль!"
98. maljaev 777 23.07.13 11:00 Сейчас в теме
(95) Vovus, попробуй по этой методике, должно получиться: http://infostart.ru/public/69986/
96. harutyunb 23.07.13 10:01 Сейчас в теме
Это все работает только в usb камерами, а я хотел такое реализовать с ip камерами. в принципе удалось это сделать. использование программы devline эсли камера не выдает на сеть стандартный протокол видео, в принцыпе у них же есть и пример обработки для внедрения в 1с, если нету обращайтесь в компанию "КорневСофт"
97. maljaev 777 23.07.13 10:55 Сейчас в теме
В общем-то работа с ip-камерами вообще никаких проблем не представляет. Любая контора (а не только КорневСофт), которая выпускает ip-камеры, реализует сразу интерфейс для работы с ними через браузер. Видеопоток с камеры транслируется в окно браузера через их activex. Соответственно зная интерфейс управления этим activex (обычно это несколько простых методов и свойств которые можно узнать в любом вьюере объектов) можно вставить его в форму 1С через WebBrowser ActiveX, и иметь живой поток. Также IP-камеры по сравнению с usb-веб-камерами имеют намного более развитые интерфейсы для работы с ними по различным протоколам и могут по команде извне предоставлять скриншоты, куски видео, данные архива записей и т.д. Также функционал снятия скриншота может быть реализован как один из методов activex.

С usb-веб-камерами возникает уйма проблем, я это всё прочувствовал на собственной шкуре когда внедрял один крупный проект на них. Во-первых качество изображения этих камер ужасное даже в условиях нормальной освещенности, нет защиты от воды/жары/холода - так как камеры предназначаются для работы в помещениях. Очень малое расстояние от ПК до камеры, при котором они работают стабильно и работают вообще. Нет защиты от пересвета - это блики от снега/льда/луж, прямой солнечный свет - опять же следствие их предназначения для помещений. Нет нормальных интерфейсов для управления камерами. Нет сменных объективов, нормальной фокусировки, зума, поворота и т.д.

С IP-камерами намного лучше, есть много моделей предназначенных для работы в жестких уличных условиях, в дорогих модели этих камер устранены все вышеперечисленные недостатки. Витая пара (или WiFi) дает возможность отнести их на любое расстояние от ПК. Разрешение IP-камер на данный момент - до 5 мегапикселей при 15 кадрах в секунду (причем практически реальных что подтверждается образцами видео), а значит можно спокойно рассмотреть номера на авто, лица и т.д. Кроме всего прочего есть инфракрасная подсветка, защита от пересветов, морозо- и жароустойчивость, автономность. Но и как говорится - любой каприз за ваши деньги. Относительно приличные IP-камеры начинаются от 10 т.р., но ИМХО возможности и удобство работы с ними стоят того для ряда проектов.

По аналогии с IP-камерами, многое из того же возможно реализовать с помощью обычных аналоговых камер, так как даже аналоговая камера на порядок лучше usb-камеры. Но для этого необходимо реализовать сначала сервер видеозахвата (обычно они уже имеются в фирмах где реализовано видеонаблюдение), а затем интерфейс работы с этим сервером из 1С. Но тут уже по полной аналогии с IP-камерами, так как разработчики ПО для видеонаблюдения предоставляют те же средства и функционал что и разработчики IP-камер, то есть имеется как минимум activex для работы с потоком через браузер.

Очень важной деталью реализации проектов с использованием камер чаще всего также является реализация взаимодействия с другими внешними устройствами. Например открыть шлагбаум или турникет из 1С, прочесть штрихкод с удаленного устройства, включить/выключить двигатель ворот, управлять освещенностью и т.д. Здесь на помощь приходят ряд несложных устройств, с некоторыми из которых вы можете познакомиться по ссылкам ниже. Некоторые из этих устройств я уже использовал в своих проектах. Но это уже другая тема для разговора.
http://tibbo.com/soi/hardware.html
http://usbsergdev.narod.ru/projects.html
99. movlost 23.11.13 22:37 Сейчас в теме
А есть у этой компоненты функция по изменению размера изображения? Например, чтобы снимок был не 640x480, а 800x600 или 480x640.
100. travelekb 29.11.13 21:20 Сейчас в теме
Меня тоже интересует вопрос изменения разрешения снимка. Хотелось бы иметь минимум 800х600. Как можно это реализовать?
101. SerG_121 440 01.12.13 15:01 Сейчас в теме
Компоненту надо доработать. Как время появится так и займусь этим!
103. cheb73 05.12.13 10:41 Сейчас в теме
А можно сделать так, чтобы у компоненты была возможность видеопоток с камеры повернуть на 90 градусов?
104. SerG_121 440 05.12.13 11:05 Сейчас в теме
(103)Нет, такого сделать нельзя. Тебе проще перевернуть саму камеру ))
105. cheb73 05.12.13 11:34 Сейчас в теме
Надо формат портрет, а вебкамера дает альбом :( Если переворачиваешь камеру, изображение естественно тоже переворачивается.
106. NAKIS 5 18.12.13 11:37 Сейчас в теме
Компонента супер! Использую на rdp, предварительно пробросив камеру. Автору огромное спасибо!
107. NAKIS 5 18.12.13 11:43 Сейчас в теме
кстати, если кому надо будет, пробрасывал через WebCam for Remote Desktop, ибо так просто не катит.
108. Nebiros777 5 25.02.14 13:42 Сейчас в теме
Круто, заказчикам понравится то, что можно можно сделать с этой компонентой.
109. Джуниор 61 20.05.14 11:49 Сейчас в теме
Что-то не получается у меня прикрутить эту ВК на управляемые формы. НЕ пробовали?
//-- модуль формы
&НаКлиенте
Перем WebCam ;

&НаКлиенте
Процедура Пуск(Команда)
Элементы.СписокDevice.Доступность=Ложь;
Элементы.СписокФорматов.Доступность=Ложь;
WebCam.Play();
КонецПроцедуры

&НаКлиенте
Процедура СписокDeviceПриИзменении(Элемент)
WebCam.SetDevice(СписокDevice);
Для Ч=0 по WebCam.GetCountVideoFormat()-1 Цикл
Элементы.СписокФорматов.СписокВыбора.Добавить(Ч,WebCam.GetNameVideoFormat(Ч));
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
WebCam = Новый COMОбъект("WebCamProj1.WebCamX");
Кол=WebCam.GetCountDivice();
Элементы.СписокDevice.СписокВыбора.Очистить();
Для Ч=0 по Кол-1 Цикл
Элементы.СписокDevice.СписокВыбора.Добавить(Ч,WebCam.GetNameDevice(Ч));
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура СписокФорматовПриИзменении(Элемент)
WebCam.SetVideoFormat(СписокФорматов);
КонецПроцедуры

&НаКлиенте
Процедура Снимок(Команда)
ИмяФайла = ПолучитьИмяВременногоФайла();
WebCam.SaveBitmapToFile(ИмяФайла, 2, 30);/// ругается на эту строку
Кар=Новый Картинка(ИмяФайла);
ПолеКартинки=Кар;
КонецПроцедуры
110. Джуниор 61 20.05.14 11:53 Сейчас в теме
Ну и сама обработка...
Прикрепленные файлы:
CAMX2_УФ.epf
111. SerG_121 440 22.05.14 09:38 Сейчас в теме
(110)На управляемых формах ФктивИкс не работает!!!. Почитайте коменты есть другая реализация в этом случае или делайте на обычных формах.
112. sweeex 10 18.10.14 01:06 Сейчас в теме
Класс! то что нужно. Автор молодец! Начальству нужно будет показать как новую фичу! А если почитать еще и коменты то можно еще много полезного найти))!
113. Danil.Potapov 04.02.15 20:16 Сейчас в теме
пример работы с компонентой в тонком клиенте через поле html. в целом все работает, но есть пара музыкальных моментов.
Прикрепленные файлы:
ПримерДляТонкогоКлиента.epf
infoprokatstartru; AndE; +2 Ответить
114. Chmikle 23.03.15 17:16 Сейчас в теме
(113) а вы поподробнее можете рассказать , у меня эта обработка выдает ошибку
115. kuntashov 369 19.05.15 14:43 Сейчас в теме
Спасибо за компоненту, единственный вариант, который в нашем случае заработал под Windows 7 для 1С 7.7.
Но есть один очень неприятный баг.

Если инициализировать элемент управления ActiveX вот таким образом:

    ВебКамера = СоздатьОбъект("АктивИкс"); 
    
    ВебКамера.УстановитьАтрибут(Форма, "АктивИксФото"); 
    Объект = ВебКамера.СоздатьЭУ("WebCamProj1.WebCamX"); 
    ВебКамера.УстановитьФокус(); 
    		
	
    Объект.SetDevice(0);		
    Объект.Play();
Показать


То возникает ошибка:

Объект.Play();
{Документ.ХХХХ.Форма.Модуль(96)}: WebCamProj1.WebCamX: List index out of bounds (0)


Но путем анализа кода обработки для 8ки удалось догадаться, что в методе GetNameVideoFormat() есть какой-то побочный эффект, вызов которого до вызова Play() приводит к нормальной работе компоненты.

Поэтому вот такой код работает:

    ВебКамера = СоздатьОбъект("АктивИкс"); 
    
    ВебКамера.УстановитьАтрибут(Форма, "АктивИксФото"); 
    Объект = ВебКамера.СоздатьЭУ("WebCamProj1.WebCamX"); 
    ВебКамера.УстановитьФокус(); 
    		
	
    А = Объект.GetNameVideoFormat(0); // Магический вызов, который имеет полезный для нас побочный эффект.
    Объект.SetDevice(0);		
    Объект.Play();
Показать


Все это актуально для компоненты из архива WebCamX2.rar (только она работает под Windows 7)

p.s.
Разработчик убил полдня, чтобы из трех методов компоненты составить работающую комбинацию :)
"Пишите свой код из предположения, что сопровождать его будет психопат-убийца, знающий, где вы живете." (с)
116. luchyk007 14.07.15 10:18 Сейчас в теме
Как раз искал подобную обработку, нужно определиться как будет удобнее передавать информацию в 1с - через Web камеру либо сканер, кто пользовался Web камерой для сканирования документов поделитесь впечатлениями, достаточное ли получается качество изображения.
118. piton66 2 11.08.15 14:59 Сейчас в теме
Для управляемого приложения есть что нибудь рабочее по данной теме? Скиньте плиз.
119. SerG_121 440 13.08.15 11:52 Сейчас в теме
(118) piton66, Обработка с компонентой рабочая!!!
120. grandexpert 19 14.08.15 15:10 Сейчас в теме
(119) Серж, а есть возможность реализовать данную обработку на Управляемых формах?
121. grandexpert 19 14.08.15 15:13 Сейчас в теме
(119) или же задам вопрос иначе, если я сам пытаюсь создать форму на УФ, как мне реализовать элемент формы WebCam, как построить этот "черный квадрат Малевича"?)
123. piton66 2 19.08.15 21:11 Сейчас в теме
(121) grandexpert,
Вот тут под управляемое сделано.
http://infostart.ru/public/389096/
122. piton66 2 19.08.15 20:31 Сейчас в теме
А под windows 8 кто нибудь пробовал компоненту зарегестрировать?
У меня что-то не получается. В чем причина может быть?
124. piton66 2 20.08.15 08:49 Сейчас в теме
Сам разобрался. Под 8 винду всё ставится. Камеру по RDP тоже прокинуть можно при желании.
125. rosinfo1 04.05.16 15:50 Сейчас в теме
(124) piton66, А в чем причина была, тоже не могу зарегистрировать компоненту по виндоус 8.1? пишет ошибку. Хотя под ХР, все работало прекрасно.
П.С. Помучился часок с регистрацией из командной строки, через права админа, все получилось, информации полно в гугле. Обработка работает отлично и под виндоус 8.1. Прикрутил ее к справочнику номенклатура в конфе УТ 10.3, для фотографирования прямо из списка товаров. Всем советую.
126. karapuzzzz 62 23.06.16 14:25 Сейчас в теме
Компонента отличная. Но не хватает работы с разрешениями (даже во 2-й версии). По-умолчанию камера включается в 640х480, хотя камера поддерживает HD формат. Автоматический режим не решает вопроса и надо постоянно выбирать разрешение из списка (понимаю, что можно сохранить последнее значение). Очень сильно не хватает получения разрешения не ввиде текстового списка, который надо парсить, а в виде нескольких списков. Например: GetVerticalResolutions(), GetHorizontalResolutions(), GetBitRates(), GetMaxResolution(). Первые можно перегрузить, передавая параметрами второе значение разрешения. Например, получить вертикальные разрешения при таком то горизонтальном, или получить возможные битрейты при таком то разрешении (чтобы убрать возможность ошибки, когда передаются неподдерживаемые значения).
Если выложите свою разработку на Git, думаю найдутся волонтеры на доработку (я могу помочь).
127. karapuzzzz 62 23.06.16 16:01 Сейчас в теме
А еще, если выбрано другое разрешение, то новая картинка просто растягивается по размеру компоненты. Не хватает масштабирования.
128. karapuzzzz 62 24.06.16 09:25 Сейчас в теме
Если менять разрешение на включенной камере, то при вызове метода GetCountVideoFormat() возвращает только одно единственное разрешение. И это именно то разрешение, которое было установлено. Установить другое разрешение выдаст ошибку.
Ладно, меняем разрешение, при этом остановив камеру. Тогда метод SetVideoFormat() вообще возвращает ошибку. Приходится заново устанавливать устройство методом SetDevice(N).
129. karapuzzzz 62 24.06.16 17:52 Сейчас в теме
Как я "допилил" под себя.
1. Сохранение значений камеры и разрешения.
2. При открытии формы, если камера в системе одна, то автоматическое подключение к ней. Автоматический Play()
3. Определение максимального разрешения камеры и подключение с этим разрешением:
МаксимальныйФормат = 0;
	МаксимальнаяВысота = 0;
	МаксимальнаяШирина = 0;
	МаксимальныйБитрейт = 0;
	Попытка
		Для Ч=0 по ЭлементыФормы.КомпонентаКамеры.GetCountVideoFormat()-1 Цикл
			
			ДанныеФормата =  ПолучитьДанныеИзСтроки(ЭлементыФормы.КомпонентаКамеры.GetNameVideoFormat(Ч));
			
			Если ДанныеФормата.Ширина>МаксимальнаяШирина
				Или ДанныеФормата.Высота>МаксимальнаяВысота Тогда
				
				МаксимальныйФормат = Ч;
				МаксимальнаяВысота = ДанныеФормата.Высота;
				МаксимальнаяШирина = ДанныеФормата.Ширина;
				МаксимальныйБитрейт = ДанныеФормата.Битрейт;
				
			ИначеЕсли ДанныеФормата.Ширина=МаксимальнаяШирина
				И ДанныеФормата.Высота=МаксимальнаяВысота
				И ДанныеФормата.Битрейт > МаксимальныйБитрейт Тогда
				МаксимальныйФормат = Ч;
				МаксимальныйБитрейт = ДанныеФормата.Битрейт;
			КонецЕсли; 
			
			ЭлементыФормы.СписокФорматов.СписокВыбора.Добавить(Ч,ЭлементыФормы.КомпонентаКамеры.GetNameVideoFormat(Ч));
		КонецЦикла;	
		
		ЭлементыФормы.СписокФорматов.Значение = МаксимальныйФормат;
		ОбработатьВыборФормата();
	Исключение
		Сообщить("Не удалось определить формат изображения автоматически. Установлен 640х480");
	КонецПопытки;
Показать

3. Парсинг строки видеоформата (пока работает на всех моих камерах):
Функция ПолучитьДанныеИзСтроки(СтрокаФормат)

	МассивФорматов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаФормат, " ");
// методом "научного тыка" выяснил, что разрешение хранится в 10-ом элементе массива. Битрейт в 11-ом
// но из строки разрешения надо еще отдельно выбрать высоту и ширину
	МассивРазрешение = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(МассивФорматов[10], ",", ""), "X");

	ДанныеФормата = Новый Структура("Ширина, Высота, Битрейт");
	ДанныеФормата.Ширина = Число(МассивРазрешение[0]);
	ДанныеФормата.Высота = Число(МассивРазрешение[1]);
	ДанныеФормата.Битрейт = Число(МассивФорматов[11]);
	Возврат ДанныеФормата
	
КонецФункции
Показать

4. В обработке выбора формата прописано изменение размера окна компоненты (чтобы избежать растягиваний)
Процедура ОбработатьВыборФормата()

	//Данные по-умолчанию, если определить не удастся
	ШиринаИзображения = 640;
	ВысотаИзображения = 480;
	
	ЭлементыФормы.КомпонентаКамеры.SetVideoFormat(ЭлементыФормы.СписокФорматов.Значение);
	
	ДанныеФормата =  ПолучитьДанныеИзСтроки(ЭлементыФормы.КомпонентаКамеры.GetNameVideoFormat(ЭлементыФормы.СписокФорматов.Значение));
	Если Не ДанныеФормата = Неопределено Тогда
		
		ШиринаИзображения = ДанныеФормата.Ширина;
		ВысотаИзображения = ДанныеФормата.Высота;	
		
	КонецЕсли;
	
	//ЭлементыФормы.КомпонентаКамеры.Ширина = ШиринаИзображения;
	ЭлементыФормы.КомпонентаКамеры.Высота = (512/ШиринаИзображения)*ВысотаИзображения; // 512 это ширина окна в конфигураторе
// ширина окна не меняется. Оперируем только высотой
	МинимальнаяВысотаФормы = 370; // меньше этой высоты не ставлю т.к. там есть другие элементы
	ВысотаСКомпонентой = ЭлементыФормы.КомпонентаКамеры.Высота + 36;
	ЭтаФорма.Высота = ?(ВысотаСКомпонентой>МинимальнаяВысотаФормы, ВысотаСКомпонентой, МинимальнаяВысотаФормы);
	
	
КонецПроцедуры
Показать

133. lunjio 60 16.08.17 13:58 Сейчас в теме
Все хорошо, спасибо автору за труды, но есть одно но, при записи видео в файл, сохраняет очень плохое качество, несмотря на выбранное из списка поддерживаемых максимального. Проверялось на разных компьютерах, разных устройств. Очень хотелось бы, получить хорошее качество на выходе.
134. PROF1L 10 08.09.17 05:42 Сейчас в теме
А чем отличается вторая от первой?
135. PROF1L 10 08.09.17 07:01 Сейчас в теме
Не получается скачать, что - то сломалось=\
136. user834158 16 27.09.17 17:27 Сейчас в теме
В тему поста хочу поделиться интересным решением – бесплатный модуль для 1С, позволяющий контролировать любое оперативное событие по видеоданным сразу из оболочки 1С. Сразу через интерфейс 1С можно получать видеозаписи по любым системным событиям, например - печать чека, складские операции (приемка, отгрузка), возвраты товара и т.д. Здесь больше данных: https://ru.ivideon.com/ivideon-1c-integration/
137. Pro-man 30.11.17 10:50 Сейчас в теме
140. apatyukov 890 11.02.19 08:06 Сейчас в теме
Не увидел в архивах саму компоненту.
141. apatyukov 890 11.02.19 08:09 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата до 120 000 руб.
Полный день

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 115 000 руб. до 160 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день