Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 809

/ вопрос открыт /

Здрасте. Вы уже не раз мне помогли, за что Вам сильно благодарен.!!!
А у меня тут новая проблемка. Помогите и в этот раз плз = )

Суть проги: с камеры тяну видеопоток. Из него вихватываю картинку, через пару секунд еще одну. Картинки сравниваются по пикселям. Если не похожие - тогда сигнализируется про движение.
Короче такая сигнализация =)

Дальше выдам код и прицеплю исходник.
1.Вот проблемы: Не показывает устройства при выборе.
2. В модуле DSPack бьет ерором в строке
hr := SampleGrabber.GetConnectedMediaType(MediaType);
подозреваю что это изза первой проблемы.

И наверное еще есть. Помогите разобратся. Надо прогу до ума довести.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, DSPack, DSUtil, DirectShow9, ExtCtrls;
  8.  
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. FilterGraph1: TFilterGraph;
  13. Filter1: TFilter;
  14. SampleGrabber1: TSampleGrabber;
  15. VideoWindow1: TVideoWindow;
  16. Button1: TButton;
  17. Button2: TButton;
  18. CheckBox1: TCheckBox;
  19. ComboBox1: TComboBox;
  20. Timer1: TTimer;
  21. Image1: TImage;
  22. Image2: TImage;
  23. Memo1: TMemo;
  24. procedure FormCreate(Sender: TObject);
  25. procedure ComboBox1Change(Sender: TObject);
  26. procedure Button1Click(Sender: TObject);
  27. procedure Button2Click(Sender: TObject);
  28. procedure CheckBox1Click(Sender: TObject);
  29. procedure Timer1Timer(Sender: TObject);
  30.  
  31. private
  32. { Private declarations }
  33. public
  34. { Public declarations }
  35. end;
  36.  
  37. var
  38. Form1: TForm1;
  39. VideoDevice: TSysDevEnum;
  40. implementation
  41.  
  42. {$R *.dfm}
  43.  
  44.  
  45. procedure TForm1.Button1Click(Sender: TObject);
  46. begin
  47.  
  48. begin
  49. FilterGraph1.Play;
  50.  
  51. end
  52. else
  53. begin
  54. FilterGraph1.Stop;
  55.  
  56. end;
  57. end;
  58.  
  59.  
  60. procedure TForm1.Button2Click(Sender: TObject);
  61. begin
  62. SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
  63. end;
  64.  
  65. procedure TForm1.CheckBox1Click(Sender: TObject);
  66. begin
  67. if CheckBox1.Checked then Timer1.Enabled:=true
  68. else Timer1.Enabled:=false;
  69. end;
  70.  
  71. procedure TForm1.ComboBox1Change(Sender: TObject);
  72. begin
  73. FilterGraph1.ClearGraph;
  74. FilterGraph1.Active := false;
  75.  
  76. Filter1.BaseFilter.Moniker := VideoDevice.GetMoniker(ComboBox1.ItemIndex);
  77. FilterGraph1.Active := true;
  78.  
  79. with FilterGraph1 as ICaptureGraphBuilder2 do
  80. RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter, SampleGrabber1 as IBaseFilter, VideoWindow1 as IbaseFilter);
  81.  
  82. FilterGraph1.Play;
  83. Button1.Enabled:=True;
  84. end;
  85.  
  86.  
  87. procedure TForm1.FormCreate(Sender: TObject);
  88. var
  89. i: integer;
  90. begin
  91. VideoDevice:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  92. if VideoDevice.CountFilters > 0 then
  93. for i := 0 to VideoDevice.CountFilters - 1 do
  94. ComboBox1.Items.Add(VideoDevice.Filters[i].FriendlyName);
  95. end;
  96.  
  97. procedure TForm1.Timer1Timer(Sender: TObject);
  98. var
  99.  
  100. i:integer;
  101.  
  102. j:integer;
  103.  
  104. k:integer;
  105. r1,g1,b1:Byte;
  106. r2,g2,b2:Byte;
  107. FirstColor,SecondColor:Integer;
  108. Color:TColor;
  109. PriznakChange:byte;
  110. begin
  111.  
  112. if Timer1.Tag=0 then
  113. begin
  114. SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
  115. Timer1.Tag:=1;
  116. exit;
  117. end;
  118.  
  119. SampleGrabber1.GetBitmap(Image2.Picture.Bitmap);
  120. Timer1.Tag:=0;
  121. k:=0;
  122.  
  123. for i := 1 to Image1.Picture.Bitmap.Height do
  124. begin
  125. for j := 1 to Image1.Picture.Bitmap.Width do
  126. begin
  127. PriznakChange:=0;
  128.  
  129. FirstColor:=Image1.Picture.Bitmap.Canvas.Pixels[i,j];
  130.  
  131. r1:=GetRValue(FirstColor);
  132. g1:=GetGValue(FirstColor);
  133. b1:=GetBValue(FirstColor);
  134. SecondColor:=Image2.Picture.Bitmap.Canvas.Pixels[i,j];
  135. r2:=GetRValue(SecondColor);
  136. g2:=GetGValue(SecondColor);
  137. b2:=GetBValue(SecondColor);
  138.  
  139. if Abs(r1-r2)>20 then inc(PriznakChange);
  140. if Abs(g1-g2)>20 then inc(PriznakChange);
  141. if Abs(b1-b2)>20 then inc(PriznakChange);
  142.  
  143. if PriznakChange=3 then k:=k+1;
  144. Application.ProcessMessages;
  145. end;
  146. end;
  147.  
  148. if k>2000 then
  149. begin
  150.  
  151. Image2.Picture.Bitmap.SaveToFile('log\'+FormatDateTime('hhnnss',Now)+'.bmp');
  152. end;
  153. end;
  154. end.
  155.  
  156.  


hatecows Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: hatecows (статус: Посетитель)
Вопрос отправлен: 11 декабря 2010, 23:01
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 13 декабря 2010, 03:55; участников в обсуждении: 3.
hatecows

hatecows (статус: Посетитель), 12 декабря 2010, 00:41 [#1]:

в чем ошыбки то ? хоть что - то...
min@y™

min@y™ (статус: Доктор наук), 12 декабря 2010, 08:10 [#2]:

Цитата (hatecows):

в чем ошыбки то ? хоть что - то...

Ну и чего ты предлагаешь? Всем срочно встать с дивана, бежать в магазин покупать камеру, подключать эту камеру к компу, качать DSPack, устанавливать его, затем грузить твой код в Delphi и искать ошибку? Я правильно понял?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
hatecows

hatecows (статус: Посетитель), 12 декабря 2010, 14:52 [#3]:

Нет. Хотя бы код пролистать, может я там грубо чего напортачил.
Вадим К

Вадим К (статус: Академик), 12 декабря 2010, 17:50 [#4]:

начнем с простого - в системе определяется видео устройство или нет? Например в скайпе?
Галочка "подтверждения прочтения" - вселенское зло.
hatecows

hatecows (статус: Посетитель), 13 декабря 2010, 03:55 [#5]:

Да. Вебка работает.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.