Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: monitoring
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004
monitoring

Witajcie,
Chcę napisać program do monitoringu w vb. Posiadam kamerkę, podłączoną do serwera na slckware, który udostępnia u siebie na dysku uaktualniany co 1sek obraz jpg. Chciałbym zrobić coś na wzór wykrywania ruchu/ zmian w obrazie. Nie mam zbytniego pojęcia jak to zrobić, wpadlem na pomysł aby zczytywać dane z kilku obszarów i zaobserwować awentualne zmiany kolory pikseli, ale tego tez nie mam pojęcia jak dokonac, kontrolka image nie pozwala na to. Byłbym b.wdzięczny za jakąkolwiek pomoc.

29-12-2004 00:11
Pokaż profil visual  Wyślij email do visual   
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Sprawdzaj to w pętli, pobieraj pixele z picture boxa funkcją point. Wyciąganie koloru można zrobić tak:

r = kolor and 255
g = int(kolor/256) and 255
b = int(kolor/65536) and 255


_____________________________________________
www.mob.abc.pl - moja strona o VB

29-12-2004 15:54
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

cze, dzięki za odpowiedz ale tak nie bardzo rozumiem Twoją metodę, mam wyciągać poszczególne skladowe koloru pixela?

29-12-2004 23:40
Pokaż profil visual  Wyślij email do visual   
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

No więc, pytałeś jak to zrobić więc proponuję, żeby użyć kontrolki picturebox, i sprawdzać czy coś się zmieniło (np. if abs(r1 - r2) > 60 then) i robić to w pętli, tak żeby sprawdzić cały obrazek.


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-12-2004 11:13
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

Ok dzięki już wiem chyba co i jak. Mam natomiast następny problem, bowiem napisałem następującą procedurę:

Public Sub pickwzor(x1, y1 As Single)
Dim kolor, r, g, b, sumar, sumag, sumab As Integer
Dim paleta(10, 3) As Integer
Static xt, yt, m As Single

xt = x1
yt = y1

    For i = 1 To 10
xt = xt + 1
yt = yt + 1
kolor = Picture1.Point(xt, yt)

r = kolor And 255
g = Int(kolor / 256) And 255
b = Int(kolor / 65536) And 255

paleta(i, 1) = r
paleta(i, 2) = g
paleta(i, 3) = b

    Next

    For z = 1 To 10
sumar = sumar + paleta(z, 1)
sumag = sumag + paleta(z, 2)
sumab = sumab + paleta(z, 3)
    Next

srdrw = sumar / 10
srdgw = sumag / 10
srdbw = sumab / 10

End Sub


Jednakże gdy wywołuje pickkol(xp,yp)
gdzie xp= np.100 i yp=np.200 to otrzymuje komunikat"Compile error, Expected: = ", czyli trakuje to jako funkcje?
Nie wiem co robie źle, dziękuję za pomoc

30-12-2004 21:56
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Niekoniecznie - ten bła czasami ma także inne podstawy, ale narazie trudno powiedzieć, bo nie wiem co to jest ten pickkol . Nigdzie go w kodzie nie ma


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

30-12-2004 23:23
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

sorki chodziło mi ocz o pickwzor a nie pickol, są to praktycznie takie same procedury,
zastanawiam się bo nawet jak zrobie byle procedurkę
sub bleble(raz,dwa as string)
msgbox(raz&dwa)
end sub

to wyskakuje mi ten sam błąd, może źle robie te parametry przekazywane do procedury?

30-12-2004 23:59
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Generalnie, procedury wywołuje się bez użycia nawiasów:

procedura arg1, arg2, ...

tak więc wywołanie twojej powinno wyglądać tak:
pickwzor 100, 200

Funkcje za to najczęściej wywołuje się z nawiasami:
wynik = funkcja(arg1, arg2, ...)

Mówię "generalnie" i "najczęściej", bo jak zwykle są wyjątki. Wszystkich tutaj nie wymienię, ale podam przykłady:

Najbardziej powszechnym jest wywołanie funkcji tak, by nie zwracałą wyniku:
funkcja arg1, arg2
W tym kodzie funkcja zachowa się jak zwykła procedura, wykona się, ale nic nie zwróci

Reszta to już specyficzne zachowania VB.
Są np. metody .Print , .PSet , .Circle itd., które mają swoje własne składnie, niezależne od ogólnej składni VB i tak np. .PSet wywołuje się (przykładowo):
Form1.PSet (100,200), 0&

Do tego można doliczyć już całkiem egzotyczne twory, takie jak Mid, która jest funkcją... która może działać obustronnie:
Prawostronnie:
wynik = Mid(String1, 12, 4)
i lewostronnie:
Mid(String1, 12) = String2

