Video Analyse selbst programmieren?

  • Hallo,

    da ich mich mit Computergrafik bzw. Frameworks dafür noch nie auseinander gesetzt habe, wollte ich einmal hier nachfragen, ob sich damit jemand auskennt und mir sagen kann, ob nachfolgiges Projekt umsetzbar wäre.

    Ich würde gerne Tischtennismatches mit einer Kamera filmen (rechts oder links hinter dem Tisch, sodass man beide Spieler + die Tischplatte sieht) und das ganze dann mit einem Programm auswerten.

    D.h. ich müsste dann in dem Video den Tischtennistisch erkennen und in 4 Bereiche unterteilten (Ich Vorhand, Ich Rückhand, Gegner Vorhand, Gegner Rückhand) und dann entsprechend immer den Ball verfolgen können (der entweder weiß oder Gelb ist).

    z.B.: ein solches Video: (Der Blickwinkel würde in meinen Videos natürlich immer gleich bleiben!)
    http://www.youtube.com/watch?v=sswoYE028fk

    Kann man einen "so kleinen weißen Ball" in einem Video mittels irgendwelcher Frameworks leicht verfolgen? (während dem Spielen?).

    Insgesamt würde ich sehr gerne dann so statistische Auswertungen machen, also das mein Programm am Ende sowas ausgibt wie:
    *) 78 mal dem Gegner in die Rückhand gespielt, davon 12 Punkte gemacht.
    *) 18% bei den Aufschlägen Fehler gemacht
    *) 49% hat der Gegner bei der Annahme des Aufschlages einen Fehler gemacht
    usw.

    Ist soetwas derzeit mit gängigen Frameworks für Videoanalyse realisierbar? Falls ja, welches Framework würdet ihr dafür empfehlen (Java, C, C++, Python würde ich favorisieren, C# eher nicht so...)

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

  • Imho ist die reine Ballbewegung einigermaßen realisierbar - was ich mich allerdings frage, ist: Was passiert, wenn der Ball vom Spieler verdeckt wird beim Punkt? Was ich mir auch sehr schwierig vorstelle, sind Bälle, die am Netz runtergehen. Das ließe sich mit einer Kamera seitlich vermutlich leicht lösen.. ob das mit nur Kameras von hinten einfach zu realisieren ist.. kein Plan. In "Einführung in die Mustererkennung" machtman so lustige Sachen soweit ich weiß auch.. da manuell mit Matlab.

    P.S.: Sorry, dass ich dir keine konkreten Frameworks o.ä. nennen kann - wollte nur mal ein paar Gedanken einwerfen.. ;)

    Edit: Gerade nochmal das Video angesehen.. dabei ist mir auch in den Sinn gekommen, dass der Ball auf den einzelnen Frames vermutlich nur als Schliere abgebildet sein wird. Auch da weiß ich nicht, ob es was gibt, das damit arbeiten kann.

  • Schau dir mal OpenCV an (http://opencv.org/), kannst du auch mit Python verwenden. Das wird neben Matlab soweit ich weiß am häufigsten für Computer Vision verwendet und bietet einige Funktionen und gute Dokumentation an.
    Klingt nach einem recht aufwendigen Projekt das du vorhast, hängt aber auch davon ab wie gut und unter welchen Bedingungen es funktionieren soll (solls zB. unter beliebigen Beleuchtungssituationen funktionieren). Mir würd mal fürs erste Background Subtraction einfallen wenn sich die Kamera nicht bewegt. Damit wird der statische Hintergrund ignoriert. Dann durch die Form und ungefähre Größe des Balles und ggf. die Farbe könnte man versuchen die Position des Balles zu finden. Verdeckungen werden wahrscheinlich zum Problem. Das Computer Vision Lab bietet nächstes Semester die VO Video Analysis an, wär viellleicht interessant für dich (http://caa.tuwien.ac.at/cvl/teaching/s…dana/index.html).

  • Hah,

    sehr cool, danke für die LVA Vorschläge. OpenCV hätte ich auch schon durch googeln gefunden, dürfte wohl so "das Standard" Framework sein. Die meisten Links auf Google beschäftigen sich alle mit Realtime Auswertung, das wäre ja bei mir nicht so das Problem. Ja das mit dem verdecken habe ich auch schon überlegt, aber im schlimmsten Fall überspringe ich einfach ein paar Punkte, das wäre ja jetzt auch nicht die Welt (oder diese Punkte könnte man dann manuell hinzufügen).

    Das größte Problem sehe ich darin, dass man erkennen muss ob der Ball auf dem Tisch aufkommt oder nicht. z.B.: fliegt der Ball über den Tisch, aber von rechts hinten oben sieht man ja nicht wirklich ob er aufkommt oder nicht im Video (bzw. nur über die Flugkurve was sicherlich schwer dem Computer beizubringen ist...).

    Das beste wäre vermutlich wenn man zwei Videos dreht, ein Video wo die Kamera direkt über dem Tisch ist und von oben gerade nach unten filmt und eines wo man den Tisch direkt von der Seite sieht. Erstes Video kann benutzt werden um zu erkennen ob der Ball Vorhand oder Rückhand kommt und zweites Video um zu erkennen wann der Ball aufkommt oder ob er überhaupt aufkommt (oder Netzroller usw.).

    Und dann ggfs. noch ein Video vom Zählgerät damit der Computer immer weiß für wen der Punkt war um bei Unsicherheiten eine Entscheidung zu treffen....

    edit: Bzw. statt der Kamera direkt über dem Tisch könnte man ein Gestell bauen, auf welchem zwei Kameras in Unterschiedlicher Höhe sind. Die erste in Höhe des Tisches und die zweite Kamera um einiges höher um einen Schrägen Blickwinkel zu bekommen, dann hätte man direkt das Zählgerät da auch dabei (und man muss nicht über dem Tisch eine Kamera montieren...)

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

    Einmal editiert, zuletzt von Juggl3r (3. Januar 2014 um 01:16)

  • Ich frag mich, ob die Framerate der Kamera da ausreicht, um das sinnvoll auszuwerten.

    Wenn man sich die Fluggeschwindigkeit ansieht - Und ich halt mich jetzt mal daran:
    http://www.sportlerfrage.net/frage/wie-schn…isball-im-spiel (3. Antwort)

    Dann fliegt der Ball bei durchschnittlich 100 km/h die Tischlänge in 0.2 Sekunden ab.
    Bei einer Framerate von 60 fps bekommt man dann 12 Bilder zum Auswerten, bei 40 fps nur 8 Bilder.
    Da ist eine Verdeckung aber noch nicht berücksichtigt.
    Eine Tischberührung dabei auszuwerten kommt mir schwierig vor.

    Als Extrembeispiel für Ballgeschwindigkeit hab ich das gefunden:
    http://www.youtube.com/watch?v=6e_YjUYO4PI
    Stell ich mir hart vor ohne Highspeed Kamera...

    Stefan Spelitz
    [Computergraphik UE Tutor 2017SS]

  • Haha ja der kleine Japaner mit dem Aufschlag ;)

    Ja aber selbst wenn man kein Bild hat wo wirklich der Ball direkt am Tisch aufkommt dann kann man das ja Interpolieren. Z.b.: hab ich 5 Bilder wie der Ball angeflogen kommt, der Ball kommt immer näher dem Tisch, ist also immer weiter unten. Beim 6ten Bild ist er dann wieder Höhe und der Tisch war nur ein kleines Stück entfernt und beim 7ten Ball ist er noch höher => Daraus kann ich ja ableiten, dass der Tisch getroffen wurde.

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!