Erstellt am
June 27, 2023
|
Von
Fabian & Samuel
Sonstiges
Unternehmenskultur
Health
Methode
FinsurTech
Business
Tech

KI erlebbar machen

Spätestens seit OpenAI Chat-GPT 3 veröffentlicht hat, ist KI nicht nur in der Tech-Szene das Top-Thema. Große Firmen, wie Google und Meta investieren gigantische Summen, um mit der raschen Entwicklung mithalten zu können. Doch trotz der Bekanntheit von KI: So wirklich nachvollziehen was dahintersteckt, ist selbst für Technikaffine eine Herausforderung. Wir haben daher ein Projekt gestartet, mit dem wir KI veranschaulichen und erlebbar machen wollen.

Erlebbar sollte sie aber nicht nur für uns selbst werden, sondern auch für BesucherInnen des CodeCamp:N. Der große blaue Billard-Tisch, der BesucherInnen des CodeCamp sofort ins Auge fällt, hat sich daher für dieses Projekt angeboten. Wir, das sind Samuel, Tobias und ich (Fabian) entschieden uns also für eine KI-Anwendung, die man beim Billard nutzen kann.

Billardtisch in der Glamflat

Wobei könnte uns KI beim Billard spielen unterstützen?

Du hast sicherlich schon mal ein Billard-Game auf dem Smartphone oder am PC gespielt. Hier bestimmst du, aus welcher Richtung und mit wie viel Stärke, die weiße Kugel angespielt werden soll. Dabei wirst du durch kleine Hilfslinien unterstützt, die dir die ausgerechnete Richtung der angespielten Kugel anzeigen.

Beispiel Game:  8Ball Pool von Miniclip https://www.miniclip.com/games/8-ball-pool/

Wir fragten uns, ob wir dieses Prinzip mit den Hilfslinien auf ein echtes Billardspiel übertragen könnten.

Minimum viable Product (MVP) definieren

Was einfach klingt, ist im Detail doch sehr komplex. Um das Anspielen der weißen Kugel berechnen zu können, mussten wir zunächst herausfinden, an welcher Position Kugeln auf dem Tisch liegen und welche Farbe sie jeweils haben könnten.  

Für unser MVP benötigen wir also folgende Features:

• Ein Livestream des Billardtisches

• Den Einsatz von Computervision, um die Billardkugeln zu erkennen

• Ein neuronales Netz, das die Billardkugeln nach Farbe einordnet

• Eine Weboberfläche, die einen Livestream mit markierten Billardkugeln zeigt und anzeigt, welche Kugeln noch im Spiel sind

Dafür haben wir mit den folgenden Technologien gearbeitet:

• Für die Kommunikation mit der GoPro Kamera: Python SDK

• Für die Bildanalyse und Verarbeitung: OpenCV

• Für die Kugelbestimmung nach Farbe: Tensorflow

• Für die Kommunikation zwischen Backend und Frontend: Websocket

• Für das Frontend (Weboberfläche): Flutter

Schaubbild Achitektur

Die GoPro Kamera sprachen wir also mittels des Open GoPro Python SDK (Library für die Kommunikation mit der Schnittstelle der GoPro) an. Die Livebilder (Frames) analysierten und verarbeiteten wir dann mit OpenCV  (Library mit Computer-Vision-Algorithmen) und Tensorflow  (Framework für maschinelles Lernen). Die bearbeiteten Frames, sowie Zusatzinformationen wurden über einen Websocket-Stream an das Flutter-Frontend übertragen. Über diesen Stream konnten auch Daten zurück an das Backend geschickt werden.

Anlernen der Künstlichen Intelligenz

Unsere KI für das MVP muss folgendes Wissen:

1. Wo im Bild ist der Tisch und wo verlaufen seine Kanten?

2. Wo auf der Tischplatte liegen Kugeln?

3. Welche Kugeln sind das?

1. Tischerkennung

