Ich entwickle eine Augmented-Reality-Anwendung für Android, die mit der Kamera des Telefons die Anordnung der farbigen Quadrate auf jeder Seite eines Zauberwürfels erkennt.
Eine Sache, über die ich mir nicht sicher bin, ist, wie genau ich die farbigen Quadrate auf jeder Seite des Würfels erkennen und erkennen würde. Wenn Sie sich einen Rubik's Cube ansehen, können Sie sehen, dass jedes Quadrat eine von sechs möglichen Farben mit einem dünnen schwarzen Rand ist. Dies führte mich zu der Annahme, dass es relativ einfach sein sollte, ein Quadrat zu erkennen, möglicherweise unter Verwendung einer vorhandenen Marker-Erkennungs-API.
Meine Frage ist wirklich, hat jemand hier irgendwelche Erfahrung mit Bilderkennung und Android? Idealerweise würde ich gern in der Lage sein, eine existierende API zu implementieren, aber es wäre ein interessantes Projekt von Grund auf, wenn mir jemand in die richtige Richtung zeigen könnte, um loszulegen.
Vielen Dank im Voraus.
Möchten Sie die Kamera auf einen Würfel richten und die Konfiguration verstehen?
Das Erkennen von Objekten in Fotos ist ein offenes KI-Problem. Also müssen Sie das Problem ein wenig einschränken, um etwas davon zu bekommen. Ich schlage vor, mit etwas wie:
zu beginnenDer Würfel wird aus einer Entfernung von genau 12 Zoll fotografiert, mit einer 100W Lichtquelle direkt hinter der Kamera. Der Würfel wird diagonal gesetzt, so dass er genau 3 Seiten zeigt, mit einer Ecke in der Mitte. Die Kamera wird so positioniert, dass sie direkt auf die Würfelecke in der Mitte fokussiert.
Ein Foto wird aufgenommen. Dann wird der Würfel um 180 Grad vertikal und horizontal gedreht, so dass die anderen drei Flächen sichtbar sind. Ein zweites Bild wird gemacht. Da Sie genau wissen, wo jedes Gesicht erwartet wird, nehmen Sie ein paar Pixel aus jeder Region und nehmen an, dass dies die Farbe dieses Quadrats ist. Denken Sie daran, dass der Würfel normalerweise nicht einheitlich ist, wie in der Abbildung gezeigt. Sie müssen also immer auf 9 * 6 = 54 kleine Quadrate schauen, um die Farbe jedes einzelnen zu erhalten.
Die Informationen in diesen beiden Bildern definieren die Würfelkonfiguration. Generiere ein Bild des Würfels in der gleichen Konfiguration und erlaube dem Benutzer, es zu bestätigen oder zu korrigieren.
Es könnte einfacher sein, 6 Bilder zu machen - eines von jedem Gesicht und in einer genau definierten Reihenfolge um die Gesichter zu reisen. Denken Sie daran, dass sich das mittlere Quadrat jeder Fläche nicht bewegt und die richtige Farbe für dieses Gesicht definiert.
Sobald Sie die Konfiguration haben, können Sie OpenGL-Operationen verwenden, um die Würfelscheiben zu drehen. Dies wird ein Programm mit Hunderten von Codezeilen sein, um den Würfel zu definieren und zu drehen, sowie alles, was Sie für die Bilderkennung tun.
Zusätzlich zu dem, was Peter gesagt hat, ist es wahrscheinlich am besten, Führungslinien auf dem Bild des Würfels zu überlagern, wenn der Benutzer die Bilder macht. Der Benutzer richtet dann den Würfel innerhalb der Führungslinien aus, sei es eine einzelne Seite (eine quadratische Führungslinie) oder drei Seiten (drei Quadrate in der Perspektive). Vielleicht möchten Sie auch, dass der Benutzer die Anzahl der farbigen Kästchen in jeder Zeile angibt. Probieren Sie in Ihrem Code die Farbe aus, die die Mitte jeder farbigen Box darstellen soll, und vergleichen Sie sie mit den anderen farbigen Boxen (innerhalb einer Toleranzstufe), um die Farben zu identifizieren. Zusätzlich zum Bereitstellen der erkannten Ergebnisse für den Benutzer wäre es angenehm, dem Benutzer zu erlauben, Änderungen an den erkannten Farben vorzunehmen. Es scheint nicht, wie ausgefallene Bilderkennung benötigt wird.
Gute Idee, ich plane, auch Computer Vision- und Marker-Detektoren zu verwenden, aber für ein anderes Projekt. Ich suche immer noch nach verfügbaren Informationen im Internet, zB: Verknüpfung von openCV oder ARtoolkit mit dem Android SDK. Wenn Sie weitere Informationen zum Verknüpfen einer Computer-Vision-API haben, lassen Sie es mich wissen.
Bis bald und guten Rutsch!
NYARToolkit verwendet Marker-Erkennung und ist in JAVA (sowie verwalteten C # für Windows-Geräte) gemacht. Ich weiß nicht, wie gut es auf der Android-Plattform funktioniert, aber ich habe es auf Windows Mobile-Geräten verwendet, und es ist sehr gut gemacht.
Viel Glück und glückliche Programmierung!
Ich würde vorschlagen, auf die Andoid OpenCV-Bibliothek zu schauen. Sie möchten wahrscheinlich die Blob-Erkennungsalgorithmen untersuchen. Sie können auch Hough-Linien oder Countours betrachten, um Quads zu erkennen.
Tags und Links android image-processing computer-vision augmented-reality rubiks-cube