powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вебкамера, получение фото по нажатию кнопки на камере
13 сообщений из 13, страница 1 из 1
Вебкамера, получение фото по нажатию кнопки на камере
    #39552274
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, добрый день!

Потребовалось написать программу для получения фото с вебкамеры по нажатию кнопки на ней.
Получить видеопоток и сохранить их него кадр программно проблем не составляет.
Опробовал и avicap32.dll и DSPack и ImageEn.

Но ни один из вышеперечисленных продуктов не умеет распознавать нажатие физической кнопки на камере.
Пример, ответ ImageEn: I'm sorry, it is not possible to handle webcam snapshot button.

В комплекте с камерой (Defender G2577) идёт бесплатная программа AMCap 9.00. Данная программа была модифицирована неким неизвестным умельцем для выполнения задачи получения фото. Исходников в интернете не нашел. В SDK микрософта данная программа(AMCap) может только записывать видео и нажатия кнопки игнорируются.
Нашел сайт разработчика AMCap, но даже в демке у него нет пункта "Capture Photo" и, следовательно, нажатия также игнорируются.

Пробовал посмотреть через Winspector, вдруг какое-то сообщение прилетает и делается фотка - получил только сообщение WM_Command 59 в момент нажатия кнопки на камере.

Пробовал через ProcessMonitor - AMCap обращается в реестре к драйверу {6BDD1FC6-810F-11D0-BEC7-08002BE2092F} и всё :(

Может быть кто-то уже сталкивался с подобной задачей?

Может быть есть ещё способы понять что происходит в момент нажатия кнопки?

Спасибо!
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552280
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,
В DirectShow и VFW такого точно нет, можешь не искать.
Вроде бы WIA предоставляет такую возможность, сам не пробовал.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552283
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

WIA предоставляет, но камера не определяется как WIA :(

TWAIN также не работает http://delphitwain.sourceforge.net/
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552303
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частные какие-то решения, я так понимаю. Сырцов под линукс нет случаем? Там всё более открытое, как правило.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552317
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может камера моргает или звук издает при нажатии? :-) Да и сама камера может с "секретом" и через аудио-видео поток инфо передает.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552318
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2KWIA предоставляет, но камера не определяется как WIA :( Ясно.
Скорее всего, недокументированная фича драйвера.
Обратись к производителю камеры, может у них что-то есть.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552324
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дизассемблер еще поможет типа OLLYDBG (или более серьезных штук) -- если код небольшой, то в можно без проблем увидеть все нужные вызовы. Вряд ли та видео-утилита хоть как-то была защищена от дебага, так что сложностей быть не должно с анализом.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552329
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

Уже написал. Но, что-то мне подсказывает, что ответа не будет.

Камера работает через стандартный драйвер usbvideo.sys
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552342
NIK.2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы проверил, сколько устройств появляется при подключении камеры.
Возможно, кнопка это отдельное устройство...
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552348
NIK.2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e7563e45-de60-482e-b921-a3074d122dff/usbvideosys-support-for-interrupt-endpoint?forum=wdk

Говорят, что надо ловить события KSEVENTSETIP_VidcapNotify. Должен срабатывать тригер: KSEVENT_VIDCAPTOSTI_EXT_TRIGGER
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39552407
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NIK.2017,

Спасибо, полез копаться :)
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39553080
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После суток копания в говнах интернетах решение было найдено в SDK DirectX9. В блоке DirectShow была краткая заметка о том, что если у камеры есть кнопка, то в системе есть триггер и к нему можно обратиться средствами DirectShow.
За основу тестового проекта был взят DSPack аж 2006 года выпуска. На удивление он легко встал на Seattle и без проблем позволил выполнить исходную задачу :) Основа - демка videocap

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
var
//сноска из SDK DIrectX
//The IAMVideoControl interface enables you to flip a picture horizontally and/or vertically, set up a stream so it can capture from an //external trigger (such as a camera button that the user pushes), simulate an external trigger in software, and list the available frame //rates. 

//Use this interface when your application runs on hardware that is capable of flipping and external triggering.


  AMVideoControl: IAMVideoControl; 
  PinList: TPinList;
  i: integer;
  hr:HRESULT;
  ip:IPin;
begin
  // Activate the filter graph, at this stage the source filters are added to the graph
  CaptureGraph.Active := true;

  // configure output Video media type
  if VideoSourceFilter.FilterGraph <> nil then
  begin
    PinList := TPinList.Create(VideoSourceFilter as IBaseFilter);
    try   // подсоединились к IAMVideoControl
      VideoSourceFilter.QueryInterface(IID_IAMVideoControl, AMVideoControl);
      // ищем пин позволяющий делать still изображения
      (CaptureGraph as IcaptureGraphBuilder2).FindPin(VideoSourceFilter,PINDIR_OUTPUT,@PIN_CATEGORY_STILL,0,False,0,ip);
      //задаем пину настройку срабатывать по внешнему триггеру
      AMVideoControl.SetMode(ip,VideoControlFlag_Trigger);

      if VideoFormats.ItemIndex <> -1 then
        begin
          with (PinList.First as IAMStreamConfig) do
            SetFormat(VideoMediaTypes.Items[VideoFormats.ItemIndex].AMMediaType);
        end;
    finally
      PinList.Free;
    end;
  end;

  // now render streams
  with CaptureGraph as IcaptureGraphBuilder2 do
  begin 
   //для того, чтобы отобразить still данные мначала мы должны получить поток либо через превью либо через capture
    if VideoSourceFilter.BaseFilter.DataLength > 0 then
      RenderStream(@PIN_CATEGORY_PREVIEW, 
                   nil,
                   VideoSourceFilter as IBaseFilter,
                   nil,
                   VideoWindow as IBaseFilter); // showing preview
   // передаем полученное изображение 
      hr:=RenderStream(@PIN_CATEGORY_STILL,
                       nil,
                       VideoSourceFilter as IBaseFilter,
                       nil,
                       SampleGrabber1 as IBaseFilter //transferring data to SampleGrabber1
                       );
  end;
  CaptureGraph.Play;

..........
// получили - сохранили :)
procedure TMainForm.SampleGrabber1Buffer(sender: TObject; SampleTime: Double;
  pBuffer: Pointer; BufferLen: Integer);
var
  bmp:TBitmap;
begin
  if CallBack.Checked then
  begin
    bmp:=TBitmap.Create;
    try
      bmp.Width:=1640;
      bmp.Height:=1480;
      SampleGrabber1.GetBitmap(bmp, pBuffer, BufferLen);
      bmp.SaveToFile('d:\Capt.bmp');
      Image.Canvas.Lock;
      Image.Picture.Assign(bmp);
    finally
      Image.Canvas.Unlock;
      FreeAndNil(bmp);
    end;
  end;
end;



Исходники приложил.
...
Рейтинг: 0 / 0
Вебкамера, получение фото по нажатию кнопки на камере
    #39553136
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всегда говорил, что в Delphi отличная обратная совместимость. Рад, что всё получилось :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вебкамера, получение фото по нажатию кнопки на камере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]