Wie am einfachsten Schachbrettmuster erkennen?
-
Hi,
ich komme mir irgendwie blöd vor, weil ich schon mehrere Wochen an dieser Aufgabe sitze, und bisher noch auf keinen grünen Zweig kam...
Ich möchte aus einem Screenshot die Anfangsposition und Größe (also Rectangle) eines Schachbrettmusters erkennen... mithilfe eines neuronales Netzes. Das soll zuverlässig für beliebige Positionen, Größen und Brettvarianten (Hintergrund, Rahmen usw.) funktionieren...
Das Blöde ist, alles Weitere ist schon fertig: Wenn ich die Koordinaten manuell eingebe, werden die Figuren und FEN sowie Gegnerzüge automatisch erkannt, und es wird automatisch gespielt... (Aber leider noch nicht ganz fehlerfrei)
Wie müsste das neuronale Netz aufgebaut sein? Was verwende ich als Trainingsdaten, Ein- und Ausgabe? Was wäre überhaupt der Suchbegriff? Subimage bzw. Pattern recognition bzw. matching? Oder ist das "Image classification"? ( https://www.tensorflow.org/tutorials/images/classification ) Leider steht dort aber nix von Position-Erkennung...
-
@EinNutzer0 was meinst du mit Anfangspositionen erkennen? Eine beliebige Position von verschiedenen Schachfiguren? Das klingt aufwändig. Ich würde das Problem aufteilen. Felder auf dem Schachbrett erkennen und dann Figuren auf dem Feld, oder so. Wenn du alles in einem NN abbilden willst, sind das sehr viele Dimensionen, das wird schon schwer mit Trainingsdaten abzudecken.
-
@Schlangenmensch sagte in Wie am einfachsten Schachbrettmuster erkennen?:
was meinst du mit Anfangspositionen erkennen?
Ich meine das, was da steht. Die Position wo das Brett anfängt und wo es endet (Rectangle).
Falls du es immer noch nicht verstehst: die Bildschirmkoordinaten.
-
Dieser Beitrag wurde gelöscht!
-
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
angsposi
Du brauchst keine neuronale Hype - Technik, da wirst du nie Erfolg mit haben.
Für die Figurenerkennung schon, aber danach habe ich hier nicht gefragt.
Das musst Du vektorisieren Kanten -Erkennung .
Und wie funktioniert das? Ich brauche letztendlich so etwas: (500, 300, 1000, 800). (Also linke obere Ecke, rechte untere Ecke)
Grüße aus Berlin
KarstenJo, Gruß zurück aus Westdeutschland.
-
Dieser Beitrag wurde gelöscht!
-
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Ich würde mal sagen das könnte ein Jahr dauern bis du alle Verfahren umgesetzt hast, ich habe zwar die quellentexte selber her gelitten in den letzten 40 Jahren kann diese aber auch nicht
einfach jemanden geben, dazu benötigt es eine umfangreiche Infrastruktur.Oder man nimmt OpenCV., da benötigt man nur eine Woche Einarbeitungszeit.
-
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
@Schlangenmensch sagte in Wie am einfachsten Schachbrettmuster erkennen?:
was meinst du mit Anfangspositionen erkennen?
Ich meine das, was da steht. Die Position wo das Brett anfängt und wo es endet (Rectangle).
Falls du es immer noch nicht verstehst: die Bildschirmkoordinaten.
Ich habe dich dann fehlverstanden, weil du im Nachhinein von Figuren und Zügen gesprochen hast.
Dann brauchst du noch Trainingsdaten, also Paare von Beispielbildern und Ergebnis.
Man kann auch Eingaben künstliche erzeugen, in dem man Schachbretter künstlich verschiebt und/oder rauschen drauf legt.Außerdem musst du dein Netz definieren.
Die Eingabe definiert sich durch deine Bildergröße und die Ausgabe durch deine Koordinaten.
Wie die Hiddenlayer aussehen sollen/können ist nicht so trivial. Früher hätte man verschiedene Anzahl an Layer mit verschiedener Anzahl an Neuronen in einem Feed Forward Netz versucht.
Bei Convolutional Networks würde ich Mal gucken, was so typische Topologien sind, es gibt da ja auch schon auf verschiedene Probleme vortrainierte. Außerdem gibt es "typische" Parameter, wie z.B. welche Aktivierungsfunktion mit welchen Parametern gut funktionieren.
Soweit ich mich richtig erinnere hat Tensorflow zu NNs ganz gute Tutorials auf der Internetseite, ich würde mich an deiner Stelle da Mal durcharbeiten.Wenn man die Schachbrettecken gut von Felderecken unterscheiden kann, kann ich mir gut vorstellen, dass man das Problem mit einem Neuronalennetz lösen kann.
-
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
jedenfalls ist der Weg der neuronalen veranstalltung immer grundsätzlich der falsche , soviel sei mal gesagt, es ist Hype der nur in seltenen Fällen nützlich ist.
Hast du überhaupt eine Ahnung wozu Neoronale Netze bzw. Deep Learning aktuell fähig sind?
Ich verweiße hier nur mal auf den Wiki Artikel zu Deep Learning.
-
Dieser Beitrag wurde gelöscht!
-
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Wie müsste das neuronale Netz aufgebaut sein? Was verwende ich als Trainingsdaten, Ein- und Ausgabe? Was wäre überhaupt der Suchbegriff? Subimage bzw. Pattern recognition bzw. matching?
Also ich bin kein Experte auf dem Gebiet. Neben einer Vorlesung an der Uni habe ich mal das Buch Machine Learning mit Python gelesen. Und ehrlich gesagt würde ich da gerne mehr machen wollen.
Ich würde am Anfang erst einmal ein paar Versuche mit Python starten. Mit Python lassen sich sehr schnell Ergebnisse erziehlen. Mittels pip z.B. lassen sich die Module (Scikit-Learn, NumPy, Pandas, MatplotLib, OpenCV, SciPy, Keras) installieren.
Mein Voschlag wäre es die Kamera fix zu installieren und das Bild in die einzelnen Felder zu unterteilen. Jedes einzelne Feld-Bild wäre dann die Eingabe des KNN, s.d. ein Eingabeneuron einem 24 Bit RGB Pixel entspricht. Als Ausgabeneuronen würde ich 8 Stück ausprobieren, Neuron 1 entspricht Bauer, Neuron 2 Turm, Neuron 3 Springer, Neuron 4 Läufer, Neuron 5 König, Neuron 6 Königin, Neuron 7 Figur ist weiß, Neuron 8 Figur ist schwarz. Für alle Ausgabeneuronen gilt, 0x00FFFFFF = true, 0 = false.
So kannst du einen Screenshot in die 64 Felder unterteilen und bekommst damit die ersten 64 Trainingsdaten.
PS:
DIe Entwicklung eines KNN kenne ich als einen explorativen Prozess, man muss viel ausprobieren.
-
Hm, da die Anfangsstellungen der Figuren variieren können, würde ich eigentlich nicht versuchen wollen, die Position/Koordinaten des Schachfeldes bzw. -Bretts über die Figuren zu erkennen... stattdessen würde ich lieber das typische Schachbrettmuster (Gitternetz?) erkennen wollen.
@KahnSoft Kein Grund, unfreundlich zu werden. Ein Jahr Einarbeitungszeit, obwohl die Erkennung der einzelnen Figuren bereits (zum Teil) funktioniert (wenn die entsprechenden Teilbilder vorhanden sind), halte ich für sehr/völlig aus der Luft gegriffen. Du kennst mich und meinen Kenntnisstand doch gar nicht.
Aber ja, vielleicht ist ein KNN, um ein Gitternetz zu erkennen, nicht der optimale Weg/Ansatz... deshalb frage ich doch nach.
-
Vllt. interessiert dich diese wissenschaftliche Arbeit dazu: Chessboard and Chess Piece Recognition With the Support of Neural Networks ?
-
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
stattdessen würde ich lieber das typische Schachbrettmuster (Gitternetz?) erkennen wollen.
Dieser Ansatz erscheint mir ein wenig zu komplex. Denn in diesem Fall müsste jedes Ausgabeneuron den Zustand eines einzelnen Feldes wiederspiegeln z.B. 0 = leer, 1 = weißer Bauer, 2 = schwarzer Bauer, ... Das entspricht 13 mögliche Zustände pro Feld. Das entspricht 64*13 = 832 mögliche Ausgabezustände. Nun muss jeder gewünschte Output auch in den Trainingdaten vorhanden sein.
Wie macht man da die Trainingsdaten, s.d. alle möglichen Outputs in den Ausgabeneuronen abgedeckt sind?
Ein Ansatz wäre Brute Force. Schachfeld leeren, auf Feld 1 ein weißer Bauer stellen, Screenshot machen und entsprechend beschriften. Das macht 832 Screenshot. Wenn wir pro Screenshot 5 MInuten benötigen würde, wäre man alleine hierfür 5*832 Minuten = 9 Arbeitstage damit beschäftigt.
Und hierbei habe ich noch nicht berücksichtigt dass benachbarte Felder die Interpretation des Feldes nicht stören dürfen.
-
@EinNutzer0
PS: Mein Ansatz hat auch einen Vorteil. Die Ausgabe eines Neutrons lässt sich als Wahrscheinlichkeit interpretieren. (0x00FFFFFF = 100%, 0 = 0 %).
-
@Quiche-Lorraine sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Die Ausgabe eines Neutrons ...
Du musst bei der Neutronenausgabe allerdings auch den Strahlenschutz beachten. Hat dein Netz auch Protonen und Elektronen?
-
@wob sagte in Wie am einfachsten Schachbrettmuster erkennen?:
@Quiche-Lorraine sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Die Ausgabe eines Neutrons ...
Du musst bei der Neutronenausgabe allerdings auch den Strahlenschutz beachten. Hat dein Netz auch Protonen und Elektronen?
Ich denke, sie oder er meinte damit ein Neuron... (das sind, vereinfacht gesagt, einzelne Gehirnzellen - und ein planvoller Zusammenschluss mehrerer solcher Zellen (KNN) verhält sich eben so (physikalisch gesehen, nicht biochemisch), wie das Gehirn... Deshalb hat man das Ding in der Inof ja so genannt...)
...Obwohl... wenn man die Aktivierungsfunktion als ein Neurotransmitter (Botenstoff) interpretieren möchte, dann gibt es vielleicht auch biochemische Parallelen.
Wie auch immer, ihr werdet es nicht glauben, aber ich bin meinem Ziel noch keinen Schritt näher gekommen.
-
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Ich denke, sie oder er meinte damit ein Neuron... (das sind, vereinfacht gesagt, einzelne Gehirnzellen - und ein planvoller Zusammenschluss mehrerer solcher Zellen (KNN) verhält sich eben so (physikalisch gesehen, nicht biochemisch), wie das Gehirn... Deshalb hat man das Ding in der Inof ja so genannt...)
Ich bin mir sicher, @wob ist das bewusst
Wie auch immer, ihr werdet es nicht glauben, aber ich bin meinem Ziel noch keinen Schritt näher gekommen.
Was hast du denn bis jetzt versucht?
-
@EinNutzer0 sagte in Wie am einfachsten Schachbrettmuster erkennen?:
...Obwohl... wenn man die Aktivierungsfunktion als ein Neurotransmitter (Botenstoff) interpretieren möchte, dann gibt es vielleicht auch biochemische Parallelen.
Nein, nur ein Freudscher Verschreiber.
Wie auch immer, ihr werdet es nicht glauben, aber ich bin meinem Ziel noch keinen Schritt näher gekommen.
Warum nicht?
-
Leider kein Wunder, du hörst ja nicht auf das was man Dir nahe legt,
und so geht es leider in der Softwareindustrie einher, ein Pulk von Chauvinisten wo ein jeder der beste Entwickler sei.
Wir jedenfalls waren früher froh wenn wir Hinweise per Briefpost kommunizierten, heute finden sich nur noch Modul -Zusammenstecker . Und was nicht passt kann man halt auch nicht machen ^^
-
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Wir jedenfalls waren früher froh wenn wir Hinweise per Briefpost kommunizierten,
echt traurig, aber wenigstens bin ich schlauer als du, wenn du anscheinend gar nichts hinbekommst, aber Hauptsache ist, man erteilt anderen irgendwelche Anweisungen...
Versteh mich bitte nicht falsch, ich weiß das dies ein öffentliches Forum ist, aber ich hatte dich in keinster Weise nach deiner Meinung gefragt... Ich mag deine Sorte Mensch nicht... Such dir doch ein anderes Hobby...