Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/95: Рейтинг темы: голосов - 95, средняя оценка - 4.74
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1

Обработка изображения с веб камеры на предмет движущихся объектов\изменившихся пикселей

14.08.2012, 21:13. Показов 19789. Ответов 94
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Специально для тех кто долго дрючил свои мозги, перерыл пол гугля и нихрена не нашёл выкладываю готовый пример обработки изображения с веб камеры.

PureBasic
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#WM_CAP_START                          = #WM_USER
#WM_CAP_SET_CALLBACK_ERROR             = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_CAPCONTROL_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD             = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME             = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM       = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM        = #WM_CAP_START + 7
#WM_CAP_GET_STATUS                     = #WM_CAP_START + 54;-------------------
#WM_CAP_DRIVER_CONNECT                 =  #WM_USER + 10
#WM_CAP_DRIVER_DISCONNECT              =  #WM_USER + 11
#WM_CAP_DRIVER_GET_CAPS                = #WM_CAP_START + 14
#WM_CAP_DLG_VIDEOFORMAT                = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE                = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY               = #WM_CAP_START + 43
#WM_CAP_SET_PREVIEW                    = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE                = #WM_CAP_START + 52
#WM_CAP_GET_STATUS                     = #WM_CAP_START + 54
#WM_CAP_FILE_SAVEDIB                   =  #WM_USER + 25
#WM_CAP_SET_SCALE                      =  #WM_USER + 53
#WM_CAP_SET_CALLBACK_CAPCONTROL        = #WM_CAP_START + 85
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
Structure CAPSTATUS  ;Тут нас интересуют высота и ширина(первые две строчки)
  uiImageWidth.l 
  uiImageHeight.l 
  fLiveWindow.l 
  fOverlayWindow.l 
  fScale.l 
  ptScroll.Point 
  fUsingDefaultPalette.l 
  fAudioHardware.l 
  fCapFileExists.l 
  dwCurrentVideoFrame.l 
  dwCurrentVideoFramesDropped.l 
  dwCurrentWaveSamples.l 
  dwCurrentTimeElapsedMS.l 
  hPalCurrent.l 
  fCapturingNow.l 
  dwReturn.l 
  wNumVideoAllocated.l 
  wNumAudioAllocated.l 
EndStructure
 
CapStat.CAPSTATUS
 
Structure VIDEOHDR; в этой структуре первая строчка - кадр
  lpData.l
  dwBufferLength.l
  dwBytesUsed.l
  dwTimeCaptured.l
  dwUser.l
  dwFlags.l
  dwReserved.l[3]
EndStructure
 
Structure SBGR ;Цвета по байту на синий зелёный и красный считываемые из памяти далее
  b.b
  g.b
  r.b  
EndStructure
 
 
 
 
Global width     = 300
Global height    = 240
 
Global widthImg  = 0
Global heightImg = 0
 
Global Min       = 90
Global Max       = 110
 
Global Dim  B (0, 0);Объявление двух массивов, один для хранения старых данных, второй для записи в него результата
Global Dim  C (0, 0) ; Redim
 
 
 
Enumeration
  #STP         = 1;Шаг цикла. Если менять то надо в "*VideoMemoryAdress1 + 3" тройку умножать на шаг. Суть шага такова, что если он = 2 то скорость обработки увеличивается вдвое а качество тудаже уменьшается. 
  #Menu        = 1;Это всё про меню, оно для красоты
  #Menu_Device = 2
  #Menu_exit   = 3
  #Menu_Pause  = 4
EndEnumeration
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
Procedure FrameCallback(hWnd, *lpVHdr.VIDEOHDR);
  Protected *VideoMemoryAdress1.SBGR = *lpVHdr\lpData;Пошоль просесс
  Protected xn,yn, color, SA, SB
  For xn = heightImg - 1 To 0 Step - #STP
    For yn = 0 To widthImg - 1 Step #STP
      
      color = RGB(*VideoMemoryAdress1\r & $FF, *VideoMemoryAdress1\g & $FF,;считываем цвет *VideoMemoryAdress1\b & $FF)
      *VideoMemoryAdress1 + 3 ;перескакиваем на следующие 3 байта
      
      SA = color / 100;Один процент цвета 
      SB = B(yn, xn);Извлекаем цвет из предыдущего кадра, он в виде цифры в массиве
      B(yn, xn) = color;Присваиваем туда же новое значение, обновляя кадр
      If SA = 0 ; делить на 0 нельзя
        Shodstvo = 0
      Else
        Shodstvo =  SB / SA; Точка отсчёта равна ста процентам, а дальше дело техники, 110 мньше 100 на 10, 120 больше 100 на 20, чем больше разница - Shodstvo - 100, тем больше различий между пикселями в 2-х кадрах в одном и том же месте 
        If Shodstvo < 100 And shodstvo > Min Or Shodstvo > 100 And Shodstvo < Max
          С(yn, xn) = RGB(0, 0, 0))
        Else
          С(yn, xn) = color);Если ещё немного подшаманить и сдеать отрисовку результата а не присвоение значений элементам массива, то получим чёрный экран на котором будут видны только подвижные объекты. Хорошо фильтрует серую картинку, по тому что чем меньше диапазон значений, тем меньше разница между якобы похожими пикселями
        EndIf
      EndIf
      
    Next
  Next
 EndProcedure    
    
    
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
 
