1

私の質問はthis oneに似ていますが、範囲がより具体的です。

私のカード ゲーム アプリケーションでは、ユーザーがスキャンした jpeg 画像内の単語をクリックできるようにしたいと考えています。こちらのサンプルポケモントレカをご覧ください。

この場合、ユーザーはテキスト「Scratch」の上にマウスを置くことができるはずです。テキストの周りにパルス状の長方形の境界線が表示され、クリック可能であることを示します。問題は、テキストの境界をどのように検出するかです。ユーザーがクリックする可能性がある事前にわかっている単語の配列があります (これらはカードごとにデータベースから取得されます)。例を続けると、この場合の配列は ["Scratch", "Live Coal"] になります。ユーザーが「Scratch」をクリックすると、アプリケーションはコールバックを介して、「Live Coal」ではなく「Scratch」が選択されたことを知る必要があります。

この問題を解決するために光学式文字認識ライブラリを使用することを考えていましたが、オープンソースのオプションは品質が低く (GOCR など)、複数のプラットフォーム (Tesseract など) で十分にテストされていません。Windows と Mac の互換性だけが気になります。OCR を必要としない明白な/より単純なソリューション/アルゴリズムがありませんか? データベースには何千ものスキャンされたカードが存在するため、各カードの境界ボックスに単純に手作業でコーディングすることはできません。ユーザーは、クリック可能なテキストの配列を伴う独自のカスタム カード スキャンをアップロードすることもできます。

テキストの色は必ずしも黒ではありません。許可されるさまざまなカードとテキスト スタイルのこのパノラマをご覧ください。黒のカードには白のテキストがあり、最後から 3 番目のカード (ゼクロム) には黒のテキストと白のアウトラインがあります。

任意のプログラミング言語でのソリューションが高く評価されています。ただし、オープンソースのアルゴリズムやライブラリを探していることに注意してください。私のコードは主にこれら 2 つの言語で作成されているため、Ruby または Java で解決策があれば、なおさらです。

編集:配列内の単語/フレーズの順序がカードと同じになることを忘れていました。したがって、配列は ["Live Coal", "Scratch"] ではなく ["Scratch", "Live Coal"] になります。これについて言及しているのは、タスクを単純化できる可能性があるためです。したがって、この例では、単純に黒いピクセルを探すことができます (ただし、白い円の中の黒い星に注意する必要があります)。ただし、攻撃名の下に小さいフォントで説明テキストがある場合は、より困難なケースがあります (例については、パノラマを参照してください)。

4

2 に答える 2

1

簡単にするために、テキストの周りに境界ボックスを視覚的に描画できるプログラムを作成するだけですが、ピクセルの色の違いを検出することもできます。テキストは黒であるため、左上の最も黒いピクセルが大きなインデントなしでカードの下半分にあることがわかります。

于 2011-07-14T20:16:24.607 に答える
0

カーソルが静止している場合、カーソルの下または周囲 4 ピクセルまでに黒いピクセルがあるかどうかを確認します。そうである場合は、カーソルの左、右、上、および下にある最初の 3 つの連続する (文字間に黒以外のピクセルがまだある可能性があるため) 黒以外のピクセルを確認します。はいの場合は、これらの場所を使用して正方形を描きます。OpenCVを使用できます。

于 2011-07-14T20:23:33.997 に答える