Incom ist die Kommunikations-Plattform der Technische Hochschule Augsburg Gestaltung

In seiner Funktionalität auf die Lehre in gestalterischen Studiengängen zugeschnitten... Schnittstelle für die moderne Lehre

Friz Svea| Mr.Do it by Moving!

Friz Svea| Mr.Do it by Moving!

Mr. DO it by Moving!

Ideen

Eine meiner ersten Ideen war, mit Hilfe einer Kamera( oder Webcam), Bewegungen der spielenden Person zu erkennen und diese zu Benutzereingaben zu simulieren. 

Erste Idee war dabei, das Fingeralphabet zu verwenden oder mit dem ganzen Körper Bewegungen zu machen.

Zweite Variante wäre eine Umsetzung mit Text auf einem selbstgebauten „Controller“, den man dreht o. ä. und der Text oder auch die Buchstaben von einem Programm erkannt und in Eingaben verwandelt werden.

Als Spiel möchte ich gerne ein altes Snes Spiel verwenden, welches ich auf einem Emulator laufen lasse, da es verglichen zu modernen Spielen weniger Eingaben hat.

Steuerung durch Texterkennung

Da die Erkennung in Echtzeit erfolgen soll, war es garnicht so einfach, ein bereits bestehendes Programm zu finden, welches eine Texterkennung in Echtzeit zuverlässig ausführen kann.

Nach langem Suchen bin ich auf das Projekt auf GitHub gestoßen, welches mit Hilfe von Tesseract und OpenCV funktioniert.

komischerwuerfel.pngkomischerwuerfel.png

Erste Idee für den „Controller“, auf dem dann die Buchstaben wären, ist dieses schöne Konstrukt. Vorne ist ein Würfel, von dem die linke, obere, vordere und rechte Seite verwendet werden würden, eine Halterung in der Mitte und auf der Unterseite noch eine Fläche. Dadurch, dass die Drehung der Handgelenks, vor allem nach außen doch eher ungünstig ist, könnte entweder ein zweiter „Controller“ für die andere Hand oder einfach ein anderes Konstrukt helfen (für das ich momentan aber noch keine Ideen habe).

Steuerung durch den Körper

Nach Recherche durch die Datenbanken von m5js ist es durch die Implementierung des PoseNet oder auch Handpose zwar möglich, relativ einfach Posen oder Gesten zu erkennen aber leider nur auf Basis von Javascript im Webbrowser. 

Nach weiterer Recherche und druchsuchen des Codes, sowie durch Hilfe meines Freundes, der sich mit Javascript recht gut auskennt, wurde m5js aber wieder Verworfen.

Jegliche Posen, die ich zu Benutzereingaben simulieren möchte, können nur innerhalb eines vorgegebenen Fensters im Browser ausgeführt werden. Dafür müsste auch das Spiel im gleichen Fenster laufen.

Screenshot 2023-10-29 182302.pngScreenshot 2023-10-29 182302.png

Zwar gibt es auch Echtzeiterkennungsprogramme, die über Python laufen, aber ohne Anleitung, die bei der Echtzeittexterkennung gegeben ist, bin ich leider aufgeschmissen.

Da ich nicht unbedingt Wörter, sondern Buchstaben erkennen lassen möchte, sollte die Erkennung hoffentlich recht gut klappen. Da der Text bereits im Screen ausgegeben wird, sollte es auch möglich sein, auf diesen zuzugreifen und per Python in Eingaben zu simulieren.

Dies Bedarf natürlich noch weiterer Testung.

Backup

Sollte wirklich garnichts funktionieren, würde ich versuchen, mit Farberkennung eine Eingabe zu erschaffen.

Posenet mit python durch localhost

Letzten Endes bin ich bei den Posen geblieben. Mit einem Localhost 

https://github.com/Pithikos/python-websocket-server

kann man Eingaben, die man im Browser macht aus diesem „rauslotsen“.

Soweit habe ich das bereits ausprobiert. Es gab einige Schwierigkeiten, da wohl viele Spiele und auch Emulatoren diese simulierten Eingaben durch Python blockieren. Es wird wohl ein Flag mitgeschickt, woran das erkannt wird und Bots blockiert werden sollen. 

Nach einiger Suche und viel ausprobieren, habe ich dann eine Funktion bzw. Variable entdeckt, die in meinem Emulator durch DirektInputs Eingaben tätigen kann

https://stackoverflow.com/questions/2791839/which-is-the-easiest-way-to-simulate-keyboard-and-mouse-on-python

Screenshot 2023-11-06 170537.pngScreenshot 2023-11-06 170537.png
Screenshot 2023-11-06 170415.pngScreenshot 2023-11-06 170415.png

Das emulierte Spiel

stickis.pngstickis.png

Posen sind noch nicht ganz entschieden und auch nicht, ob die Pose gehalten werden soll oder nur bei Richtungswechsel

mr-do-02 (1).png
mr-do-02 (1).pngmr-do-02 (1).png
Mr._Do!_flyer.jpgMr._Do!_flyer.jpg

Das Spiel ist ein altes, ursprünglich Spielautomat Spiel aber die SNES Version. Sollte noch viel Zeit übrig bleiben und alles reibungslos verlaufen, wäre es möglich durch multiposing einen Multiplayer zu probieren. Priorität ist aber erstmal alles zum Laufen zu bringen.

