Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Motion

Postades av 2001-08-17 01:48:00 - André Claesson, i forum visual basic - allmänt, Tråden har 22 Kommentarer och lästs av 1838 personer

Nån som har koll på om "Motion Detection" går att ordna i VB.
Alltså om man har en webkamera kunna avgöra om nåt rör sig i bilden.

Kod eller ocx för att jämföra bilder.


Svara

Sv: Motion

Postades av 2001-08-17 02:13:00 - Sven Åke Persson

Hej
det borde gå med API GetPixel
om man då tar ner bilden till tex 100 * 100 pixel
så blir det 100000 pixel att scanna ,tar säkert inte mer
än 100 ms att utföra och jämföra.
Tror
Sven


Svara

Sv: Motion

Postades av 2001-08-17 02:43:00 - André Claesson

Jag har tänkt mig så här:

Först tar programmet en bild
Sen tar den en till
Sedan jämför den pixlarna, t.ex. pixel 1x1 om den har ändrats mycket.

Om den har ändrats lite så är det ju bara kamerans flimmer.

Men skulle detta överhuvudtaget gå i Visual Basic?

Hur långt tid skulle det ta att gå igenom en bild? [352x288] Ca 100.000 pixels...


Svara

Sv: Motion

Postades av 2001-08-17 10:20:00 - Pelle Johansson

Det bästa sättet är att prova sig fram:-)

Du kan även göra rutinen till en dll, det kan gå lite snabbare att använda en sådan funktion i vb. Räcker inte farten kanske du känner någon som kan skriva den i c++ och göra en dll åt dig.

/Pelle


Svara

Sv: Motion

Postades av 2001-08-17 11:56:00 - Sven Åke Persson

Hej igen

>Sedan jämför den pixlarna, t.ex. pixel 1x1 om den har ändrats >mycket.

Det skall inte vara något problem.Man får välja ut ett område
på bilden som är strategiskt tex en vit bakgrund som
plötsligt skymms av något mörkt.
Man får checka minst 1000 pixel någonstans .

Intressant projekt jag hjälper gärna till med scanner program

mvh
Sven


Svara

Sv: Motion

Postades av 2001-08-18 01:00:00 - André Claesson

Med en vanlig for-loop tar 2500 PIXEL Ca 1 sek
att gå igenom och registrera färgen på varje.


Exempel:
------
Dim xyColor As Long, xpix As Long, ypix As Long
Dim i As Long, j As Long

xpix = picBild.ScaleWidth
ypix = picBild.ScaleHeight


For j = 0 To ypix - 1
For i = 0 To xpix - 1

DoEvents

xyColor = picBild.Point(i, j)

Text4 = Text4 + 1 'Antal pixel kollade

Next i
Next j


Svara

Sv: Motion

Postades av 2001-08-18 01:30:00 - Sven Åke Persson

Hej
okidoki
men det går att speeda up. BitBlitern sitter som en handske
DS


Svara

Sv: Motion

Postades av 2001-08-18 02:08:00 - André Claesson

Kan du eller nån annan inte skriva ett exempel?