hWnd = OpenWindow(0, 0, 0, width + 4, height + 60, "", #PB_Window_SystemMenu| #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 
If CreateMenu(#Menu, WindowID(0))
  MenuTitle("Программа")
    MenuItem(#Menu_exit, "Выключить")
      MenuBar()
    MenuItem(#Menu_Pause, "?")
  MenuTitle("Настройки")
    MenuItem(#Menu_Device, "Сменить устройство")
EndIf
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
 
If OpenLibrary(0, "AVICAP32.DLL")
  hWebcam = CallFunction(0, "capCreateCaptureWindowA", 0, #WS_VISIBLE+#WS_CHILD, 2, 20, width, height, hWnd, 0)
  
  SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0);Подключаем устройство
  SendMessage_(hWebcam, #WM_CAP_SET_SCALE               , 1 , 0)
  SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE         , 50, 0)
  SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW             , 1 , 0)
  
  SendMessage_(hWebcam, #WM_CAP_GET_STATUS              , SizeOf(CAPSTATUS), CapStat);------------
  widthImg  = CapStat\uiImageWidth;Устанавливаем ширину
  heightImg = CapStat\uiImageHeight;высоту
  ReDim B(widthImg, heightImg);устанавливаем размеры массивов, чтоб всё соответсвовало всему
  ReDim C(widthImg, heightImg)
  SendMessage_(hWebcam, #WM_CAP_SET_CALLBACK_FRAME      , 0 , @FrameCallback());и получаем заветные кадры
  
  
  
;------------------------------------------------------------------------------------------------------------
  
  
 
Repeat
  
  Event = WindowEvent()
  Select Event
      
    Case #PB_Event_CloseWindow
      Break
      
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Menu_exit
          Break
          
          Case #Menu_Pause
            
          Case #Menu_Device
            
        EndSelect
      
  EndSelect
ForEver
  
  
  
  
;------------------------------------------------------------------------------------------------------------
  
  
  
  
  SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW       , 0, 0)
  SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, @"BLUBBER", 0)
  
  CloseWindow(0)
  CloseLibrary(0)
  
EndIf
 
End
Конец

Добавлено через 41 секунду
Там только надо память очищать чтоб не утекла.

Добавлено через 4 минуты
По остальным вопросам лазим тут: http://msdn.microsoft.com/en-u... s.85).aspx
тут: http://purebasic.ru/manual.php?id=1104&lng=rus
тут: http://www.google.ru/webhp?source=search_app
и здесь.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2012, 21:13
Ответы с готовыми решениями:

Обработка изображения(группировка пикселей)
Здравствуйте, почитал статью http://job-interview.ru/articles/post/362 и захотел реализовать тоже самое, но что-то не получилось. В чем...

Обработка изображения размером 800х600 пикселей
Здравствуйте,подскажите пожалуйста, что не так. Есть исходное изображение размером 800х600 пикселей. Вырезаю из него фрагмент и хочу...

Обработка изображения: поиск пикселей определённого цвета
Добрый вечер! Имеется такое задание: есть изображение, нужно найти пиксели определенного цвета и записать их координаты в массив. В...

94
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
03.09.2012, 12:36  [ТС]
Студворк — интернет-сервис помощи студентам
Давайте сделаем проще, проиллюстрирую, запустите прогу и листайте кнопочками вправо/влево
ну или колёсиком мыши, как вам удобнее и смотрите что происходит с байтом.
Этого оказалось достаточно. Очень наглядно.
В прочем я судил по таблице увиденной мной в интернете, в которой были числа от 0 до 15 в двоичном и шестнадцатеричном виде. Чтото видимо неправильно понял.
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
04.09.2012, 23:20  [ТС]
Пока не забыл поправлю.
Не
PureBasic
1
Rezult = R + G << 8 + B << 16 + A << 24
а
PureBasic
1
Rezult = R + G << 7 + B << 15 + A << 23
Или снова не прав?
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
04.09.2012, 23:25  [ТС]
И вот что плучается...
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure FrameCallback (hWnd, *lpVHdr.VIDEOHDR)
  
  StartDrawing(ImageOutput(ImgOld))
  *Dbuf = DrawingBuffer()
  StopDrawing()
  *CamBuf = *lpVHdr\lpData
  
  For n=0 To  widthImg*heightImg - 100
    R = PeekB(*CamBuf): *CamBuf + 1        
    G = PeekB(*CamBuf): *CamBuf + 1        
    B = PeekB(*CamBuf): *CamBuf + 1 
    
    PokeB(*Dbuf, R << 15) 
    PokeB(*Dbuf, G << 7)
    PokeB(*Dbuf, B) 
    *Dbuf + 3  
  Next
  
  SetGadgetState(1, ImageID(ImgOld))
 EndProcedure
Миниатюры
Обработка изображения с веб камеры на предмет движущихся объектов\изменившихся пикселей  
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
05.09.2012, 17:23
Или снова не прав?
Да, вы снова не правы.

По вашему коду, давайте всё таки сделаем по-человечески:
  1. не PeekB, а PeekA
  2. Устаканим разрешение, возьмём его чётко функцией библиотеки, ничего не будем прибавлять сами.
    Разрешение Image = Разрешению Web-камеры
  3. определим тип переменных R,G,B явно
  4. сдвиг битов вернём на место как было указано в формуле.
  5. сделаем запись в Image через PokeL, т.к. в Image на 1 пиксель идёт 4 байта, если не указано иначе.
  6. +после всего вышеперечисленного, при неудаче попытаемся читать по 4 байта.

И после этого уже посмотрим, что делать дальше.
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
05.09.2012, 19:30  [ТС]
PureBasic
1
2
Или снова не прав?
Да, вы снова не правы.
К сожалению я это слишком поздно осознал без вашей помощи. На фоне сонливости прям ёкнуло в голову что ноль в 16-ти тоже символ и тоже считается за один шаг.
PureBasic
1
не PeekB, а PeekA
Но всёж.. Как я понял от -128 остаётся + 128, ведь там быть должен ноль, а не 128? 0 0 0 = чёрный пиксель, 128,128,128 = серый.
PureBasic
1
2
Устаканим разрешение, возьмём его чётко функцией библиотеки, ничего не будем прибавлять сами.
Разрешение Image = Разрешению Web-камеры
Именно так я в коде и делал, если не обломит, глянь процедуру Resizer() в коде, но если брать 320х240 как возвращается библиотечной функцией и использовать в циклах то это выход вроде на 306 байт за пределы размера буфера вебкамеры и как следствие ошибка доступа к памяти.
PureBasic
1
определим тип переменных R,G,B явно
К сожалению ниразу не встречал такое понятие определения переменных. Это как?
PureBasic
1
сдвиг битов вернём на место как было указано в формуле.
Сдвиг - согласен, что не 15, 7, 0 а 16, 8, 0 байт сдвига, но вот формула адреса пикселя - она переворачивает картинку, это не нужно. Шаг на 3 байта вперёд в *Dbuf идёт после записи со сдвигом, я предполагаю что шаг идёт вправо, а сдвиг влево если представить буфер последовательностью байт с нумерацией\направлением слева на право, то не будет ли влиять правильность положения пикселя при записи байт в буфер, ведь если слева на право идёт шаг, то сначала должен идти шаг а потом сдвиг байт ибо некуда иначе их двигать.
PureBasic
1
сделаем запись в Image через PokeL, т.к. в Image на 1 пиксель идёт 4 байта, если не указано иначе.
Ещё раз пожалуйста объясни, почему 4 байта? Image не 24 битный по умолчанию и содержит альфу?(в примере ты битность картинки вручную указал, что вроде не обязательно, а я так и не понял зачем)
PureBasic
1
+после всего вышеперечисленного, при неудаче попытаемся читать по 4 байта.
А смысл? Если исходная артинка выдаёт чёрный цвет -128 16 -128 / 16 -128 16 \ -128 16 -128, на каждый пиксель а я до сих пор не пойму почему мне утверждают что камера должна в буфере иметь беззнаковые значения(да ещё и функции преобразуют то что должно быть 0 в 128), как, и не слишком ли геморно будет вычислять соответствует ли полученный цвет задуманному.

В принципе можно забить йух(пардон) и юзать буфер обмена, так как знания о том как работать с памятью растут, а толку нету(не рентабельно), но таки интересно же.


Добавлено через 2 минуты
определим тип переменных R,G,B явно
К сожалению ниразу не встречал такое понятие определения переменных. Это как?
Туплю. указать тип после точки. Въехал.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
05.09.2012, 20:40
в примере ты битность картинки вручную указал, что вроде не обязательно, а я так и не понял зачем
Читаем справку:
Если параметр 'Depth' не установлен и применена #PB_Image_DisplayFormat, то глубина цвета полученного изображения будет соответствовать десктопу.
Вот это мне нафиг не надо, потому и ставлю сам.
Не хочу чтобы структура менялась самопроизвольно по причинам мне не ведомым.

Именно так я в коде и делал, если не обломит, глянь процедуру Resizer() в коде, но если брать 320х240 как возвращается библиотечной функцией и использовать в циклах то это выход вроде на 306 байт за пределы размера буфера вебкамеры и как следствие ошибка доступа к памяти.
Повод проанализировать циклы.
Давайте не будем выпендриваться напишем двойной цикл, одинарный пишется тогда,
когда вы знаете ВСЕ форматы на 100%.

Но всёж.. Как я понял от -128 остаётся + 128, ведь там быть должен ноль, а не 128? 0 0 0 = чёрный пиксель, 128,128,128 = серый.
Я даже не хочу это обсуждать, вам любой человек скажет, что когда идёт работа с цветом
используются беззнаковые переменные. Хотите баги и непонятки - ради бога.
1
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
05.09.2012, 21:27  [ТС]
Я даже не хочу это обсуждать, вам любой человек скажет, что когда идёт работа с цветом
используются беззнаковые переменные. Хотите баги и непонятки - ради бога.
Не сомневаюсь. Только как дебагер мне показывает отрицательные значения? Используются то оно одно, тут было писано что в буфере значения не могут быть отрицательными, хрен с ним я принял за истину, объясни один раз - почему у меня дебагер показывает отрицательные числа, почему дизъюнкция или как её там (& 255) выдаёт 128 на месте -128, если должно быть беззнаковое число в диапазоне от 0 до 255 а именно ноль если -128 минимальное значение цвета, а именно в картинке выдаваемой в качестве заставки маленький рисунок на чёрном фоне и первые значения всех цветов минимальные. Я уже запарился смотреть на доказательства работы с беззнаковыми числами вместо желаемого объяснения причины неправильного считывания данных, если не названа иная причина, это при том что было сказано, не помню кем "Всё отлично работает, картинка отрисовывается!" - замешательство и сомнения уже добивают и выражения всё грубее.
Пробовал конкретно именно твой пример впихнуть в код и пришёл к выводу - не работает. Очевидной причины к неработоспособности нет, так как всё по инструкции тобой любезно предоставленной.

За опыт спасибо, ответь пожалста на вопрос, а продолжать тему не имеет смысла, по тому что то ли я тупой, то ли железка меня обманывает. Ну не суть. Заюзаю буфер и поимею профит раньше чем обуздаю причину.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,073
Записей в блоге: 7
05.09.2012, 21:32
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
Только как дебагер мне показывает отрицательные значения?
Потому что есть знаковые и беззнаковые переменные. http://purebasic.com/documenta... ables.html
В данном случае, нужна беззнаковая переменная.
Про все это уже писали выше.
PureBasic
1
2
3
4
5
x=200
y.b=x
z.a=x
Debug y
Debug z
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
05.09.2012, 22:45
Очевидной причины к неработоспособности нет, так как всё по инструкции тобой любезно предоставленной.
Понимаете в чём дело, формат вы не знаете, я это всё проверить ну никак не могу,
во-первых нету у меня этой злощастной dll-ки AVICAP32.dll, во-вторых нету web-камеры.
В том посте я вам только рассказал как нужно всё это дело нащупывать и полностью описал
формат хранения данных в Image, т.к. я его знаю, вам лишь остаётся сделать всё точ в точ.
Взять параметры вашей камеры функцией библиотеки, ничего к ним не добавляя, по аналогичным
формулам расчитать позиции строк и скопировать пиксели согласно форматам.
Возможных форматов хранения не так много, можно нащупывать по R,G,B, подносите к камере
синий предмет так чтобы всё изображение с камеры было синим смотрите какие байты имеют
наибольшее значение, запоминаете номер(в самом первом пикселе) и расстояние между ними,
номер - это будет позиция компоненты B, расстояние - вы сразу узнаете сколько байт на пиксель.
Дальше смотрим позиции R и G, поднося к камере соотв. цвета предметы и всё. Дело 20-ти минут.
Идём дальше, если получили проблемы несоответствия разрешения камеры, то восстанавливаем
изображение с камеры, варьируя длину горизонтальной строки пикселей, потом читаем доку по dll
и если проблема не решилась - выкидываем либо dll-ку, либо web-камеру.

"Всё отлично работает, картинка отрисовывается!" - замешательство и сомнения уже добивают и выражения всё грубее.
Вы можете пожаловаться модераторам, они всё почистят, где увидят хамство и грубость,
нарушителю дадут предупреждение. В правилах форума все абилити юзера указаны.

Только как дебагер мне показывает отрицательные значения?
Конечно, вы ведь берёте функцией PeekB и по умолчанию всё это дело засовывается в тип Integer.
Засовывается по значению, а не по прямому копированию битов, для этого типы и нужны, чтобы
маш. код строился для работы именно со значением переменных.
Может книжка по информатике + справка по диалекту всё таки лучше чем форум? Серьёзно говорю...

Добавлено через 11 минут
а продолжать тему не имеет смысла, по тому что то ли я тупой, то ли железка меня обманывает.
Пенять себя бессмысленно, работоспособность железки и её параметры проверяем в
других программах.
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
05.09.2012, 23:35  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Потому что есть знаковые и беззнаковые переменные. http://purebasic.com/documenta... ables.html
В данном случае, нужна беззнаковая переменная.
Про все это уже писали выше.
PureBasic
1
2
3
4
5
x=200
y.b=x
z.a=x
Debug y
Debug z
Окей, это я усвоил, что они есть в наличии и что нужны беззнаковые.

Добавлено через 12 минут
Понимаете в чём дело, формат вы не знаете, я это всё проверить ну никак не могу,
во-первых нету у меня этой злощастной dll-ки AVICAP32.dll, во-вторых нету web-камеры.
В том посте я вам только рассказал как нужно всё это дело нащупывать и полностью описал
формат хранения данных в Image, т.к. я его знаю, вам лишь остаётся сделать всё точ в точ.
Взять параметры вашей камеры функцией библиотеки, ничего к ним не добавляя, по аналогичным
формулам расчитать позиции строк и скопировать пиксели согласно форматам.
Возможных форматов хранения не так много, можно нащупывать по R,G,B, подносите к камере
синий предмет так чтобы всё изображение с камеры было синим смотрите какие байты имеют
наибольшее значение, запоминаете номер(в самом первом пикселе) и расстояние между ними,
номер - это будет позиция компоненты B, расстояние - вы сразу узнаете сколько байт на пиксель.
Дальше смотрим позиции R и G, поднося к камере соотв. цвета предметы и всё. Дело 20-ти минут.
Идём дальше, если получили проблемы несоответствия разрешения камеры, то восстанавливаем
изображение с камеры, варьируя длину горизонтальной строки пикселей, потом читаем доку по dll
и если проблема не решилась - выкидываем либо dll-ку, либо web-камеру.
Отзывчивость крайне похвальна. Прям робингуд, собравший знание и раздающий на это дело бедным.

Вы можете пожаловаться модераторам, они всё почистят, где увидят хамство и грубость,
нарушителю дадут предупреждение. В правилах форума все абилити юзера указаны.
Та ну. Мне показалось что с моей стороны появилась резкость в высказываниях. Именно это я имел в виду.

Конечно, вы ведь берёте функцией PeekB и по умолчанию всё это дело засовывается в тип Integer.
Засовывается по значению, а не по прямому копированию битов, для этого типы и нужны, чтобы
маш. код строился для работы именно со значением переменных.
Может книжка по информатике + справка по диалекту всё таки лучше чем форум? Серьёзно говорю...
Книжки по информатике не люблю. 4 года меня этой чепухой кормили, а толку как видиш не особо много, даже если учесть сколько я интернета перерыл в поисках знаний уже после учёбы. Только форум и порадовал такими людьми как ты. По больше бы такого народу и быдлокодеры подались бы в профессионалы.

На этом пожалуй давайте и закончим.
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
11.09.2012, 20:33  [ТС]
Пофиг. Может кому пригодится.

PureBasic
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#WM_CAP_START                     = #WM_USER 
#WM_CAP_SET_CALLBACK_ERROR        = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_STATUS       = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD        = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME        = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM  = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM   = #WM_CAP_START + 7 
#WM_CAP_DRIVER_CONNECT            =  #WM_USER + 10
#WM_CAP_DRIVER_DISCONNECT         =  #WM_USER + 11
#WM_CAP_DRIVER_GET_CAPS           = #WM_CAP_START + 14 
#WM_CAP_DLG_VIDEOFORMAT           = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE           = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY          = #WM_CAP_START + 43 
#WM_CAP_SET_PREVIEW               = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE           = #WM_CAP_START + 52
#WM_CAP_GET_STATUS                = #WM_CAP_START + 54 
#WM_CAP_FILE_SAVEDIB              =  #WM_USER + 25
#WM_CAP_SET_SCALE                 =  #WM_USER + 53 
#WM_CAP_SET_CALLBACK_CAPCONTROL   = #WM_CAP_START + 85
 
Enumeration
  #STP         = 1
  #Menu        = 1
  #Menu_Device = 2
  #Menu_exit   = 3
  #Menu_Stop   = 4
  #Menu_Start  = 5
EndEnumeration
 
;------------------------------------------------------------------------------------------------------------
Global width     = 320
Global height    = 240
Global Min       = 10
Global Max       = 190
Global Dim Old(320, 240)
 
Fon = CreateImage(#PB_Any, 320, 240)
 
;------------------------------------------------------------------------------------------------------------
 
 Procedure DriverConnect    (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0)
 EndProcedure 
 
 Procedure SetScale         (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_SCALE               , 1 , 0)
 EndProcedure
 
 Procedure SetPreviewrate   (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_PREVIEWRATE         , 50, 0)
 EndProcedure
 
 Procedure SetPreview       (hWebcam, Param)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_PREVIEW             , Param , 0)
 EndProcedure
 
 Procedure DriverDisconnect (hWebcam)
   SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
 EndProcedure 
 
 Procedure GetFrame         (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_EDIT_COPY                ,0,0)
 EndProcedure  
 
 Procedure Work(Img)
   StartDrawing(ImageOutput(IMG))
   ResizeImage(img, 320, 240)
   For x = 0 To 320 - 1 Step 1    
     For y = 0 To 240 - 1 Step 1
       
       color = Point(x, y)
       Procent.f = Old(x, y) / 100
       If Procent > 0
         Shodstvo.f = color / Procent
         If Shodstvo > Min And Shodstvo < Max
           Plot(x, y, 0)  
         Else
           Plot(x, y, color); Подсвеиваем подвижности
           ;Plot(x, y, RGB(Red(255), Green(color), Blue(color)))
         EndIf
       Else
       Plot(x, y, 0)  
       EndIf
       Old(x, y) = color
       
     Next
   Next
   StopDrawing()
 EndProcedure
 
;------------------------------------------------------------------------------------------------------------
 
hWnd = OpenWindow (0, 0, 0, width + 50, height, "", #PB_Window_SystemMenu| #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
SetWindowColor(0, RGB(0,0,0))
If CreateMenu (#Menu, WindowID (0))
  MenuTitle("Программа")    
  MenuItem (#Menu_Stop,   "Стоп")
  MenuItem (#Menu_Start,  "Старт")
  MenuBar  ()
  MenuItem (#Menu_exit,   "Выключить")
  MenuTitle("Настройки")
  MenuItem (#Menu_Device, "Сменить устройство")
EndIf
 
ImageGadget(1, 50, 0, width, height, ImageID(Fon))
 
;------------------------------------------------------------------------------------------------------------
 
If OpenLibrary (0, "AVICAP32.DLL")
  hWebcam = CallFunction (0, "capCreateCaptureWindowA", 0, #WS_VISIBLE + #WS_CHILD, 0, 0, 50, 40, hWnd, 0)
  
  Stat = DriverConnect    (hWebcam)
  SetScale         (hWebcam)
  SetPreviewrate   (hWebcam)
  SetPreview       (hWebcam, 1)
 
  ;------------------------------------------------------------------------------------------------------------
 
  Repeat
    If Stat <> 0
      GetFrame(hWebcam)
      NewIMG = GetClipboardImage(#PB_Any)
        ClearClipboard()
        Work(NewIMG)
        SetGadgetState(1, ImageID(NewIMG))
        FreeImage(NewIMG)
    EndIf
    
    Event = WindowEvent ()
    Select Event
        
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Menu
        Select EventMenu ()
            
          Case #Menu_exit
            Break
            
          Case #Menu_Start
            DriverConnect    (hWebcam)
            SetScale         (hWebcam)
            SetPreviewrate   (hWebcam)
            SetPreview       (hWebcam, 1)
            
          Case #Menu_Stop
            SetPreview       (hWebcam, 0)
            DriverDisconnect (hWebcam)
            
          Case #Menu_Device
            SendMessage_     (hWebcam, #WM_CAP_DLG_VIDEOSOURCE, 0, 0)
            
        EndSelect
        
    EndSelect
  ForEver
 
;------------------------------------------------------------------------------------------------------------
 
SetPreview       (hWebcam, 0)
DriverDisconnect (hWebcam)
CloseWindow      (0)
CloseLibrary     (0)
 
EndIf
 
End
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
12.09.2012, 07:38
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
Пофиг. Может кому пригодится.
От чего ушли, к тому и пришли
Ты расскажи мне точную конфигурацию своих мучений с камерой:
-Точная версия PB и разрядность
-Версия ОС и разрядность
-Оригинальное разрешение камеры( по паспорту) и фактически по настройкам ( в системе)

Может удастся воспроизвести на досуге и поковырять.
Просто у меня нет таких заморочек, потому и не помогал.
1
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
12.09.2012, 22:16  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
От чего ушли, к тому и пришли
Ты расскажи мне точную конфигурацию своих мучений с камерой:
-Точная версия PB и разрядность
-Версия ОС и разрядность
-Оригинальное разрешение камеры( по паспорту) и фактически по настройкам ( в системе)

Может удастся воспроизвести на досуге и поковырять.
Просто у меня нет таких заморочек, потому и не помогал.
Ясное дело пришли, не осилил так буду использовать что имею пока не пойму как это использовать. Торопиться в освоении незачем.

Точная версия и разрядность => PureBasic 4.60 (Windows - x86)
Версия ОС и разрядность => Windows 7 Домашняя базовая (х64)
Оригинальное разрешение камеры( по паспорту) и фактически по настройкам ( в системе) - хз. Паспорта на встроенную в ноут вебку я ниразу в жизни не встречал и не хочется заморачиваться. Судя по получаемому из буфера изображению и возвращаемому капстатусом значению разрешение по умолчанию 320х240 пикселей, число байт в видеобуфере на кадр 270х190х3. Боле пока сказать не могу.
Занимает тот факт, что при разложении считанного байта(именно байта) в переменную с типом лонг на цветовые РГБ составляющие, перемене их местами для сложения в цвет и записи обратно туда же от куда было считано в соответствии с примером(указывать на который не хочется), окно предпросмотра выдаёт правильно изменённую картинку.
Я вообще от того в замешательстве, что считать, поменять местами цвета и записать обратно могу, но сделать ещё что либо помимо этого - нет.
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
15.09.2012, 15:16  [ТС]
Код, который уже показывает изображение в двое лучше. ошибка была в циклах - из за неправильного расчёта положения байт получалась там гофра углеродная. Теперь уже можно разобрать что камера показывает, но есть ещё вопрос в правильности циклов считывания видеобуфера.
В общем у кого есть опыт и идеи, делитесь.
PureBasic
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#WM_CAP_START                          = #WM_USER
#WM_CAP_SET_CALLBACK_ERROR             = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_CAPCONTROL_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD             = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME             = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM       = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM        = #WM_CAP_START + 7
#WM_CAP_GET_STATUS                     = #WM_CAP_START + 54
#WM_CAP_DRIVER_CONNECT                 =  #WM_USER     + 10
#WM_CAP_DRIVER_DISCONNECT              =  #WM_USER     + 11
#WM_CAP_DRIVER_GET_CAPS                = #WM_CAP_START + 14
#WM_CAP_DLG_VIDEOFORMAT                = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE                = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY               = #WM_CAP_START + 43
#WM_CAP_SET_PREVIEW                    = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE                = #WM_CAP_START + 52
#WM_CAP_GET_STATUS                     = #WM_CAP_START + 54
#WM_CAP_FILE_SAVEDIB                   =  #WM_USER     + 25
#WM_CAP_SET_SCALE                      =  #WM_USER     + 53
#WM_CAP_SET_CALLBACK_CAPCONTROL        = #WM_CAP_START + 85
 
Enumeration
  #STP         = 1
  #Menu        = 1
  #Menu_Device = 2
  #Menu_exit   = 3
  #Menu_Stop   = 4
  #Menu_Start  = 5
EndEnumeration
 
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
 
Structure CAPSTATUS 
  uiImageWidth.l 
  uiImageHeight.l 
  fLiveWindow.l 
  fOverlayWindow.l 
  FSCALE.l 
  ptScroll.Point 
  fUsingDefaultPalette.l 
  fAudioHardware.l 
  fCapFileExists.l 
  dwCurrentVideoFrame.l 
  dwCurrentVideoFramesDropped.l 
  dwCurrentWaveSamples.l 
  dwCurrentTimeElapsedMS.l 
  hPalCurrent.l 
  fCapturingNow.l 
  dwReturn.l 
  wNumVideoAllocated.l 
  wNumAudioAllocated.l 
EndStructure
 
Stat.CAPSTATUS
 
Structure VIDEOHDR
  lpData.l
  dwBufferLength.l
  dwBytesUsed.l
  dwTimeCaptured.l
  dwUser.l
  dwFlags.l
  dwReserved.l[3]
EndStructure 
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
Global width     = 320
Global height    = 240
Global widthImg  = 0
Global heightImg = 0
Global Min       = 90
Global Max       = 110
 
ImgOld = CreateImage(0, 1, 1)
 
 
 
;------------------------------------------------------------------------------------------------------------
 
 
  
 Procedure FrameCallback (hWnd, *lpVHdr.VIDEOHDR)
  
  StartDrawing(ImageOutput(ImgOld))
  *Dbuf = DrawingBuffer()
  StopDrawing()
  *CamBuf = *lpVHdr\lpData
  
  For x = 0 To widthImg - 1
    For y = 0 To heightImg - 1 Step 4
      n = (widthImg * x) + y      
      Color = PeekL(*CamBuf + n)       
      PokeL(*Dbuf + n, Color)
    Next
  Next
  
  SetGadgetState(1, ImageID(ImgOld))
 EndProcedure 
 
 
 Procedure DriverConnect    (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0)
 EndProcedure 
 
 
 
 Procedure SetScale         (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_SCALE               , 1 , 0)
 EndProcedure
 
 
 
 Procedure SetPreviewrate   (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_PREVIEWRATE         , 50, 0)
 EndProcedure
 
 
 
 Procedure SetPreview       (hWebcam, Param)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_PREVIEW             , Param , 0)
 EndProcedure
 
 
 
 Procedure DriverDisconnect (hWebcam)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_DRIVER_DISCONNECT       , 0, 0)
 EndProcedure
 
 
 
 Procedure GetStatus        (hWebcam, *CapStat.CAPSTATUS)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_GET_STATUS              , SizeOf (CAPSTATUS)*4, *CapStat)
 EndProcedure
 
 
 
 Procedure CapCallbackFrame (hWebcam, *FrameCallback)
   ProcedureReturn  SendMessage_ (hWebcam, #WM_CAP_SET_CALLBACK_FRAME      , 0 , @FrameCallback ())
 EndProcedure
 
 
 
 Procedure Resizer          (*CapStat.CAPSTATUS)
   widthImg  = *CapStat\uiImageWidth ;320
   heightImg = *CapStat\uiImageHeight;240
   ResizeImage(ImgOld,  widthImg, heightImg)
 EndProcedure
  
 
 
;------------------------------------------------------------------------------------------------------------
 
 
 
hWnd = OpenWindow (0, 0, 0, width + 4, height + 60, "", #PB_Window_SystemMenu| #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 
If CreateMenu (#Menu, WindowID (0))
  MenuTitle("Программа")    
  MenuItem (#Menu_Stop,   "Стоп")
  MenuItem (#Menu_Start,  "Старт")
  MenuBar  ()
  MenuItem (#Menu_exit,   "Выключить")
  MenuTitle("Настройки")
  MenuItem (#Menu_Device, "Сменить устройство")
EndIf
 CreateImage(9, 320,240)
 ImageGadget(1,50,0, width, height,ImageID(9))
 
;------------------------------------------------------------------------------------------------------------
 
 
 
 
If OpenLibrary (0, "AVICAP32.DLL")
  hWebcam = CallFunction (0, "capCreateCaptureWindowA", 0, #WS_VISIBLE + #WS_CHILD, 0, 0, 50, 40, hWnd, 0)
  
  a = DriverConnect    (hWebcam)
  b = SetScale         (hWebcam)
  c = SetPreviewrate   (hWebcam)
  d = SetPreview       (hWebcam, 1)
  e = GetStatus        (hWebcam, @CapStat)
  f = Resizer          (@CapStat)
  g = CapCallbackFrame (hWebcam, @FrameCallback)
  
  
  ;Debug "a" + Str(a) + "b" + Str(b) + "c" + Str(c) + "d" + Str(d) + "e" + Str(e) + "f" + Str(f) + "g" + Str(g)
  ;------------------------------------------------------------------------------------------------------------
  
  
 
Repeat
  
  Event = WindowEvent ()
  Select Event
      
    Case #PB_Event_CloseWindow
      Break
      
    Case #PB_Event_Menu
      Select EventMenu ()
          
        Case #Menu_exit
          Break
          
        Case #Menu_Start
          DriverConnect    (hWebcam)
          SetScale         (hWebcam)
          SetPreviewrate   (hWebcam)
          SetPreview       (hWebcam, 1)
          GetStatus        (hWebcam, @CapStat)
          Resizer          (@CapStat)
          CapCallbackFrame (hWebcam, @FrameCallback)
          
        Case #Menu_Stop
          SetPreview       (hWebcam, 0)
          DriverDisconnect (hWebcam)
 
  
        Case #Menu_Device
          SendMessage_     (hWebcam, #WM_CAP_DLG_VIDEOSOURCE, 0, 0)
          
      EndSelect
      
  EndSelect
ForEver
  
  
  
  
;------------------------------------------------------------------------------------------------------------
 
 
SetPreview       (hWebcam, 0)
DriverDisconnect (hWebcam)
CloseWindow      (0)
CloseLibrary     (0)
 
EndIf
 
End
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
15.09.2012, 18:25
270х190х3
Могу я спросить: как вы это узнали?
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
15.09.2012, 19:47  [ТС]
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Могу я спросить: как вы это узнали?
Это уже не важно так как к этому приводили неправильно построенные циклы.
Для общего развития объясню - используя ширину 320 пикселей и высоту 240, получал я выход за пределы буфера.
Подбирая ширину и высоту я сделал вывод что превышены они каждая на 50 пикселей.
Потом умножил на три и получил предполагаемую длину буфер в байтах.

Сейчас циклы построены относительно правильно, по этому выхода за пределы буфера нет, но картинка множится и некоторые данные записываются так скажем не туда и некоторые не считываются. Но направление верное.

Добавлено через 6 минут
К стати большое спасибо всем за пояснения в работе с памятью. Благодаря вам я наткнувшись на тему нейросетей почти решил проблему обработки изображения и массивов как одной строки, проблему считывания из видеобуфера и на этой основе могу сделать датчик движения вообще не зависящий от шумов.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.09.2012, 20:52
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
наткнувшись на тему нейросетей почти решил проблему обработки изображения
Ты почти стал богатым человеком - кто научится программно разгадывать капчу, тот будет править Миром!
А пацаны то не знают, что их мучениям почти конец
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
15.09.2012, 21:05  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Ты почти стал богатым человеком - кто научится программно разгадывать капчу, тот будет править Миром!
А пацаны то не знают, что их мучениям почти конец
Это не того профиля задача.

Добавлено через 10 минут
Дочитывать строку то надо
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.09.2012, 21:39
Просто я развил твою мысль в новом направлении - что есть капча? Это в полезная информация на которую наложен по сути шум. Отделив шум и распознав информацию мы разгадываемым капчу. Всем известно, что распознавание строят на нейросетях, которые ты постиг, с шумами справился. Остался один шаг!
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
15.09.2012, 22:26  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Просто я развил твою мысль в новом направлении - что есть капча? Это в полезная информация на которую наложен по сути шум. Отделив шум и распознав информацию мы разгадываемым капчу. Всем известно, что распознавание строят на нейросетях, которые ты постиг, с шумами справился. Остался один шаг!
Строят, да не так строят. Они думают что объекты в капче от нейросети сами разделятся на отдельные, но воспринимается она сетью как целое. Либо делят капчу на куски, но не думают что цифра в классическом виде и наклонённая или растянутая это обсолютно разные цифры. Разгадывать капчу надо чемто вроде подбора прямых и изогнутых линий, совокупность которых можно считать символом.

Помоги считать из буфера данные и когда нибудь я распознаю твою капчу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2012, 22:26

Анализ изображения с веб-камеры
Всем привет! Буду очень признателен, если вы подскажете мне на каком языке проще и/или удобнее сделать следующий алгоритм. Принимает...

Захват изображения с веб-камеры
Привет всем! Накипело, много статеек пересмотрел как это сделать, везде свои касяки, т.к. статейки-то страые. Ну в общем как захватить...

Захват изображения с веб камеры
Здравствуйте Я как начинающий программист, в начале своего обучения столкнулся с тем, что мне нужно сделать захват изображения с веб...

Захват видео изображения с веб-камеры
Возникли проблемы при создании массива в C#.В общем дело обстоит так: имеется захват видео изображения с веб-камеры,необходимо сделать,...

Обработка кадров с веб камеры
Здрасти, задался вот таким вот вопросом: Дано два пятна определённого цвета, произвольного диаметра, расположенных в одной плоскости по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru