Форум: "Media";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизDirectShow. Как воспроизвести сразу 2 видеокамеры? Найти похожие ветки
← →
WondeRu © (2004-07-29 15:07) [0]Есть карточка захвата! К 2-ум композитным входам подключены камеры! Написал прогу, которая вызывает IAMCrossbar PropertyPage, там можно выбрать лишь одну камеру для текущего графа!
Как одновременно воспроизвести и получить опорные кадры с этих камер???
← →
Анонимщик © (2004-07-29 17:57) [1]Одновременно никак, у тебя ведь каналы коммутируемые. Делай что-то вроде IAMCrossBar.Route(0, 0) получай с одного канала, потом IAMCrossBar.Route(0, 1) - с другого.
← →
Анонимщик © (2004-07-29 17:58) [2]Забыл спросить. Сколько у тебя на карточке микросхем bt8xx? Если одна, то делать нужно так, как я сказал. Если две, тогда можно и "одновременно".
← →
WondeRu © (2004-07-30 12:24) [3]2Анонимщик ©
Одна микросхема!
Другой вопрос: Я работаю в режиме Preview! А как сделать так, чтобы картинка не показывалась, т.е. картинка шла в какой-нить буфер, а затем бы я его прорисовывал в зависимости от камеры на две области?
Использую компоненты DSPack, картинка выводится с помощью TVideoWindow! если нет его на форме, то граф создает свое окно и выводит картинку туда!
← →
Анонимщик © (2004-07-30 12:53) [4]Одна микросхема, значит - коммутация.
// пример, когда все создается в run-time:
// код пишу весь подряд, посмотри, кстати, тут кое-чего
// тебе сразу и не нужно, но потом пригодится
FFilterGraph := TFilterGraph.Create(nil);
FFilter := TFilter.Create(nil);
FSampleGrabber := TSampleGrabber.Create(nil);
FSampleGrabber.OnBuffer := NewPictureEvent; (* обработкой у меня эта пройедура занимается *)
FFilterGraph.Mode := gmCapture;
FFilter.FilterGraph := FFilterGraph;
FSampleGrabber.FilterGraph := FFilterGraph;
FFilterGraph.ClearGraph;
FFilterGraph.Active := false;
FFilter.BaseFilter.Moniker := AMoniker; (* об этом моникере сам позаботься следующим образом:
SysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
for i := 0 to SysDev.CountFilters - 1 do
begin
SysDev.GetMoniker(i); // этот твои моникеры
end;
*)
FFilterGraph.Active := true;
(FFilterGraph as ICaptureGraphBuilder2).FindInterface
(
nil,
nil,
FFilter as IBaseFilter,
IID_IAMStreamConfig,
FIAMStreamConfig
);
(FFilterGraph as ICaptureGraphBuilder2).FindInterface
(
nil,
nil,
FFilter as IBaseFilter,
IID_IAMVideoProcAmp,
FIAMVideoProcAmp
);
(FFilterGraph as ICaptureGraphBuilder2).FindInterface
(
@LOOK_UPSTREAM_ONLY,
nil,
FFilter as IBaseFilter,
IID_IAMCrossBar,
FIAMCrossBar);
(FFilterGraph as ICaptureGraphBuilder2).FindInterface
(
nil,
nil,
FFilter as IBaseFilter,
IID_IAMAnalogVideoDecoder,
FIAMAnalogVideoDecoder
);
(FFilterGraph as ICaptureGraphBuilder2).FindInterface
(
@PIN_CATEGORY_CAPTURE,
@MEDIATYPE_Video,
FFilter as IBaseFilter,
PROPSETID_VIDCAP_CUSTOMBT848,
FICustomCameraProp
);
(FFilterGraph as ICaptureGraphBuilder2).RenderStream
(
@PIN_CATEGORY_PREVIEW{@PIN_CATEGORY_CAPTURE},
nil,
FFilter as IBaseFilter,
nil,
FSampleGrabber as IBaseFilter
);
FFilterGraph.Play;
В процедуре NewPictureEvent вызываешь процедуру
FSampleGrabber.GetBitmap(tmpBitmap, Buffer, BufferLen);
Что неясно?
← →
WondeRu © (2004-07-30 13:04) [5]Для моего случая я думаю можно отставить только создание
FIAMCrossBar и RenderStream. Я прав?
Если не сложно прокомментируй каждый FindInterface в 2-х словах. Что для чего? это так, для общего развития!
← →
Анонимщик © (2004-07-30 13:08) [6]Прав.
FIAMStreamConfig - для конфигурирования
FIAMVideoProcAmp - для получения/установки, например, яркости-контраста и т.д.
FIAMCrossBar - для переключения каналов (Route и get_IsRoutedTo)
FIAMAnalogVideoDecoder - для установки PAL/SECAM и т.д.
FICustomCameraProp - это выброси вообще, специфично для той карточки, что я использую
Более подробно читай в хелпе по интерфейсам и функциям.
← →
WondeRu © (2004-07-30 13:17) [7]Анонимщик, спасибо БОЛЬШОЕ за помощь!
Кстати, а где твоя анкета?
← →
Анонимщик © (2004-07-30 13:20) [8]Пожалуйста.
← →
WondeRu © (2004-08-02 16:52) [9]Вообще муть получается!!!(((
Кадры бегают! Нет синхронизации! Иногда част ькартинки с одной камеры налазит на др камеру!
После получения очередного кадра я прорисовываю картинку (на своем месте каждый канал), затем переключаю канал!
все дрыгается!
как правильно сделать, чтобы сразу показывать все 4 канала БиТишки в реалтайме?
код:
procedure TVideoCapture.SampleGrabberBuffer(sender: TObject;
SampleTime: Double; pBuffer: Pointer; BufferLen: Integer);
var
BIHeader: tagBitmapInfo;
MediaType: TAMMediaType;
xpos, ypos, Index: Integer;
begin
try
FSampleGrabber.SampleGrabber.GetConnectedMediaType(MediaType);
if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo) then
begin
if MediaType.cbFormat = SizeOf(TVideoInfoHeader) then // check size
BIHeader.bmiHeader := (PVideoInfoHeader(MediaType.pbFormat)^.bmiHeader);
end
else if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo2) then
begin
if MediaType.cbFormat = SizeOf(TVideoInfoHeader2) then // check size
BIHeader.bmiHeader := (PVideoInfoHeader2(MediaType.pbFormat)^.bmiHeader);
end;
finally
FreeMediaType(@MediaType);
end;
Canvas.Lock;
try
try
SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
with BIHeader.bmiHeader do
begin
Index := FCrossbar.InputCrossbarPins[FCrossbar.RoutedInputPins[FCrossBar.NowRoute].PinIndex].PinIndex;
xpos := (Index mod 2) * (biWidth div 2 + 5);
ypos := (Index div 2) * (biHeight div 2 + 5);
StretchDIBits(Canvas.Handle,
xpos,
ypos,
biWidth div 2,
biHeight div 2,
0,
0,
biWidth,
biHeight,
pBuffer,
BIHeader,
DIB_RGB_COLORS,
SRCCOPY);
end;
except
end;
finally
Canvas.Unlock;
end;
//переключение камер
if FCrossBar.RoutedInputPinsCount > 0 then
FCrossBar.RouteNext;
end;
← →
WondeRu © (2004-08-04 09:29) [10]Может кто скажет в чем ошибка, плизз!!!
← →
Анонимщик © (2004-08-16 16:58) [11]Ветку наверх.
Ну как, получилось уже?
← →
WondeRu © (2004-08-24 12:58) [12]Анонимщик © (16.08.04 16:58) [11]
Ветку наверх.
Ну как, получилось уже?
неа! может я не в том месте переключаю каналы? где их щелкать?
← →
Анонимщик © (2004-08-25 11:57) [13]Щелкай где хочешь. Но потом либо делай задержку миллисекунд, скажем, 65, либо, что лучше, если у тебя карточка с родными драйверами и есть компакт с демо какими нибудь, то посмотри, как там сделан этот момент. Кстати, посмотри, сколько у тебя InputPins?
← →
Sapersky (2004-08-25 13:05) [14]Не знаю, как там конкретно в DirectShow, но вообще при видеозахвате имеет смысл переключать каналы после прихода очередного кадра...
То, что синхронизации нет - ну, камеры не синхронизированы, вот её и нет :)
И реалтайм с 4 каналов определённо не получится... Делим 25 FPS на 4, да ещё, если синхронизации нет, дополнительные задержки при переключении... в общем, кадра 3-4 в секунду будет.
← →
Анонимщик © (2004-08-25 13:57) [15]Sapersky
А это вообще к чему?
← →
WondeRu © (2004-08-25 14:31) [16]Анонимщик © (25.08.04 11:57) [13]
сколько у тебя InputPins
4 шт!
где задержку?
у меня в коде после
if FCrossBar.RoutedInputPinsCount > 0 then
FCrossBar.RouteNext; ????
Боюсь - там никак! Отдельно таймер делать для переключения?
← →
Sapersky (2004-08-25 14:45) [17]А это вообще к чему?
Это к
WondeRu © (02.08.04 16:52) [9]
Вроде бы в тему? :)
← →
WondeRu © (2004-08-25 14:51) [18]WondeRu © (25.08.04 14:31) [16]
4 шт!
вообще-то не помню! )
← →
Анонимщик © (2004-08-25 15:32) [19]WondeRu
Меня интересовали InputPins именно видео, и именно те, что соответствуют твоему выходу.
Так, вот еще увидел. Ты сначала пишешь, что у тебя два композитных входа, а затем - что четыре. Так сколько их?
Какая плата?
А количество пинов проверь с помощью вызовов нужных функций, а не на глазок.
← →
WondeRu © (2004-08-25 15:59) [20]Анонимщик © (25.08.04 15:32) [19]
плата дома валяется, сейчас вспомнить не могу (но отношение помню 3:1, тока не помню чего входит и чего выходит)! Вообще планировал сначала 2 камеры вешать на 2 композитных входа, но потом решил сделать на все (стандартная conexant bt 878: 2 composite, 1 tv, 1 s-video)!
Щас пытаюсь делать смотрелку для всех входов!
← →
Анонимщик © (2004-08-25 18:15) [21]Еще раз спрашиваю: как называется твоя карточка? Ты ее что, на мусорке нашел, что маркировки сказать не можешь? Что такое три к одному?
← →
WondeRu © (2004-08-26 08:35) [22]посмотрел! Пины: просмотр, запись, dvi, аналоговый выход! Карточка Conexant называется, на bt848!!! Об остальных параметрах - без понятия!
← →
Анонимщик © (2004-08-26 12:02) [23]Это не карточка Conexant называется, а микросхема. Не буду придираться, что ты там о пинах сказал, но видимо, тебе никто ничем не сможет помочь, так как информации о том, въехал уже чип в синхронизацию или нет, взять неоткуда. Поэтому делаешь так: после переключения канала ввыдерживаешь таймаут (от 60 до 80 миллисекунд) и толкьо потом обрабатываешь картинку на BufferCB.
← →
WondeRu © (2004-08-26 12:54) [24]Анонимщик © (26.08.04 12:02) [23]
вроде ясно!) Попробую! завтра результат сообщу!
← →
ProtoStar (2004-08-30 18:49) [25]Можно поинтересоваться с какой целью пишется программа??.
← →
WondeRu © (2004-08-31 09:29) [26]ProtoStar (30.08.04 18:49) [25]
Можно поинтересоваться с какой целью пишется программа??.
можно! Пишется (уже написана) программа распознавания различных дефектов поверхности металлов в рантайм! Видеокамерой посмотрели, и тебе ответ "Типа классно сделали!!!" или "Уже пора выбрасывать железяку"!
написать-то написал, а в голову закралась мысль: "как сделать предпросмотр с 4-х камер?!" с тех пор и не вылазит оттуда!!! Может еще где пригодится!
Можно поинтересоваться, с какой целью Вы меня спрашиваете?
← →
Sapersky (2004-08-31 12:08) [27]можно! Пишется (уже написана) программа распознавания различных дефектов поверхности металлов в рантайм!
Для таких целей (если требуется одновременно изображение с нескольких камер) всё же лучше несколько карт, или карта с несколькими чипами.
Платная версия драйверов Ивана Ускова, как заявлено, может работать с несколькими картами на BT.
Или есть карта, называется Flying Stream (сам с ней работаю) - но но она довольно дорогая, $200 с одним входом. Там свой API, и момент поступления кадра определяется вполне конкретно.
Относительно синхронизации камер - у некоторых (например, охранных, т.н. CCTV) есть синхронизация по питанию, line lock. Не очень удобно, правда - при включении в другую розетку нужно перенастраивать.
← →
WondeRu © (2004-09-01 14:56) [28]Sapersky (31.08.04 12:08) [27]
может работать с несколькими картами на BT.
есть и бесплатные (по крайней мере для меня) версии!)
Да ладно, эта прога - пока только научная работа, а по заводам начну толкать только через год, когда универ закончу и еще одно НИИ подключу к работе!)
Sapersky (31.08.04 12:08) [27]
есть синхронизация по питанию
с этого места можно поподробнее с указанием производителей?
← →
Анонимщик © (2004-09-01 16:49) [29]Все такие дорогие, тебе действительно realtime нужен? Точнее, сколько тебе нужно кадров в секунду с каждого входа? А что касается api, то они встречаются и для не очень дорогих карточек, и для них, действительно, можно узнать, с какого канала кадр и въехала ли уже микросхема в синхронизацию.
← →
WondeRu © (2004-09-01 17:13) [30]Анонимщик © (01.09.04 16:49) [29]
realtime нужен
ага
WondeRu © (31.08.04 9:29) [26]
написать-то написал, а в голову закралась мысль: "как сделать предпросмотр с 4-х камер?!" с тех пор и не вылазит оттуда!!! Может еще где пригодится!
кадров? чем больше тем лучше! CCTV делать не собираюсь, боюсь не составлю конкуренции даже самарским фирмам!
← →
Sapersky (2004-09-01 17:38) [31]есть синхронизация по питанию
с этого места можно поподробнее с указанием производителей?
Ну вот, например:
http://www.akvilona.ru/brands/sanyo/description/mod000100010.htm
$140 вроде было... Можно найти дешевле (на том же сайте - KTC например), но в этой мне понравилось, что скорость затвора вручную менять можно - для разглядывания быстро движущихся предметов должно быть полезно, хотя ещё не пробовал. Опять же, есть подстройка синхронизации - сразу они совпадают весьма редко (у меня ни разу не совпали :)).
Но вообще лучше делать программу независимой от синхронизации. Тем более, если она нужна только для отображения (если я правильно понял).
А что касается api, то они встречаются и для не очень дорогих карточек, и для них, действительно, можно узнать, с какого канала кадр и въехала ли уже микросхема в синхронизацию.
Вообще да, уже после заказа FStream набрёл на сайт http://tuner.ixbt.com/ - там имеются примеры "прямой" работы с картами на BT.
← →
ProtoStar (2004-09-01 21:49) [32]Просто я пишу програмное обеспечение для собственного видео сервера (показ видео по расписанию, наложение титров, региональные вставки рекламы и т.п.)
← →
WondeRu © (2004-09-02 09:38) [33]Sapersky (01.09.04 17:38) [31]
как я понял, Вы занимаетесь CCTV, а какая контора?
ProtoStar (01.09.04 21:49) [32]
Просто я пишу програмное обеспечение для собственного видео сервера
в локальной сети или есть поддержка инета?
← →
Sapersky (2004-09-02 10:36) [34]Нет, я занимаюсь машинным зрением, измерением, точнее. Но по бедности использую оборудование CCTV (самая дешёвая промышленная камера, тот же Pulnix, стоит около $700).
← →
Анонимщик © (2004-09-02 11:45) [35]WondeRu
Ты вот пишешь, что тебе realtime нужен, а я не уверен, объяснил бы.
Sapersky
Ну и как успехи в зрении?
← →
Sapersky (2004-09-02 13:58) [36]Ну и как успехи в зрении?
Некоторые есть, скажем так :). Выставочная установка хотя и не очень стабильно, но работает и будет на следущей неделе выставляться в Москве. Но до практического внедрения ещё довольно далеко.
Система - измеритель брёвен на конвейере. Имеется 3 лазера перпендикулярно конвейеру, они создают на бревне черту, камеры, стоящие под углом, эту черту фиксируют, затем программа "склеивает" полный профиль бревна, а поскольку бревно едет, получаем в результате его 3D-модель.
Одна из самых сложных проблем - как (и можно ли в принципе) откалибровать камеры по цилиндру, положенному на место бревна (т.е. по окружности, точнее, каждая камера видит полуокружность). Сейчас использую в качестве калибра классическую сетку (чёрные квадратики) и калибрую по Tsai, но в производственных условиях это неудобно.
Ранее здесь этот вопрос не задавал, считая, что бесполезно... но сейчас воспользуюсь случаем :)
← →
Sapersky (2004-09-02 14:23) [37]Вполне возможно, в скором будущем мне тоже придется делать что-то подобное
← →
Анонимщик © (2004-09-02 14:24) [38]Это был мой пост, извини
← →
WondeRu © (2004-09-03 08:42) [39]Анонимщик © (02.09.04 11:45) [35]
Ты вот пишешь, что тебе realtime нужен, а я не уверен, объяснил бы.
реалтайм нужен для самообразования, а для оценки качества изделий - порядка 2 сек. ресчетов делается, так что реалтайм для моей текущей проги не нужен!)
но мы не стоим не месте: пока все алгоритмы на Делфи, планирую переписать спорные моменты на асм с использованием SSE и 3DNow!, но это когда алгоритмы полностью проработают! Оптимизация, как говорится, - в самую последнюю очередь!)
← →
WondeRu © (2004-09-03 08:45) [40]Sapersky (02.09.04 10:36) [34]
по бедности использую оборудование CCTV
такая же муть!
+ есть доступ свободный к оборудованию!
но по моему сугубо личному мнению лучше пользоваться (цена/качество) Computar или Pelco камерами!
Страницы: 1 2 вся ветка
Форум: "Media";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.031 c