2010-07-28 15 views
5

Sto cercando di sviluppare un'applicazione per bambini per iPhone che sia in grado di disegnare personaggi sullo schermo con un tocco e voglio sapere come abbinare il personaggio disegnato con il buon carattere dell'alfabeto. Come confronterò le due forme (disegno ed esistente) Qualche idea ?? un po 'di codice?disegno su iphone

+0

Hai trovato la soluzione? – PVCS

risposta

1

Wow, questo sembra un compito difficile. Una possibilità che mi viene in mente sarebbe quella di usare una macchina vettoriale di supporto.

1.) Generare un'immagine del disegno e "vettorializzare" associando i vettori al percorso che l'utente ha disegnato.

2.) È necessario confrontare i vettori di supporto. Quello che vorrei fare è implementare una "domanda di formazione". Lascia che alcuni bambini disegnino (ad esempio 10 volte un A, 10 volte un B, ecc.), Metti i vettori in un database e li usi come vettori di supporto.

3.) È necessario un algoritmo di valutazione che valuta il disegno dell'utente confrontandolo con i vettori di supporto (questa potrebbe essere la parte più interessante di esso). Potrei pensare di misurare le distanze dei vettori di supporto che iniziano e terminano con i vettori disegnati. La svm con la distanza più bassa è la lettera che prendi. Quindi potresti introdurre una distanza che è il "bordo" e prendere tutti i disegni utente sopra questo bordo come non riconosciuti.

Un secondo approccio potrebbe essere la generazione di immagini con le lettere (ad esempio sfondo bianco e lettera nera (non anti-alias)). Si genera nuovamente un'immagine dell'utente che si disegna e si ridimensiona all'immagine per confrontarla, cercando di "sovrapporla" esattamente. Quindi contate i pixel neri che corrispondono alle due immagini e prendete la lettera con il maggior numero di corrispondenze.

Ma, dal momento che ho implementato qualcosa di simile, posso dire che l'approccio svm è più soddisfacente in quanto è possibile aggiungere vettori di supporto se il risultato non è abbastanza buono. La quintessenza è sicuramente il tuo algoritmo di valutazione.

Sembra quasi un paio di settimane di lavoro.

EDIT: Da questo campo interessante ho fatto qualche ricerca e ho trovato una tesi sul riconoscimento della calligrafia. Dai un'occhiata a questo: http://risujin.org/cellwriter/. In pratica descrive l'approccio svm che ho menzionato e fornisce alcuni algoritmi che potrebbero aiutarti.

+0

+1: approccio fresco .. settimane di * fulltime * lavoro :) – iwasrobbed

0

È sempre possibile utilizzare Gesture Recognition ... ma è piuttosto difficile per uno scenario personalizzato come questo.

Altrimenti potresti trovare qualcosa nello Quartz che farà almeno parte di questo per te. Mi interessa vedere come lo risolvi .. sembra una strada piuttosto difficile/interessante.

3

Using GLGestureRecognizer è possibile creare un catalogo e calcolerà una metrica tra una matrice di punti di input rispetto a un "alfabeto" che si predefinisce.

GLGestureRecognizer è un Objective-C attuazione $ 1 Unistroke Recognizer, un semplice algoritmo di riconoscimento dei gesti (vedi Crediti di seguito). È reso disponibile qui in il modulo di un progetto di applicazione di iPhone . È stato implementato sul corso di un paio di serate nel tardo aprile 2009 da Adam Preble.

Un progetto iPhone dimostrativo (Gestures.xcodeproj) è fornito; a La sottoclasse UIView riceve gli eventi di tocco e li invia alla classe GLGestureRecognizer mentre disegna il percorso toccato in bianco. volta che il gesto è completato, il gesto ricampionata è mostrato in verde, il suo centro nel punto rosso, insieme con il nome della corrispondenza migliore, punteggio (più basso è meglio), e il gesto orientamento. Nell'esempio viene utilizzata una dimensione di esempio di 16 punti , che sembra essere adeguata per forme molto semplici .

+0

Cose fantastiche !! – thatsdisgusting

+0

molto bello, ricrea i tuoi gesti abbastanza bene. potrebbe essere facilmente utilizzato per un alfabeto – iwasrobbed