1. Pose Classification

Mit Hilfe eines Tutorials 

https://www.youtube.com/watch?v=FYgYyq-xqAw

habe ich meine Posen aufgenommen und das neurale Netzwerk trainiert. Leider hatte ich mir aber nicht gemerkt, welche Posen ich für welche Eingabe eingespeichert habe. Dazu ist mir nicht ganz klar, nach welchem Prinzip PoseNet die Posen bestimmt. Die Mustererkennung scheint irgendwelche Sachen für die Erkennung der Pose zu verwenden, die aber nicht die Pose ist. Einige Posen, wo Teile gleich sind, werden falsch erkannt.

2. Pose Classification

Screenshot 2023-12-17 171608.pngScreenshot 2023-12-17 171608.png

Da ich beim letzten Mal nicht mehr genau wusste, welche Posen ich überhaupt aufgenommen hatte, habe ich diesmal vorher Bilder gemacht und bin das ganze nochmal durchgegangen. 

Aus unbekannten Gründen hat das System immernoch die alten Dateien erkannt und verwendet, weshalb einige Namensänderungen vorgenommen werden mussten, damit das Network überhaupt die richtigen PoseDaten bekommt. Mit den richtigen Posen dann leider der Rückschlag. Obwohl ich gedacht hatte, die Posen würden sich genug unterscheiden, wird meistens einfach „T“ erkannt. Dabei ist es egal ob ich nur einen Arm hebe, oder beide. Das ist natürlich nicht das Ziel des Ganzen, weswegen ich alles nochmal durchsucht habe um herauszufinden wie was erkannt wird.

An sich werden Personen recht gut erkannt. Die einzelnen Gelenke werden auch richtig erkannt. Deshalb ist davon auszugehen, dass irgendwas mit der Posenerkennung komisch funktioniert. 

Aus diesem Grund habe ich mich dazu entschieden, meine Posen Hardcodiert einzuspeichern. Das ist mit Sicherheit nicht die eleganteste Lösung, aber zumindest werden jetzt die richtigen Posen erkannt...

Usability

Da ich jedes Mal zwei Konsolen, den Emulator und das Browerfenster mit dem Localhost manuell öffnen muss, habe ich alle Pfade in Batch- Dateien eingebracht, die man einfach öffnen kann und quasi das Öffnen der anderen Sachen übernehmen.

batch.pngbatch.png

Alle Sachen die benötigt werden, können durch Doppelklick auf „Start“ geöffnet werden. Die Konsolen werden automatisch minimiert.

Anleitung

Da natürlich nicht jeder, der das Game startet sofort weiß, was zu tun ist, habe ich für den Start ein „Tutorial“ integriert und Pfeile, die dunkler werden , wenn man den Arm in die Richtung streckt

Mr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m21s.jpgMr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m21s.jpg
Mr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m58s.jpgMr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m58s.jpg
Mr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m20s.jpgMr.Do It by Movin - Persönlich – Microsoft​ Edge 2024-01-16 18-40-13 - frame at 0m20s.jpg

Fazit

Es lässt sich sagen, dass es besser aber auch schlechter funktioniert, als erwartet. Zunächst hatte ich recht große Hoffnungen in die Funktionen von PoseNet, aber die Posenerkennung hat kläglich gescheitert. Deswegen musste ich alle Posen von Hand festlegen. Die Erkennung der Gelenke wiederum ist eigentlich fast immer ziemlich akkurat, abgesehen von einigen Fehlerquellen. Folglich funktioniert die Steuerung ziemlich flüssig, wenn man nicht gerade Handtücher und Kleidung im Hintergrund rumhängen hat. 

Durch PoseNet habe ich leider auch noch Javascript im Browser laufen. Mit Sicherheit wäre es einfacher, alles über Python zu machen. 

Trotzdem muss man sagen, dass es durchaus schwieriger ist, so zu spielen, als einfach nur durch Tastendruck, was aber auch nicht die Anforderung war. Spaß machen tut es definitiv und mit Verbesserungen der Erkennung werden solche Experimente in Zukunft mit Sicherheit noch besser funktionieren. 

Übrigens: Den ersten Level habe ich tatsächlich nur mit Bewegungssteuerung geschafft.

Video-Dokumentation

Fehlerquellen

Beim Testen sind mir natürlich auch einige seltsame Sachen passiert, die PoseNet erkennt, wenn man vor der Kamera steht. Bei Dunkelheit eine Lampe im Hintergrund haben, verschlechtert die Erkennung.

Dann werden die Handgelenke schlechter erkannt, wenn man z.B. den Ärmel über der Hand hat. Wenn ich den roten Pulli wie oben auf den Bildern anhabe, tut es sich auch schwer, meine Arme zu erkennen.

Manchmal werden auch zufällige Kleidungsstücke oder hängende Tücher im Hintergrund als einzelne Gelenke erkannt.

Am kuriosesten war, als ich mein Headset aufhatte und das Kabel als teil des Skeletons erkannt wurde.

Ein Projekt von

Fachgruppe

Interaktive Medien

Art des Projekts

Keine Angabe

Zugehöriger Workspace

Physical Interfaces / Mensch und Maschine / IA3

Entstehungszeitraum

Wintersemester 2023 / 2024