質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

解決済

2回答

7601閲覧

OCRによる文字認識が困難なフォントってありますか?

sounisi5011

総合スコア697

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

0クリップ

投稿2015/11/30 07:52

自作のCAPTCHAを作ろうと考えています。

このCAPTCHAは、「歪んだ文字を読ませてそのまま入力させる」タイプではなく、「質問文を読ませて適切な答えを入力させる」というものです。
文字認識だけでなく、質問文の内容を理解し、適切な解答を導き出す事を要求するため、スパム対策としてはかなり有効なのではないかと考えています。
また、質問文の内容理解という高い要求を行うため、本物の人間が読めない程歪んだ文字を用意する必要も無くなります。
(似たコンセプトのCAPTCHAとして、既に妹認証というモノも存在します)

この質問文の文字に使用するフォントとして、文字認識が困難な、それでいて人間には読むことの出来るフォントを使用しようと考えています。
(文字認識のハードルを上げる事で、少しでも突破が困難になればという予備策です)
手書き文字や筆文字がこれに該当すると思うのですが、文字認識の精度や特徴について詳しく知らないため、本当に認識し難いフォントなのか判断がつきません。

文字認識が困難になるフォントとして、どのようなものがあるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まずはちょっといたお断りから…
これは直接の回答ではありません。
ちょっと長くなりますが、単刀直入に回答できない理由と、参考になりそうなアイディアを少し書きます。

###回答しにくい理由
ご質問の内容は、興味深い取り組みですね。しかしながら、sounisi5011さんのご質問にまともに回答しようと思うとかなり難しいです・・・

文字認識の精度や特徴について詳しく知らないため、本当に認識し難いフォントなのか判断がつきません。

との事ですが、逆に詳しく知っていても簡単には判断の付かない問題だと思います。

文字認識の手法には様々なものがあり、また同じ手法でもプログラムの実装方法によっても認識精度や処理速度が異なります。
どんな文字でも素早く正確に認識出来るシステムはまだ無いか、もしあっても非常に高価です。

つまり、どんなシステムを想定して『ハードルを上げる』事を検討するのかによって回答が異なりますし、どの程度効果があるかは、実際にテストしてみないと分からないという側面もあります。

一方、この手のテーマについて論ずる際は、認識する側もそれを阻止する側も、単純に認識率だけを問題にするのではなく、それに要するコスト(システムの値段だけでなく処理に要する時間も含む)が、対象となる情報の価値と見合ったものかという観点からも検討する必要があります。

言い換えるとsounisi5011さんが(機械認識に対する)どの程度の難読化を望んでいるかによっても回答が異なってきます。

という前置きの上で、いくらかでもご参考になればと思い、少し情報連携致します。

###認識しにくい状況を作るには?
まず、認識しにくいフォントを判断する上での近道は、最も認識しやすいフォントについて知ることです。

もし対象がASCII文字だけならば、それが OCR-B である事に多くの方が同意されると思います。ですから、このフォントからの ズレ(=ノイズ)が大きい程認識しにくくなると考えられます。

しかし、質問に対する 一意の回答 を要求するとなると、日本人が対象であれば当然、日本語フォント について考慮する必要があります。そうすると、この問には必ずしも簡単には答えられません。(ご参考)

世の中には手書きフォントというものもありますし(たとえばこちらこちら)、直筆の文字からフォントを作成するツール(たとえばこちら)だってあります。とは言え、手書き文字の認識精度も高くなっているので、単純に手書きフォントにしたから認識率を下げられるというものでもありません。
そもそも、機械的に認識しにくい癖字は人間にとっても読みにくいものです。

それで、ちょっと文字認識の 原理に立ち返って みると、ザックリとした言い方をすれば、どんな方式であれ以下の2つの過程を経て認識していると考えられます。

  1. 対象の画像から、文字を構成している「線」を抽出する
  2. 線の集まりに色々なフィルター(数学的な変換)を適用して、どの文字情報とマッチするかを調べる

1.については、画像の輪郭線や中心線を抽出する方式が一般的です。
2.については色々な手法がありますけれども、要するに「お手本」からの歪みが大きい程認識しにくくなります。

フォントの種類を変えるとか、人間でも判別しにくい程文字を歪ませるというのは、上記の分類で言えば 2. に該当します。
ただ、機械認識に影響を与える程に歪ませると人間にも読みにくくなってしまうというのは、どんなフォントを選んだとしても同じではないでしょうか?