No i tyle tego.. oczywiscie jako odpowiedź wystarczt "wywołuj bez nawiasów", ale się rozpisałem jakoś


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-12-2004 01:36
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

Dzięki serdeczne, wiem o co chodzi, IDIOT ze mnie.
Mam jeszcze pytanie czy na załadowanym obrazku w PictureBox da się narysować jakiś kształt typu prostokąt? Chodziło by mi o zaznaczenie ramką ok 10 pikseli.
W zasadzie wszystko działa ale jest to troche lipne rozwiązanie, może ktoś ma lepszy pomysł, bo ja wymyślilem coś takiego -
mam update'owany co 1s obrazek,
co 60 sekund pobieram kolory 10 pxl i rozbijam je na skłagowe r,g,b licze średnią z 10 wyników
a następnie wykonuje podobną operacje co sekundę i porównuje wynik ze wzorcem,
jeśli różnica w kolorach jest większa niż powiedzmy 10 wtedy wykonuje beep'a.

Problem pojawia się gdy moją formę zasłoni jakieś inne okno wówczas Point czyta kolor pixela, okna które przykrywa

Może ktoś ma bardziej echm... inteligentny sposób ?

[Post edytowany dnia 31-12-2004 13:16 przez visual]

31-12-2004 13:11
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Rysowanie ramki
a) Możesz użyć metody .Line do narysowania czterech boków prostokąta.
b) Możesz umieścić na Pictureboxie kontrolkę Shape w kształcie prostokąta (mało efektowne rozwiązanie, ale działa).
c) Możesz użyć funkcji WinAPI - np. Rectagle; Tutaj deklaracja:
Public Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Parametry:
    hDC - uchwyt DC (wpisz tutaj właściwość .hDC Pictureboxa)
    X1,Y1 - współrzędne lewego-górnego wierzchołka
    X2,Y2 - współrzędne prawego-dolnego wierzchołka
Funkcja będzie rysowała ramkę kolorem, który masz ustawiony w .ForeColor i wypełni wg. .FillStyle i .FillColor (dlatego w tym przypadku najlepiej .FillStyle ustawić na Transparent).

Inna metoda pobierania kolorów pikseli
Jest inna metoda, ale wymaga użycia WinAPI i np. pobierania danych bezpośrednio z pamięci.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-12-2004 14:46
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

Dzieki za ramkę,

[quote]Jest inna metoda, ale wymaga użycia WinAPI i np. pobierania danych bezpośrednio z pamięci.[/quote]
Mogłbyś coś bliżej?
Jak się nazywa ta funkcja? zastanawiam się jak wczytywać obrazek do pamięci, zrobić zmienną atualizowaną co sekundę?
Pozdrawiam

31-12-2004 15:13
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nie ma jednej funkcji. Wszystko zależy od tego jaką metodą będziesz robił. Możesz np. skopiować bitmapę do tablicy (funkcja GetBitmapBits) i potem zczytywać dane z tablicy (oczywiście trzeba będzie to robić za każdym razem). Możesz też użyć funkcji CopyMemory do kopiowania fragmentu bezpośrednio z bitmapy itp.

Opisów do funkcji nie będę zamieszczał, bo jest ich dość dużo, a wszystko jest dobrze opisane np. w AllAPI.net, API-Guide czy MSND. W razie problemów poprostu zapytaj o konkretny przypadek.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-12-2004 15:37
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

Chyba skorzystam z CopyMemory, ciekaw jestem czemu

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Rectangle Picture1.hdc, X, Y, X + 12, Y + 12
End Sub


Nie rysuje mi poprawnie, dopero gdy klikam w prawym górnym rogu to gdzies mniej wiecej po drugiej stronie się pojawia ale jak klikne np na środku lub gdzies bardziej w głębi to nic nie ma.

31-12-2004 16:18
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Zgaduję: .ScaleMode w PictureBox masz ustawiony na Twips . Zmień na Pixels, powinno pomóc.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-12-2004 16:38
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

marcin_an Zagraj w Totka ;-)

31-12-2004 17:43
Pokaż profil visual  Wyślij email do visual   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

W totku niestety doświadczenie niewiele pomaga


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-12-2004 18:21
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
visual




Typ: neutral
Postów: 18
Zarejestrowany: Oct 2004

zawsze mozna użyć Random(n) ;-) Jakiś tam pseudo-los

31-12-2004 18:31
Pokaż profil visual  Wyślij email do visual   
Wszystkich odpowiedzi: 16 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1