Die Tischerkennung war relativ einfach: Die größte blaue Fläche in dem Bild ist mit Sicherheit der Tisch. Mittels Segmentierung konnten wir das Bild auf diesen wesentlichen Teil für die weitere Analyse beschränken. Anhand der Abmessungen von dem Tisch konnten wir dann mit etwas Mathematik die Kanten um die erkannte blaue Fläche setzen.

Original Bild
Isolierte Tischfläche (Segmentierung)
Erkannte Tichkanten

2. Kugelerkennung

Gewagte These: Kugeln sind rund.

Daher gingen wir davon aus, dass es sich bei allen Kreisen (in einer bestimmten Größe), die sich auf unserer Tischplatte befanden, um eine unserer Kugeln handelt. Dafür verwendeten wir eine Methode von OpenCV, nämlich Circle Hough Transform. Damit lassen sich Kreise in einem Bild erkennen. So konnten wir die Position aller Kreise – also Kugeln in einem bestimmten Bereich herausfinden.

Markierte Kugeln - erkannt über Circle Hough Transformation

Welche Kugeln sind das?

Wir wussten jetzt also, wie viele Kugeln auf dem Tisch lagen und an welcher Position sie sich befanden. Für weitere Informationen mussten wir jetzt noch herausfinden, welche Kugeln tatsächlich an welcher Position lagen. Diese Arbeit sollte ein neuronales Netz für uns übernehmen.

Dazu mussten wir unsere KI erst einmal mit Daten füttern. Wir benötigten also sehr viele Beispielbilder, die wir für jede Kugel auszeichnen, also mit Labels versehen mussten.

Für jede Kugel nahmen wir ein Video auf, auf dem wir die Kugel auf unserem Tisch hin und her rollen ließen. Da wir bereits eine Methode hatten, um Kugeln auf dem Tisch zu erfassen, generierten wir dann, aus einem Video mit einer Kugel Referenzbilder, inklusive zugehörigen Labels. Bei einem Video von 120 Sekunden und 30 FPS (Bilder pro Sekunde), kommen so pro Billardkugel 3600 Einzelbilder zusammen. Dies haben wir dann für alle 17 Kugeln gemacht.

Mit dieser Menge an Referenzdaten konnte unsere KI nun auch neue Bilder in Echtzeit analysieren und die Kugeln einsortieren. Hier gilt allerdings: Rechenleistung is the limit!

Einzelvideo mit der schwarzen 8 zum Anlernen der KI.

Dürfen wir vorstellen: AI.Cue

Geschafft! Das MVP unseres intelligenten Billardassistenten steht. Wir tauften es auf den Namen AI.Cue.

Nochmal zusammengefasst, folgendes haben wir bisher umgesetzt:

• Livestreamübertragung durch die GoPro Kamera an unser Backend

• Analyse jedes Frames mithilfe des Backends von OpenCV. Erkennung der Tischplatte und aller darauf befindlichen Kugeln

• Einsortierung der Kugeln nach Farbe, bzw. Nummer, mittels neuronalen Netzes

• Anzeige im Frontend des Livestreams mit markierten Kanten und Kugeln, sowie eine Darstellung aller Kugeln mit ihrem jeweiligen Status (Aktiv/ Eingelocht)

Ausblick

Nachdem wir jetzt die Grundlage geschaffen haben, um mit Ai.Cue die nächsten Entwicklungsschritte zu gehen, arbeiten wir an einem Feature, das es ermöglicht auf dem Livebild einen virtuellen Cue einzuzeichnen. So ließe sich vom Backend die prognostizierte Laufbahn der angespielten Kugeln erhalten.  

Dazu dann aber mehr in Part 2.

In der Entwicklung: Einzeichnen eines virtuellen Cue

Neugierig geworden?

Vereinbare einen Termin mit Sebastian, um gemeinsam herauszufinden, wie wir Dich unterstützen können.

Oder schreib mir:

01759723518

Sebastian Schwiedernoch

ssc@codecamp-n.com

Neugierig geworden?

Vereinbare deinen Video-Call mit Sebastian, um gemeinsam herauszufinden, wie wir dich unterstützen können.

Oder schreib mir: