タッチで画面に文字を描くことができる子供向けのiPhoneアプリケーションを開発しようとしています。アルファベットの良い文字で描かれた文字を一致させる方法を知りたいです。2 つの形状 (描画と既存) を比較するにはどうすればよいですか? いくつかのコード?
3 に答える
GLGestureRecognizerを使用すると、カタログを作成でき、事前に定義した「アルファベット」に対して入力ポイント配列間のメトリックを計算します。
GLGestureRecognizerは、シンプルなジェスチャ認識アルゴリズムである1ドルのUnistroke RecognizerのObjective-C実装です(以下のクレジットを参照)。ここでは、iPhoneアプリケーションプロジェクトの形で利用できます。これは、2009年4月下旬にAdamPrebleによって2、3晩にわたって実装されました。
デモiPhoneプロジェクト(Gestures.xcodeproj)が提供されています。UIViewサブクラスは、タッチイベントを受信し、タッチされたパスを白で描画しながら、それらをGLGestureRecognizerクラスに送信します。ジェスチャが完了すると、リサンプリングされたジェスチャが緑色で表示され、その中心が赤い点になり、最適な一致の名前、スコア(低いほど良い)、およびジェスチャの向きが示されます。この例では、16ポイントのサンプルサイズが使用されています。これは、非常に基本的な形状に適しているようです。
うわー、これは難しい作業のように聞こえます。私の頭に浮かぶ可能性の1つは、サポートベクターマシンを使用することです。
1.)図面の画像を生成し、ユーザーが描いたパスにベクトルを添付して「ベクトル化」します。
2.)比較するにはサポートベクターが必要です。私がすることは、「トレーニングアプリケーション」を実装することです。何人かの子供に絵を描いてもらい(たとえば、Aの10倍、Bの10倍、aso ...)、ベクトルをデータベースに入れて、サポートベクターとして使用します。
3.)サポートベクターと比較してユーザーの描画を評価する評価アルゴリズムが必要です(これが最も興味深い部分である可能性があります)。サポートベクターの始点と終点から描画されたベクトルまでの距離を測定することを考えることができます。距離が最も短いSVMがあなたが取る手紙です。次に、「境界線」である距離を導入し、この境界線より上のすべてのユーザー図面を認識できないものとして取得する場合があります。
2番目のアプローチは、文字を使用して画像を生成することです(たとえば、白い背景と黒い文字(アンチエイリアスなし))。ユーザーの描画の画像を再度生成し、それを比較する画像にサイズ変更して、正確に「重ね合わせ」ようとします。次に、2つの画像で一致する黒いピクセルを数え、最も一致する文字を取得します。
しかし、私は似たようなものを実装したので、結果が十分でない場合はサポートベクターを追加できるので、svmアプローチの方が満足のいくものであることがわかります。その真髄は確かにあなたの評価アルゴリズムです。
とにかく、数週間の作業のように聞こえます。
編集:これは興味深い分野なので、私はいくつかの調査を行い、手書き認識に関する論文を見つけました。これを見てください:http://risujin.org/cellwriter/。それは基本的に私が言及したsvmアプローチを説明し、あなたを助けるかもしれないいくつかのアルゴリズムを提供します。
ジェスチャ認識はいつでも使用できますが、このようなカスタムシナリオではかなり困難です。
そうしないと、 Quartzで、これの少なくとも一部を実行する何かが見つかる可能性があります。私はあなたがこれをどのように解決するかを見たいと思っています..それはかなり難しい/興味深い道のように聞こえます。