自作のCAPTCHAを作ろうと考えています。
このCAPTCHAは、「歪んだ文字を読ませてそのまま入力させる」タイプではなく、「質問文を読ませて適切な答えを入力させる」というものです。
文字認識だけでなく、質問文の内容を理解し、適切な解答を導き出す事を要求するため、スパム対策としてはかなり有効なのではないかと考えています。
また、質問文の内容理解という高い要求を行うため、本物の人間が読めない程歪んだ文字を用意する必要も無くなります。
(似たコンセプトのCAPTCHAとして、既に妹認証というモノも存在します)
この質問文の文字に使用するフォントとして、文字認識が困難な、それでいて人間には読むことの出来るフォントを使用しようと考えています。
(文字認識のハードルを上げる事で、少しでも突破が困難になればという予備策です)
手書き文字や筆文字がこれに該当すると思うのですが、文字認識の精度や特徴について詳しく知らないため、本当に認識し難いフォントなのか判断がつきません。
文字認識が困難になるフォントとして、どのようなものがあるでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
まずはちょっといたお断りから…
これは直接の回答ではありません。
ちょっと長くなりますが、単刀直入に回答できない理由と、参考になりそうなアイディアを少し書きます。
###回答しにくい理由
ご質問の内容は、興味深い取り組みですね。しかしながら、sounisi5011さんのご質問にまともに回答しようと思うとかなり難しいです・・・
文字認識の精度や特徴について詳しく知らないため、本当に認識し難いフォントなのか判断がつきません。
との事ですが、逆に詳しく知っていても簡単には判断の付かない問題だと思います。
文字認識の手法には様々なものがあり、また同じ手法でもプログラムの実装方法によっても認識精度や処理速度が異なります。
どんな文字でも素早く正確に認識出来るシステムはまだ無いか、もしあっても非常に高価です。
つまり、どんなシステムを想定して『ハードルを上げる』事を検討するのかによって回答が異なりますし、どの程度効果があるかは、実際にテストしてみないと分からないという側面もあります。
一方、この手のテーマについて論ずる際は、認識する側もそれを阻止する側も、単純に認識率だけを問題にするのではなく、それに要するコスト(システムの値段だけでなく処理に要する時間も含む)が、対象となる情報の価値と見合ったものかという観点からも検討する必要があります。
言い換えるとsounisi5011さんが(機械認識に対する)どの程度の難読化を望んでいるかによっても回答が異なってきます。
という前置きの上で、いくらかでもご参考になればと思い、少し情報連携致します。
###認識しにくい状況を作るには?
まず、認識しにくいフォントを判断する上での近道は、最も認識しやすいフォントについて知ることです。
もし対象がASCII文字だけならば、それが OCR-B である事に多くの方が同意されると思います。ですから、このフォントからの ズレ(=ノイズ)が大きい程認識しにくくなると考えられます。
しかし、質問に対する 一意の回答 を要求するとなると、日本人が対象であれば当然、日本語フォント について考慮する必要があります。そうすると、この問には必ずしも簡単には答えられません。(ご参考)
世の中には手書きフォントというものもありますし(たとえばこちらやこちら)、直筆の文字からフォントを作成するツール(たとえばこちら)だってあります。とは言え、手書き文字の認識精度も高くなっているので、単純に手書きフォントにしたから認識率を下げられるというものでもありません。
そもそも、機械的に認識しにくい癖字は人間にとっても読みにくいものです。
それで、ちょっと文字認識の 原理に立ち返って みると、ザックリとした言い方をすれば、どんな方式であれ以下の2つの過程を経て認識していると考えられます。
- 対象の画像から、文字を構成している「線」を抽出する
- 線の集まりに色々なフィルター(数学的な変換)を適用して、どの文字情報とマッチするかを調べる
1.については、画像の輪郭線や中心線を抽出する方式が一般的です。
2.については色々な手法がありますけれども、要するに「お手本」からの歪みが大きい程認識しにくくなります。
フォントの種類を変えるとか、人間でも判別しにくい程文字を歪ませるというのは、上記の分類で言えば 2. に該当します。
ただ、機械認識に影響を与える程に歪ませると人間にも読みにくくなってしまうというのは、どんなフォントを選んだとしても同じではないでしょうか?
ですから、ある程度の読みやすさをキープしつつパターン認識をしにくくするには、otnさんのご指摘のように「パターン数を増やす」しか無い訳です。
これは、スパム防止用の一般的な取り組みと同じです。「ランダムな文字列(=パターン数の多さ)×文字列の歪み(=個々の文字の認識しにくさ)」で機械認識を少しでも難しくしようということです。
sounisi5011さんの取り組みは、こうしたジレンマ(=機械認識しにくくなる程歪ませると人間も読めなくなる)を回避するためのはずなので、単純にフォントを変えるという方法では不十分なことは明らかです。
また、意味のある質問文を用意するという観点からすると、パターン数の増加も結構たいへん(=コストが掛る)です。
そこで、上記 1. (線の抽出を困難にさせる)をプラスすることで、人間には読めるが機械認識を困難にさせる方法を検討してはいかがでしょうか?
要するに、一つの要素だけに頼ってズレを大きくしてしまうと人間にも読みにくくなってしまうので、たくさんの要素を少しずつ変化させ、その組み合わせでパターン数を 劇的に 増やすという考え方です。
思いつくままに幾つか例を挙げると、以下のような複数の要素をランダムに変化させることができます。
- 幾つかのフォントを混ぜる
- 文字のサイズを変化させる
- 文字の歪みを変化させる
→斜体を使用する際も、斜度を幾つか織り交ぜる - 文字の太さを変化させる(一つの文字の中でも場所によって変化させる)
- 文字の濃さを変え、場所によってはかすれを生じさせる
- 文字のベースラインを不揃いにする
- 文字の回転を変化させる
- あまり難しくない文字については「鏡文字」も含める(サンプル)
- 地のパターンを変えたり、ランダムなドットのマスクを掛けたりする
→色覚異常検査に使用するようなパターン(文字、数字、絵柄など)を織り交ぜる(ご参考)
(もっとも、本当の色覚異常検査のパターンでは色弱の方などハンディキャップをお持ちの方にも認識出来なくなってしまうので、実際のパターンの色調には注意が必要です。)
でもって、たとえば2桁の数値の文字認識しにくいパターンを数種類用意しておき、それを数個ランダムな順番に表示させて、一番大きな数を答えさせるようにすると、それだけでかなりのパターン数を稼げます。
同様に、蝶とかカブトムシのような、だれでも分かりやすい図柄を数種類用意しておいて、それが何かを答えてもらうというやり方でもかなりのパターンを稼げます。
そうやって、「妥当な種類の質問パターン」×「個々の文字フォントのパターン」×「認識しにくい図柄」×「表示順序」によってパターン数を増やしてやれば、事前の準備はある程度大変でもそれ程複雑なプログラミングなしに、機械認識がある程度困難なパターンを作成できると思います。
以上、幾らかでもご参考になれば幸いです。
投稿2015/11/30 14:40
総合スコア5936
0
攻撃者側からすると、質問が100パターンくらいしかないのであれば、一度人間が読んで答えが分かれば、次に同じ画像が来たらその答えを入れれば良いので、かなり弱い防御になります。
画像が同じかどうかは、簡単な比較です。
ブログのコメント欄にspamを防ぐくらいの目的でいいのであれば、10パターンくらいの質問でいいと思います(画像にする必要も無いかも)が、「画像認識して質問文を解読されて人工知能が回答することを心配する」ような重要なサイトであれば、キャプチャ並の防御をするためには、質問を数万パターン、あるいはもっと用意する必要があるのではないでしょうか。普通のキャプチャに比べるとかなり大変だと思います。
投稿2015/11/30 12:01
総合スコア84423
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/30 13:46 編集
2015/11/30 15:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/30 15:12