Jag vet inte hur jag skall få det fortare :(


Svara

Sv: Motion

Postades av 2001-08-18 09:42:00 - Jan Eriksson

Nu vet jag ju inte hur du ska använda detta men en idé är att ge användaren möjlighet att markera vilken del av bilden som inte får ändras utan att ge larm. Tex så kan du ha en kamera riktat mot en bil. Det finns träd, buskar osv som kan röra på sig. Genom att användaren kan markera tex själva bilen eller kanske enbart en dörr så slipper du bruset samt minder antal pixlar som ska jämföras. Detta är ingen ny idé utan det finns i en del av dom övervakningsutrustningarna som säljs.

Lycka till.

/Janne


Svara

Sv: Motion

Postades av 2001-08-18 11:03:00 - Sven Åke Persson

hej
Det finns många vinklar på detta problem.

Hur ändras dagsljuset mm. Eventuellt får man ta en referens bild
en gång i minuten m.m. Dvs man måste skräddarsy för
den miljö som skall övervakas.

Sven igen
Intressan projekt skall skriva ett exempel när jag morrnat mig
DS


Svara

Sv: Motion

Postades av 2001-08-18 11:19:00 - Sven Åke Persson

Hej igen
>Text4 = Text4 + 1 'Antal pixel kollade
Den här raden stjäl massor av tid, DoEvents själ tid

När det är så liten loop kan du ta bort dessa.

mvh
Sven


Svara

Sv: Motion

Postades av 2001-08-18 16:32:00 - André Claesson

Jo utan dem går det mkt fortare. Men som det är nu gör ju loopen inget utan bara går igenom.

Jag har program med motion-funktion som funkar bra (dock inte källkoden).
De kollar hela bilden, men antagligen inte varje pixel utan kanske varannan eller var 3:e.
De jämför bild 1 med bild 2, sen bild 2 med bild 3 osv.
Man kan ställa in känslighet, beroende på hur mkt kamerans flimmer stör.

Att det går över från dag till natt kommer ett sånt program inte att reagera på, då det inte är alls så känsligt.


Jag har även sett mer avancerade tekninker som kollar olika linjer i bilden. Alltså konturer. Men det skall inte vara nödvändigt.


Svara

Sv: Motion

Postades av 2001-08-18 19:24:00 - Sven Åke Persson

Hej
Så är min gruntanke också .Man lagrar referensbildspixel i
en referensArray.
Sedan tar man ett snapshot med jämna intervaler och jämför
aktuell pixel med den som ligger Arrayen
referensArrayen bör väl uppdateras sådär varje minut
Använder API GetPixel
Har testat lite skall hela bilden med 352*288 så kommer jag
inte unde 1.5 sek med en 200 mhz processor.

Lite smålurigt med flimmer ,bilstrålkastare,åskblixter mm.

Funderar vidare
mvh
Sven



Svara

Sv: Motion

Postades av 2001-08-18 22:10:00 - Jan Eriksson

Behövs inte vara trassligt med olika störningar. Börja med att titta på vad ni vill ska larma. En person som går för bi tex. Då sker förändringar vertikalt genom bilden.

Tex åska ger förmodligen förändring över hela bilden (tex bild 2) och då ska den hoppa över den bilden och istället jämföra 1 med 3.

Strålkastare är trassligare men dessa brukar komma med hög fart och svepa på samma sätt. Man får helt enkelt lära programmet att känna igen sådant.

Nyfiken, vad har du tänkt att använda det till?
Har själv en timelaps-video som spelar in dygnet runt på en del platser runt/i huset och den ökar på inspelningen när ett larm går.

/Janne


Svara

Sv: Motion

Postades av 2001-08-18 22:13:00 - André Claesson

Menar du att en referens-bild skall tagas bara var 60:e sekund.

Om en bild tages varje sekund och en referens-bild tages va 60:e sek, händer väl följande:

Bild 1 tages Sekund 1 och du sitter framför kameran

Du springer snabbt bort från kameran och är därifrån innan Sekund 5.

Om Sekund 5-60 ska jämföras med Bild 1 från Sekund 1,,, kommer bild 5-60 anses vara Motion.

Så man måste väl ta en referens-bild i sekunden.


Svara

Sv: Motion

Postades av 2001-08-18 22:27:00 - André Claesson

Programmet ska inte användas till nåt övervakningssytem så det måste inte vara sådär 100% tillförlitligt.

Det var tänkt att användas inomhus, så eventuella blixtar och sånt tänkte jag inte på.

Det är meningen att det ska vara kopplat till en webkamera och ta bilder när nån går förbi, Eller om nåt annat rör sig.

---
Hur jämför man med VB om en pixel ändrats mycket?
Alltså den ska ju inte reagera om pixelen ändrats från
RGB(123,123,123)
till
RGB(123,125,123)

(Den borde kanske jämföra mörkheten i pixelen.)

Nåt förslag?


Svara

Sv: Motion

Postades av 2001-08-18 23:52:00 - Andreas Hillqvist

Hejsan sven... Skulle det inte vara snabbare med GetBitmapBits eller GetDIBits?

Exempel på kod:

'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net

'Create a new project, add a command button and a picture box to the project, load a picture into the picture box.
'Paste this code into Form1
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PicBits() As Byte, PicInfo As BITMAP, Cnt As Long
Private Sub Command1_Click()
GetObject Picture1.Image, Len(PicInfo), PicInfo
ReDim PicBits(1 To PicInfo.bmWidth * PicInfo.bmHeight * 3) As Byte
GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
For Cnt = 1 To UBound(PicBits)
PicBits(Cnt) = 255 - PicBits(Cnt)
Next Cnt
SetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
Picture1.Refresh
End Sub


Svara

Sv: Motion

Postades av 2001-08-19 00:19:00 - Sven Åke Persson

Hej
<Ta en referensbild .
Ja om det är inomhus skulle det väl räcka gott och väl med en
referens i minuten om den då är samma som den förra med
några procent fel /känslighet så blir den ny referens

Sedan skall du givetvis jämföra scanna minst en gång i sekunden.

Chefen kommer övervakning ?
Rgb värdet får du bäst med GetPixel.
Jag tror att bilden skall vara i gråskala 256 färger.

DS


Svara

Sv: Motion

Postades av 2001-08-19 01:50:00 - Sven Åke Persson

Hej
Ett litet test program som du kan "spåna" kring

Option Explicit
'En PictureBox 352*288 namn TestPic
'En Command1 och en Command2
'Simulera bildändring
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long) As Long
Dim RefArray(6336) As Long 'standard bilden
Dim PicArray(6336) As Long 'testbild
Dim Start As Single

