[ 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. |
[ dr.zmaj @ 18.10.2008. 18:41 ] @
[ 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 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|