-         

Ergebnis 1 bis 6 von 6

Thema: Bewegungsverfolgung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433

    Bewegungsverfolgung

    Anzeige

    Hallo,

    ich bastel gerade an einem zielsuchendem Kamerastativ.

    Das Konzept ist eigendlich ganz einfach, man nehme eine Selbstschussanlage (Turret bei Youtube) und baue anstatt einer Waffe eine Kamera an.

    So weit, so gut, ich scheiter an dem Problem der schnellen Bewegungsverfolgung.
    Ich progge in VB.net, zur Zeit schrumpfe ich das Webcambild auf 80x60px und vergleiche dann Pixel für Pixel, mit dieser Variante komm ich auf vllt 13fps, wenn ich die Servosteuerung laufen lass sinds noch 8fps, wenn überhaupt.
    Das ist nicht sonderlich prall, und ich nutze schon einen 2er Dualcore, wenn ich seh das sone embeddet Boards viel schneller sind, beschleicht mich die Frage, wie machen die das?

    Kann mal jemand eine Vorgehensweise in den Raum werfen?
    Oder zumindest nen Vorschlag.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Zitat Zitat von MisterMou
    Das ist nicht sonderlich prall, und ich nutze schon einen 2er Dualcore, wenn ich seh das sone embeddet Boards viel schneller sind, beschleicht mich die Frage, wie machen die das?
    Die sind schneller, weil der Code dort nativ ausgeführt wird. Das .net Framework basiert auf einer VM, und da darf man sich nicht wundern, dass der Code dann um einiges langsamer läuft. Bildverarbeitung ist halt rechenintensiv. Nimm eine Lib wie openCV, dann kriegst Du locker 30fps mit VGA Auflösung.

    Wie genau vergleichst Du die Pixel? 13 fps bei der Auflösung sind eigentlich auch für eine VM viel zu wenig. Etwas Quelltext wär nicht schlecht.

    MfG Mark

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433
    Ich bin noch n Anfänger im Programmieren

    Code:
       
    
    VB.net 2008
         
    For i2 = 0 To pic_neu.Width - 1
    
                    For i = 0 To pic_neu.Height - 1
    
                        PixelY = i
                        PixelX = i2
                        PixelwertOrginal = pic_neu.GetPixel(PixelX, PixelY)
                        PixelwertVergleich = pic2_neu.GetPixel(PixelX, PixelY)
    
                        p1R = CInt(PixelwertVergleich.R)
                        p1G = CInt(PixelwertVergleich.G)
                        p1B = CInt(PixelwertVergleich.B)
    
                        p2R = CInt(PixelwertOrginal.R)
                        p2G = CInt(PixelwertOrginal.G)
                        p2B = CInt(PixelwertOrginal.B)
    
                        p1R = ((p1R + p1G + p1B) / 3) - ((p2R + p2G + p2B) / 3)
    
                        If p1R <= tbEmpfindlichkeit.Value And p1R > tbEmpfindlichkeit.Value * -1 Then   'Ich bin zu faul das aufs Gegenteil umzudenken^^
    
                        Else
                            SchnittY = SchnittY + i 
                            ZählerY = ZählerY + 1
                            SchnittX = SchnittX + i2
                            ZählerX = ZählerX + 1
                        End If
    
                    Next
    Next
    If-Else Bedingung: Ich berechne später den Duchschitt aus allen Differenzpixeln und ziele dahin, um es einfach auszufrücken.


    Ich zeichne das Bild vorher in ne PictureBox und les dann die Pixel aus.
    Bremst bestimmt ganzschön.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Ich zeichne das Bild vorher in ne PictureBox und les dann die Pixel aus.
    Bremst bestimmt ganzschön.
    Das wirds wohl sein. Besorg Dir das RGB-Array der beiden Bilder, dann sollte es um einiges schneller sein. Was sich auch optimieren lässt ist das Teilen durch 3, indem man es weglässt und stattdessen tbEmpfindlichkeit.Value entsprechend skaliert.

    MfG Mark

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433
    Boing. Übersehen.

    Ich hab das durch 3 teilen rausgenommen und die Kiste überschlägt sich fast. Das sind jetzt locker 15fps mit Servoansteuerung, das kann doch nicht nur am Code gelegen haben...

    Das Array werd ich mir auch noch fertig machen.

    Schonmal danke!

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    26
    Beiträge
    1.079
    Blog-Einträge
    1
    Du hast aber so genau ein Thread mit deiner Schleife, das ist wirklich langsam. Du hast in VB.Net den background Worker. Erstelle dir 9 von denen, das entspricht 9 Threads. Dann teilst du dein Bild in 8 Segmente auf und gibst ein Segment einem Worker. Die Worker übergeben dannd ie Ergebnise dem 9. Worker der diese dann auswertet.

    VB.NET ist ziemlich gut ich progge sehr gerne damit, weils recht simpel ist.

    Achja...

    Schau dir mal das an:
    http://www.mitov.com/

    Geh dort auf Videlab.
    Da gibts alles was das Herz begehrt. Canny Filter, Kantenfilter, Bewegungserkennung alles alles alles, DirectX Input ALLES

    das beste: es ist völlig UMSONST (für private Zwecke)

    Ich habe alle drei Libraries.

    Du installierst es einfach und die Komponenten sind dann zur Verwendung bereit.

    EMPFEHLENSWERT!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •