Da li je moguce i kako napisati kod koji bi omogucavao racunaru da prepozna odnosno razlikuje oblik kugle i kocke, koristeci samo WEB kameru.
VB kod za prepoznavanje oblika
Zaključano
Zakačeno
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.
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.
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.
Ako nije prob. okaci taj modul a ja cu ti pomoci oko prepoznavanja jednostavnih oblika.
@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 :)
@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
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
Potpis
HomePage http://www.eurora3d.com
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:
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.
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
...
...
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.
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...
WM_CAP_SET_CALLBACK_FRAME
capVideoStreamCallback
tako da clipboard moze lako da se zaobidje...
@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
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
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
Potpis
HomePage http://www.eurora3d.com