[ dr.zmaj @ 18.10.2008. 18:41 ] @
Da li je moguce i kako napisati kod koji bi omogucavao racunaru da prepozna odnosno razlikuje oblik kugle i kocke, koristeci samo WEB kameru.
[ stefanpn @ 18.10.2008. 19:00 ] @
Moguce je i vec odradjeno.

Ja sam imao samo problem kako da "ocitam" sliku sa kamere. Pa sam nasao neki primer koji je okupirao clipboard, sto nikako nije dobro jer cim neko pokusa nesto sa cb - program puca.

Iz tog razloga sam celu stvar i zabatalio dok se ne edukujem kako da citam sliku "direktno" sa kamere.
[ dr.zmaj @ 19.10.2008. 18:28 ] @
Ne razumem sta je problem. Ja sam sa WEB kamericom odradio sigurnosni sistem gde je slika sa kamere bila direktno prikazana u aplikaciji napisanoj u VB. Mislim da sam gotov modul nasao na internetu i samo sam ga ubacio u svoj kod, koji je jos upravljao sa interfejsom prikljucenim na LPT.
[ stefanpn @ 19.10.2008. 22:30 ] @
Ako nije prob. okaci taj modul a ja cu ti pomoci oko prepoznavanja jednostavnih oblika.
[ Aleksandar Ružičić @ 20.10.2008. 17:07 ] @
@stefan: zar nisi mogao da kreiras svoju "clipboard klasu", koju ostali programi ne bi razumeli (i samim tim ne bi menjali sadrzaj clipboarda), tj ne znam dal si ti smestao sliku u clipboard... verovatno nisi, tako da je ovaj moj post sasvim bespotreban :)
[ Eurora3D Team @ 20.10.2008. 19:40 ] @
@Aleksandar Ružičić
Bespotreban :)
Stefane zar nisi mogao da nadjes neki bolji kod ako ti je trebalo.
Ja sam ovo nasao i istestirao za 5 min http://www.planet-source-code....p?txtCodeId=58422&lngWId=1
[ stefanpn @ 20.10.2008. 22:15 ] @
Krcko to sto si ti rekao stoji ali ne vidim kako da dobijem sliku od drivera bilo gde osim u win. default clipboard. Nebojsa ovaj primer radi isto to sto sam i ja radio pogledaj Sub Timer1_Timer:

Code:

...
SendMessage mCapHwnd, GET_FRAME, 0, 0 '<- hvata sliku (frame) sa kamere
SendMessage mCapHwnd, COPY, 0, 0 ' <- smesta sliku u clipboard

'Dalje vam je jasno:

Picture1.Picture = Clipboard.GetData 
Clipboard.Clear
...


U tom periodu kada mi je to trebalo sam potrosio dosta vremena na ovo, ali nisam pronasao bolji nacin od ovog a ovo je jako ne efikasno.
[ Aleksandar Ružičić @ 20.10.2008. 22:56 ] @
ja nisam nikada radio nesto slicno ali bacio sam pogled u msdn i izmedju ostalog nasao ovo:
WM_CAP_SET_CALLBACK_FRAME
capVideoStreamCallback

tako da clipboard moze lako da se zaobidje...
[ Eurora3D Team @ 21.10.2008. 11:11 ] @
@Stefan
Da, koristi clipboard :) ... sto bi Aleksandar rekao bespotreban post ...
Malo sam prelistao MSDN (imam staru na laptopu, za VS6)
Ovako
Ovi koji u VB-u kopiraju frem u Clipboard obicno to rade zato sto im frem treba kao dib (za neku obradu i sl.) ili zato sto im je tako jednostavnije.
Frem moze da se direktno iscrta u prozoru (ispod imas kod koji ne koristi clipboard) a ako ti treba dib koristi neki kod za kopiranje grafike sa prozora u memoriju.
Prozor u kom drajver iscrtava sliku je prozor koji je kreiran capCreateCaptureWindow funkcijom i on je child u odnosu na glavnu formu.
Ove konstante sam kopirao iz C++ header-a , nema ih u VB APIViewer-u
Stavi Timer1 timer na formu i kopiraj ovo ispod
poz

Code:

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
'
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WM_CAP_START = &H400
Private Const WM_CAP_UNICODE_START = WM_CAP_START + 100
Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10  'konektovanje drajvera
Private Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 ' diskonektovanje drajvera
Private Const WM_CAP_GRAB_FRAME = WM_CAP_START + 60 ' uzimanje frema
Private Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61 ' uzimanje frema bez zaustavljanja
Private Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 ' WinMsg za kopiranje frema u clipboard
Private Const WM_CAP_FILE_SAVEDIB = WM_CAP_UNICODE_START + 25 'WinMsg za snimanje frema u fajl

Private hCam As Long ' hWnd za child window (za kameru)

Private Sub Form_Load()
Timer1.Enabled = False 'timer za fremove
Me.Width = 645 * Screen.TwipsPerPixelX
Me.Height = 500 * Screen.TwipsPerPixelY
Me.Caption = "WebCam"
'WS_CHILD Or WS_VISIBLE sluzi da window kamere bude child ove forme i vidljiv
'sledeca 4 parametra su pozicija x,y i sirina i visina, onda ide hwnd ovog pozora i ID koji window dobija (moze da bude 0)
hCam = capCreateCaptureWindow("MyCamWindow", WS_CHILD Or WS_VISIBLE, 0, 0, 640, 480, Me.hwnd, 0) 'kreiranje prozora za snimanje
SendMessage hCam, WM_CAP_DRIVER_CONNECT, 0, 0 'konektovanje drajvera
Timer1.Interval = 40 ' namestamo timer na 25 puta po sekundi
Timer1.Enabled = True ' i ukljucujemo ga
End Sub

Private Sub Form_Unload(Cancel As Integer)
SendMessage hCam, WM_CAP_DRIVER_DISCONNECT, 0, 0 ' diskonektovanje drajvera
End Sub

Private Sub Timer1_Timer()
SendMessage hCam, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0 ' ova WinMsg iscrtava sliku u hCam prozoru
End Sub