ですから、ある程度の読みやすさをキープしつつパターン認識をしにくくするには、otnさんのご指摘のように「パターン数を増やす」しか無い訳です。
これは、スパム防止用の一般的な取り組みと同じです。「ランダムな文字列(=パターン数の多さ)×文字列の歪み(=個々の文字の認識しにくさ)」で機械認識を少しでも難しくしようということです。

sounisi5011さんの取り組みは、こうしたジレンマ(=機械認識しにくくなる程歪ませると人間も読めなくなる)を回避するためのはずなので、単純にフォントを変えるという方法では不十分なことは明らかです。
また、意味のある質問文を用意するという観点からすると、パターン数の増加も結構たいへん(=コストが掛る)です。

そこで、上記 1. (線の抽出を困難にさせる)をプラスすることで、人間には読めるが機械認識を困難にさせる方法を検討してはいかがでしょうか?
要するに、一つの要素だけに頼ってズレを大きくしてしまうと人間にも読みにくくなってしまうので、たくさんの要素を少しずつ変化させ、その組み合わせでパターン数を 劇的に 増やすという考え方です。

思いつくままに幾つか例を挙げると、以下のような複数の要素をランダムに変化させることができます。

  1. 幾つかのフォントを混ぜる
  2. 文字のサイズを変化させる
  3. 文字の歪みを変化させる
    →斜体を使用する際も、斜度を幾つか織り交ぜる
  4. 文字の太さを変化させる(一つの文字の中でも場所によって変化させる)
  5. 文字の濃さを変え、場所によってはかすれを生じさせる
  6. 文字のベースラインを不揃いにする
  7. 文字の回転を変化させる
  8. あまり難しくない文字については「鏡文字」も含める(サンプル
  9. 地のパターンを変えたり、ランダムなドットのマスクを掛けたりする
    →色覚異常検査に使用するようなパターン(文字、数字、絵柄など)を織り交ぜる(ご参考
    (もっとも、本当の色覚異常検査のパターンでは色弱の方などハンディキャップをお持ちの方にも認識出来なくなってしまうので、実際のパターンの色調には注意が必要です。)

でもって、たとえば2桁の数値の文字認識しにくいパターンを数種類用意しておき、それを数個ランダムな順番に表示させて、一番大きな数を答えさせるようにすると、それだけでかなりのパターン数を稼げます。
同様に、蝶とかカブトムシのような、だれでも分かりやすい図柄を数種類用意しておいて、それが何かを答えてもらうというやり方でもかなりのパターンを稼げます。

そうやって、「妥当な種類の質問パターン」×「個々の文字フォントのパターン」×「認識しにくい図柄」×「表示順序」によってパターン数を増やしてやれば、事前の準備はある程度大変でもそれ程複雑なプログラミングなしに、機械認識がある程度困難なパターンを作成できると思います。

以上、幾らかでもご参考になれば幸いです。

投稿2015/11/30 14:40

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sounisi5011

2015/11/30 15:12

直接の解答ではありませんでしたが、とても参考になりました。 ありがとうございます。
guest

0

攻撃者側からすると、質問が100パターンくらいしかないのであれば、一度人間が読んで答えが分かれば、次に同じ画像が来たらその答えを入れれば良いので、かなり弱い防御になります。
画像が同じかどうかは、簡単な比較です。

ブログのコメント欄にspamを防ぐくらいの目的でいいのであれば、10パターンくらいの質問でいいと思います(画像にする必要も無いかも)が、「画像認識して質問文を解読されて人工知能が回答することを心配する」ような重要なサイトであれば、キャプチャ並の防御をするためには、質問を数万パターン、あるいはもっと用意する必要があるのではないでしょうか。普通のキャプチャに比べるとかなり大変だと思います。

投稿2015/11/30 12:01

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sounisi5011

2015/11/30 13:45

> 次に同じ画像が来たらその答えを入れれば良いので、かなり弱い防御になります。 画像はプログラムにより動的に生成するので、この点については問題ありません。 同じ質問文でも、背景にノイズを使用したり、文字の大きさ、色、配置、角度、変形度等を表示する度に変動させます。
sounisi5011

2015/11/30 13:46 編集

ところで、この質問は「文字認識が困難になるフォント」にはどのような物があるのか、というものです。
otn

2015/11/30 15:52

> 同じ質問文でも、背景にノイズを使用したり、文字の大きさ、色、配置、角度、変形度等を表示する度に変動させます。 あ、そうなんですね。 > 「歪んだ文字を読ませてそのまま入力させる」タイプではなく、 とあったので、そういうことはしないものだと読み取りました。 で、「そういうのだといくらフォントを工夫しても意味ないよ」というのが回答です。 通常のCAPTCHA機能で質問文にするという意味だったんですね。失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問