Domanda

Sto sviluppando un'applicazione di realtà aumentata per Android che utilizza la fotocamera del telefono per riconoscere la disposizione dei quadrati colorati su ogni faccia del cubo di un Rubik.

Una cosa di cui non sono sicuro è come andrei esattamente a rilevare e riconoscere i quadrati colorati su ogni faccia del cubo. Se guardi il cubo di Rubik, puoi vedere che ogni quadrato è uno dei sei possibili colori con un bordo nero sottile. Questo mi ha portato a pensare che dovrebbe essere relativamente semplicemente rilevare un quadrato, utilizzando possibilmente un'API di rilevamento di marcatori esistente.

Rubik's Cube

La mia domanda è davvero che qualcuno ha avuto qualche esperienza con il riconoscimento delle immagini e Android? Idealmente, mi piacerebbe essere in grado di implementare e esistente API, ma sarebbe un progetto interessante da fare da zero se qualcuno potesse indicarmi nella giusta direzione per iniziare.

Molte grazie in anticipo.

È stato utile?

Soluzione

Vuoi puntare la fotocamera su un cubo e farne capire la configurazione?

Riconoscere gli oggetti nelle fotografie è un problema AI aperto. Quindi dovrai limitare un po 'il problema per ottenere qualsiasi trazione su di esso. Suggerisco di iniziare con qualcosa di simile:

  1. Il cubo verrà fotografato da una distanza di esattamente 12 pollici, con una sorgente luminosa da 100 W direttamente dietro la fotocamera. Il cubo verrà impostato in diagonale in modo da presentare esattamente 3 facce, con un angolo al centro. La fotocamera verrà posizionata in modo che si concentri direttamente sull'angolo del cubo al centro.

  2. Una foto sarà scattata. Quindi il cubo verrà girato di 180 gradi in verticale e in orizzontale, in modo che le altre tre facce siano visibili. Verrà scattata una seconda foto. Dato che sai esattamente dove dovrebbe essere ogni faccia, prendi alcuni pixel da ogni regione e supponi che sia il colore di quel quadrato. Ricorda che il cubo di solito verrà rimescolato, non uniforme come mostrato nella foto qui. Quindi devi sempre guardare 9*6 = 54 piccoli quadrati per ottenere il colore di ciascuno.

  3. Le informazioni in queste due immagini definiscono la configurazione del cubo. Generare un'immagine del cubo nella stessa configurazione e consentire all'utente di confermarla o correggerla.

Potrebbe essere più semplice scattare 6 immagini: una di ogni faccia e viaggiare intorno ai volti in ordine ben definito. Ricorda che il quadrato centrale di ogni faccia non si muove e definisce il colore corretto per quella faccia.

Una volta che hai la configurazione, è possibile utilizzare le operazioni OpenGL per ruotare le fette di cubo. Questo sarà un programma con centinaia di righe di codice per definire e ruotare il cubo, oltre a qualunque cosa tu faccia per il riconoscimento delle immagini.

Altri suggerimenti

Oltre a ciò che Peter ha detto, è probabilmente meglio sovrapporre le linee di guida sulla foto del cubo mentre l'utente scatta le immagini. L'utente quindi allinea il cubo all'interno delle linee di guida, sia che si tratti di un singolo lato (una linea di guida quadrata) o di tre lati (tre quadrati in prospettiva). Potresti anche che l'utente specifichi il numero di caselle colorate in ogni riga. Nel tuo codice, campiona il colore in quello che dovrebbe essere il centro di ogni scatola colorata e confrontarlo con le altre scatole colorate (entro un certo livello di tolleranza) per identificare i colori. Oltre a fornire i risultati riconosciuti all'utente, sarebbe bello consentire all'utente di apportare modifiche ai colori riconosciuti. Non sembra che sia necessario un riconoscimento di immagini di fantasia.

Bella idea, sto pianificando di usare anche i rilevatori di visione e marker per computer, ma per un altro progetto. Sto ancora cercando se ci sono informazioni disponibili sul Web, Ex: collegamento di OpenCV o Artoolkit all'SDK Android. Se hai ulteriori informazioni, su come collegare un'API per la visione artificiale, fammelo sapere.

A presto e Goodluck!

Nyartoolkit utilizza il rilevamento dei marker ed è realizzato in Java (oltre a gestiti C# per i dispositivi Windows). Non so quanto funzioni bene sulla piattaforma Android, ma l'ho visto utilizzato sui dispositivi mobili Windows ed è molto ben fatto.

Buona fortuna e felice programmazione!

Suggerirei di guardare la biblioteca di OpenCV dell'Andoide. Probabilmente vuoi esaminare gli algoritmi di rilevamento BLOB. Potresti anche prendere in considerazione le linee o i contatti di Hough per rilevare i quad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top