Private Sub Command1_Click()
'Ladda in Nollbild referens
Call ReferensPic
End Sub

Private Sub Command2_Click()
'Ladda in momentan bild för test
Dim i As Long, diff As Long
Call TestPicture
For i = 0 To 6336
If RefArray(i) <> PicArray(i) Then _
diff = diff + 1
Next 'i
diff = diff * 100 / 6336
MsgBox "Bilden har ändrats " & diff & " procent"
End Sub

Private Sub ReferensPic()
Dim x As Long, y As Long, k As Long
Start = Timer
For x = 1 To 351 Step 4 'scanna vertikalt 4 pixels hopp
For y = 1 To 287 Step 4
RefArray(k) = GetPixel(TestPic.hdc, x, y)
k = k + 1
Next 'y
Next 'x
MsgBox Timer - Start
End Sub

Private Sub TestPicture()
Dim x As Long, y As Long, k As Long, i As Long
For x = 1 To 351 Step 4 'scanna vertikalt
For y = 1 To 287 Step 4
PicArray(k) = GetPixel(TestPic.hdc, x, y)
k = k + 1
Next 'y
Next 'x
End Sub

'DS


Svara

Sv: Motion

Postades av 2001-08-19 21:17:00 - André Claesson


Jag hade redan gjort ett fungerande exempel.
Inte så bra kodat än, ska optimera det,
men det funkar iallafall

Om du har webkamera kan du se att det funkar!

Källkoden:
http://w1.444.telia.com/~u44402237/motion.zip


Svara

Sv: Motion

Postades av 2001-08-19 21:59:00 - Sven Åke Persson

Hej
Det ser skitbra ut .Du har förmodligen en snabb processor.
Rent allmänt så tex dina Mod funktioner i BasModulen
är tidskrävande,DoEvents själ tid som bara den.
Tycker fortfarande att du skall kolla in GetPixel och göra Compare
på den istället.
Din principlösning verkar helt Ok ,jag tänkte i lite andra banor.
Jag lägger koden i min godislåda för ev framtida bruk.

ha det
Sven


Svara

Sv: Motion

Postades av 2001-08-19 22:39:00 - André Claesson

Jag kör på en 500 MHz, men vill ju att det ska gå på mindre.

Mod funktionerna gör om till RGB för att sedan kolla hur det röda,gröna och blåa
ändrar sig.
Som det är nu får en av dem ändras högst 10 upp eller ner.

Finns det snabbare/bättre sätt att få det i RGB?
Eller går det jämföra pixlarna på annat sätt?
Det räcker inte med att den kollar om det är
samma färg. Den ska kolla om det är nästan samma
också ju.

Jag hade redan tagit bort DoEvents i For-loopen.

Den DoEvents som ligger i början av 1-sekunds-loopen, påverkar den
For-satserna också?

Tar jag bort den funkar det inte och programmet blir oåtkomligt.
(Det är ju denna loopen som driver runt programmet annars jämför
det ju bara en gång).


Vad har GetPixel för fördelar?


Svara

Sv: Motion

Postades av 2001-08-19 23:28:00 - Sven Åke Persson

Hej
>Vad har GetPixel för fördelar?

Den ger dig RGB värdet i form av LongInteger,väldigt nyanserat
Men framför allt du slipper VB s "långsamma" runtime att bli
inblandad.Du hämtar direkt från Windows operativsystem.
Dvs inga omvägar via VB tolken.Vill du öka farten skall du
absolut gå den vägen.

>Mod funktionerna gör om till RGB för att sedan kolla hur det >röda,gröna och blåa ändrar sig.
>Som det är nu får en av dem ändras högst 10 upp eller ner.

GetPixel lämnar tex 16234 för en färg du slipper Hexomvandling
om nu 16234 har ändrats till 16250 så betyder det att någon
av R G B har ändrats lite.

Skall kolla din kod en gång till och komma med förslag där du
kan byta ut RGB mot GetPixel.
Ok på att du inte kan ta bort det ena DoEvents.


DS



Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 621
27 953
271 709
692
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies