読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

ScanSnap S1500 の「OCR テキスト認識」に関する 15 の真実

電子化

おっと。また大袈裟なタイトルつけちゃって。

釣り

なんて言われないように、気合い入れて書かなくっちゃ。

さて、先週のエントリー「裁断機 PK-513L で本を 100冊裁断してみた - 経験した 9つの失敗とその回避方法」が大きな反響をいただいたので、今回は裁断の次のステップである「スキャン」を攻略。ScanSnap S1500 の設定についていろいろと調べてみました。

目次というか、いきなり結論から

書いていったら結構長くなってしまったので、とりあえず目次。というかほとんど結論なんですが、結論だけ見られればいいやという方のためにも。


(2010年8月13日 追記)

OCR テキスト認識に限らず、ScanSnap S1500 の設定全般についてもまとめてみました。あわせてどうぞ。


以下、詳細です。

今回のテーマは「OCR テキスト認識」

ScanSnap S1500 の設定といっても、画像のキレイ・汚いは主観によるところが大きく、なかなか「この設定がオススメですよ」と言い切れないのが悩みどころ。ですが「OCR テキスト認識」の精度については客観的に測ることができるのではと思いまして。今回のテーマとしてみました。

あと、僕は、電子化した本を次のように使っているので。全文検索のためにテキスト認識が重要な役割を担っていることもテーマとして取り上げた理由のひとつです。

  1. (特にオライリーの)技術書を PC で読む(いずれは iPad でも)
  2. ときおり全文検索をする
  3. 技術書を見ながらプログラミングをする

最後に、これはどれだけ同意が得られるか不安ですが、よく、本のフレーズだけ思い出して、

ん?これって、どの本に書いていたっけ?

と気になって眠れなくなり 夜中にがさごそ本を探し出す、なんてことがあります(僕だけじゃないよね?)。その問題の解決のためにも、テキスト認識は非常に重要なのです。

前提 1. ScanSnap S1500

調査対象のスキャナは、定番だといわれる ScanSnap S1500。他にも良いスキャナはあるのでしょうけれど。(個人的には、キャノンの imageFORMULA も気になります。)

FUJITSU ScanSnap S1500 FI-S1500

FUJITSU ScanSnap S1500 FI-S1500

(▲ Windows モデル)

FUJITSU ScanSnap S1500M FI-S1500M (Macモデル)

FUJITSU ScanSnap S1500M FI-S1500M (Macモデル)

(▲ Mac モデル)

前提 2. 動作環境

ScanSnap S1500(Windows モデル)を、(訳あって)MacBook Pro 15.4インチに接続して使いました。

Apple MacBook Pro 2.4GHz Core i5/15.4

Apple MacBook Pro 2.4GHz Core i5/15.4"/4G/320G/8xSuperDrive DL/Gigabit/802.11n/BT/Mini DisplayPort MC371J/A

まだ出たばかりで Core i5 + メモリ 4GB だったりするので、ノート PC の中ではハイスペックなほうだと思われ。詳しい仕様はこちらです。後述の ScanSnap Organizer (Windows モデルの付属ソフト)については、VMware Fusion 3 上の Windows XP で動かしました。

前提 3. 調査対象に選んだ本

今回、次の本を調査対象に選びました。

Perlベストプラクティス

Perlベストプラクティス

選んだ理由は、

  • 実際に頻繁に読む
  • 日本語とアルファベットの両方が記載されている
  • 細字と太字の両方が記載されている

といったところでしょうか。

(▲ クリックすると拡大)

1. 画質の選択「自動」は、実質「ファイン」または「スーパーファイン」と同じ

さて、やっと本題。ScanSnap S1500 のドライバソフト「ScanSnap Manager」の設定で、やはり一番迷うのは「画質の選択」だと思います。

画質は上の 5つから選ぶことができるのですが、掴みどころが無いのが「自動」。信用して良いんだか悪いんだか。

...と思っていたのですが、調べてみたら公式サイトに載っていました。原稿の長さによって、「ファイン」または「スーパーファイン」になるようです。

(注2) 原稿の長さが148mm以下の場合は、カラー / グレー300dpi、白黒600dpi相当に設定、原稿の長さが148mmよりも長い場合は、カラー / グレー200dpi、白黒400dpi相当に設定。

まぁそういうわけで「自動」について書いても「ファイン」または「スーパーファイン」と重複してしまうので、以下「自動」についての記述は割愛させてもらいます。あしからず。

2. 画質を 1ランク上げるごとにファイルサイズは 2〜3倍に

画質を良くすれば当然ファイルのサイズも大きくなってしまうわけで。実際には次のとおり、画質を 1ランク上げるごとにファイルサイズは 2倍または 3倍になるようです(一部例外あり)。

ScanSnap S1500/S1500Mのご質問 回答(読み取り画像): 富士通

3. 画質「ノーマル」は文字が滲んでしまう

手始めに最も画質の低い「ノーマル」に着目したところ、スキャンした文字が滲んでいました。

ちなみに調査対象の本を僕の MacBook 15.4インチで「幅に合わせて」開くと、倍率が大体 200% になるので、上の画像も倍率 200% にしています。自分では結構「ちっちゃいことは気にしない♪」タイプだと思っているのですが、そんな僕でも気になるレベルの文字の滲みです。

一方、本を(単独ではなく)テキストエディタ等と一緒に開くときには、倍率 100% 前後にしていますが、そうなると滲みはほとんど目立ちません(↓)

でも、あまり小さい文字を見ていると目が悪くなりそうですね。200% くらいの大きさの文字がちょうど良いかもしれません。

4. 画質「ノーマル」はテキスト認識精度も他に劣る

画質「ノーマル」について、文字の滲みに目をつぶったとしても、テキスト認識の精度は、他の画質と比べて著しく劣っていました。

(ノーマル)

はじめに
 木的は、よりよいPerlコード、すなわち、できるだけ効的なPerコードを書くための手助けをすることである。本書は、レイアウト、名前の選択、データ構造と制御構造の選択、ブログラムの分解、インターフェイスの設計と実装、モジュール化、オブジェクト指向、エラー処理、テスト、デバッグを含め、コーディングをさまざまな面から捉えた2 、1のガイドラインで構成されている。これらのガイドラインは、2 2 年間にわたるプログラミング経験を通じて培われ、洗されてきたものである。それらは、うまく組み合わせることができ、より明瞭で、堅牢で、効率的で、保守しやすい、簡潔なコードを生成できるように設計されている。

(ファイン)

はじめに
 本書の目的は、よりよいPerlコード、すなわち、できるだけ効果的なPerlコードを書くための手助けをすることである。本書は、レイアウト、名前の選択、データ構造と制御構造の選択、プログラムの分解、インターフェイスの設計と実装、モジュール化、オブジェクト指向、エラー処理、テスト、デバッグを含め、コーディングをさまざまな面から捉えた2 4 2 個のガイドラインで構成されている。これらのガイドラインは、2 2 年間にわたるプログラミング経験を通じて培われ、洗練されてきたものである。それらは、うまく組み合わせることができ、より明瞭で、堅牢で、効率的で、保守しやすい、簡潔なコードを生成できるように設計されている。
(なんとパーフェクト!)

5. オプション「文字をくっきりします」にすると、文字の滲みは軽減されるがテキスト認識精度が落ちる

なんだ「ノーマル」使えないじゃん。と思いましたが、もう1度だけ敗者復活のチャンスをあげよういうことで(何様?)、オプション「文字をくっきりします」をオンに。

結果、たしかに文字の滲みは軽減されましたが、引き換えにテキスト認識の精度はさらに低下。

(ノーマル・文字をくっきりします)

はじめに
本書の目的は、よりよいPerlコード、すなわち、できるだけ効的なPerlコードを書くための手助けをすることである。本il:=は、レイアウト、名前の選択、データ造と制御構造の選択、プログラムの分解、インターフェイスの設計と実装、モジュール化、オブジェクト指向、エラー処理、テスト、デバッグを含め、コーディングをさまざまな面から捉えたのガイドラインで構成されている。これらのガイドラインは、2 2 年問にわたるプログラミング経験を通じて培われ、洗練
されてきたものである。それらは、うまく組み合わせることができ、よりSり」|略で、牢で、効率的で、保守しやすい、簡潔なコードを生成できるように設計されている。

もうぐだぐだ。orz
「ファイン」でさえ落第点になっちゃって。

(ファイン・文字をくっきりします)

はじめに
本書の「|的は、よりよいPerlコード、すなわち、できるだけ衣5!」米的なPerlコードを書くための手助けをすることである。本書は、レイアウト、名前の選択、データ構造と制御構造の選択、プログラムの分解、インターフェイスの設計と実装、モジュール化、オブジェクト指向、エラー処理、テスト、デバッグを含め、コーディングをさまざまな面から捉えた:242個のガイドラインで構成されている。これらのガイドラインは、2 2 年問にわたるプログラミング経験を通じて培われ、洗練されてきたものである。それらは、うまく組み合わせることができ、より明瞭で、堅牢で、効率的で、保守しやすい、簡潔なコード;S:y生成できるように設計されている。

6. 画質「ファイン」以上は、テキスト認識精度がほぼ同じ

画質「ノーマル」のテキスト認識精度がいまいちだとして、

テキスト認識の精度は、画質に比例して上がるのか?

と予想していましたが、そうではないようでして。

少なくとも日本語の認識精度については、「ファイン」以上ではどれも誤りは 1ページにつき大体 1〜3字で「まあ我慢できる」レベル。

どの画質を選んでも、画数が多い字似たような漢字がある字などは間違いやすく、また「ファイン」で正しく認識している語を「エクセレント」では間違っていたりして、

(少なくとも日本語については)「ファイン」以上の認識精度はほぼ同じ

という結論に至りました。

7. 縦書きも、日本語ならテキスト認識 OK

念のため、縦書きの新書も調べてみました。

結果、横書き同様、日本語の認識には「ほぼ」問題なし。

(ファイン)

はじめに
 世界で初めてのウェブーサイトが生まれてから、約20年が経ちました。インターネットでつながることによって、距離や時間に関係なく世界中から情報を収集し、コミュニケーションがとれるようになりました。アマソンで購入した本が当日に届き、楽天で全国の名産品を購入することも当たり前の時代です。
 その後もブログやミクシィなどのSNSのように、次々と新しいサービスが生まれていますが、その中の一つで2006年後半に生まれたのがツイッター(、{ぎ・{{q}です。
 ツイッターとは、ユーザー同士が140文字のつぶやきを投稿し、そのつぶやきをほかのユーザーがフォローすることで、インターネット上でコミュニケーションが発生するサービスです。

8. どの画質でも、アルファベットの認識は期待できない

ただし、問題はアルファベットの認識なのですよ。対象言語を「日本語」にしているので仕方がないところもあるのでしょうが、横書きも縦書きも、悲しいくらいに認識できていません。


(ファイン)

subpad_str{
  lily(Stext、IS;opts)=@_;


  111ySgap=$opt3{cols}-:LengthStext; #opts->{cols}のはずが‥.
  111ySleft=!S;optニs{centred}?intjS;gap/2〉:0 #opts->{centred}のはずが‥.
  mySright=Sgap-$1eft;


  :r‘eturn$SPACEXIS;1eft。$text.ISI;PACEXS;lright;

(適宜、改行等を入れて体裁を整えています。以下同じ。)


「エクセレント」でさえ、信用に値しないなんて...

(エクセレント)

subpad_str{
  xny(Stext,$opts)=@_;


  my$gap=Sopt二s{cols}-:Length$text; opts->{cols}のはずが‥.
  myS;1eft=$opts{(;entred)?iヱt衣Sgap/2):O; opts->{centred}のはずが‥.
  myS;lright=Sgap-S:Left;


  return$SPACEXS;1eft。$text.S;SPACEXS;lr:Lght;

9. 太字のアルファベットはさらに精度低下

太字になるとさらにひどい。


(エクセレント)

subpaa_str{
  耳y(Stext、Sopts_r●f)=●_j
  llySgap●Sopts_r●f{cols}-1exlgthStextj
  iySleft●Sopts_refl{c●ntr●d}?i.xlt(Sgap/2)soj
  llySright●Sgap-S1●ftj
  z`●tllz`zlSSPAClxS1●ft.Stext.SSPAClxSrightj

ちなみに、試しに対象言語を「英語」にするとアルファベットを認識できましたが、逆に日本語が認識できなくなったので意味なしでした。今後の技術の進歩に期待です。

10. 画質「エクセレント」は実用的ではない

これまでのところで、テキスト認識の精度という点では、「ファイン」以上の画質はどれもほぼ同じということが分かりました。

では一体どの画質を選んだらよいかですが、この点、最高画質の「エクセレント」は、あまり実用的ではありません。というのも、他の画質と較べてスキャンに時間がかかり過ぎるのです。

ScanSnap S1500 製品情報 特長(スピーディー) : 富士通

また、次のような注意書きも表示されます。

10枚ってwww
それでも、ものすごくテキスト認識精度が良かったら目次とか索引だけエクセレントでスキャンしようかなとも当初考えていたのですが、必ずしも認識精度が上がるわけではないようですので、使い途がなく、使用をあきらめました。

11. 画質「ファイン」はわずかに文字が滲む

残るは「ファイン」と「スーパーファイン」。「ファイン」については、ほんのわずかですが文字が滲みます。一方「スーパーファイン」は「エクセレント」と較べても遜色なし。

まぁこのあたりは人によって感じ方が異なると思いますが。あとはファイルサイズとの天秤ってことになりますかね。

12. ScanSnap Manager と ScanSnap Organizer との相違点

ところで、ScanSnap S1500 には「ScanSnap Organizer」というソフトが付属しています(Windows モデルに限る)。

なので、

  • スキャン時にテキスト認識するパターン(ScanSnap Manager)
  • スキャン時ではなくて 後でテキスト認識するパターン(ScanSnap Organizer)

の 2種類から好きな方を選ぶことができまして。

ただテキスト認識のタイミングが違うだけだろうと思っていたんですが、ScanSnap Manager と ScanSnap Organizer を較べてみると意外にも下記のような相違点がありました。

  • 日本語のテキスト認識精度はほぼ同じ。
  • 「文字をくっきりします」をオンにするとテキスト認識精度が落ちることも共通。
  • アルファベットの認識が当てにならないことも共通。
  • ScanSnap Manager で認識するとアルファベットや数字はすべて「全角」になるのに対し、ScanSnap Organizer だとアルファベット・数字は半角と全角が混在する。

ScanSnap Manager・ファイン)

 useslニrictqw(vars)はまさにこの違反を捕らえるためのものである(18章を参照)。そして、通常はそのように使用する。もちろん、偶然にも同じスコープに有効な1 o p t s ハッシュが存
在するなら、話は別である。
 参照を保持するための変数に常に_ r e f サフィックスを添えれば、こうしたミスの可能性を最初から最小限に抑えることができる。もちろん、参照変数をこのように命名すればミスを防げるというわけではないし、ミスを犯したときに自動的に検出されるわけでもない。だが、エラーは一目瞭然となる。

ScanSnap Organizer・ファイン)

 usestrictqw(vars)はまさにこの述反を捕らえるためのものである(18章を参照)。そし
て、通常はそのように使用する。もちろん、偶然にも同じスコープに有効な$optsハツシユが存在するなら、話は別である。
 参照を保持するための変数に常にーrefサフィックスを添えれば、こうしたミスの可能性を最初から最小限に抑えることができる。もちろん、参照変数をこのように命名すればミスを防げるというわけではないし、ミスを犯したときに自動的に検出されるわけでもない。だが、エラーは一目瞭然となる。

実はここがミソ。この「半角・全角」の違いは「検索」に影響してきます。
すなわち、一部の PDF リーダーでは、「CPAN」(全角)という文字が埋め込まれた PDF を「cpan」(半角)で検索したときにヒットしませんでした。

「一部の PDF リーダー」って、例えば Adobe Acrobat 9 Pro とか、Adobe Reader 9 とか。僕は Acrobat 9 Pro をメインで使っているのですが、結構困ります。一方、Mac の「プレビュー」や「Spotlight」では「CPAN」を「cpan」で検索してヒットします。

13. ScanSnap Organizer は複数のファイルをまとめてテキスト認識できる

あ、あとコレも重要なんで確認しておくと、ScanSnap Manager と ScanSnap Organizer の最も大きな差は、ScanSnap Organizer が複数のファイルをまとめてテキスト認識できるってことです。

テキスト認識にかかる時間も馬鹿にならないで、

とりあえずスキャンだけしておいて、テキスト認識はまとめて寝てるときに

というのが通(つう)のやり方。

14. ScanSnap Organizer と Adobe Acrobat との相違点

Mac モデルには ScanSnap Organizer は付属していませんが、「Adobe Acrobat 8 Professional」が付属しています。Windows モデルにも「Adobe Acrobat 9 Standard」が付いています。

Acrobat も興味があったので、ScanSnap Organizer と比較してみました。(ただし、大変申し訳ないのですが、僕がいま使っているのは「Acrobat 9 Pro」です。おそらく「Acrobat 9 Standard」や「Acrobat 8 Professional」と変わらないとは思うのですが、もし違うところがあったらコメント等で教えてください。)

  • どちらも複数のファイルをまとめてテキスト認識できる。
  • 日本語のテキスト認識精度はほぼ同じ。
  • 「文字をくっきりします」をオンにするとテキスト認識精度が落ちることも共通。


気になったのは次の2点。

  • ScanSnap Organizer で認識すると、アルファベット・数字は半角と全角が混在したのに対し、Acrobat ではアルファベット・数字はすべて半角(例外があったら教えてください)。
  • アルファベットの認識が当てにならないことも共通だが、Acrobat のほうがわずかに精度が高い印象を受けた。

Acrobat・ファイン)

sub pad_str {
  my ($text , $opts) = @ー;
  my $gap $opts{cols} -length $texti 脅opts ー>{cols} のはすが.. .
  my $left $opts{centred}? inヒ($gap!2) Oi 帯opts ー> {centred} のはすが.. .
  my $right = $gap -$lefti
  return $SPACE x $left . $text . $SPACE x $righti
}

 use strict qw{ vars )はまさにこの違反を捕らえるためのものである(18 章を参照)。そして、通常はそのように使用する。もちろん、偶然にも同じスコープに有効な亀opts ハッシュが存在するなら、話は別である。
 参照を保持するための変数に常に_ref サフィックスを添えれば、こうしたミスの可能性を最初から最小限に抑えることができる。もちろん、参照変数をこのように命名すればミスを防げるというわけではないし、ミスを犯したときに自動的に検出されるわけでもない。だが、エラーは一目瞭然となる。

ScanSnap Organizer・ファイン)

Subpad-str{
  唖(Stext,Sopts)=、_;

  町Sgap Sopts{cols}−lengthStextF #opts->{COユs}のはずが...
  町Sユeft Sopts{centred}?int(Sgap/2):O; #opts->{centred}のはずが...
  myS工ight Sgap-S1eft;

  retumSSPACExSユeft.$text,sSPACExSright;

Acrobat のアルファベット認識精度について、ちょっと「お!?」とか一瞬期待しましたけど、エクセレントでさえこんな感じ(↓)なので、やはり当てにはならないようです。orz

Acrobat・エクセレント)

sub pad_str {
  my ($t回t ,事opts) む
  耳目r $gap $opts{cols} -length $text; 書opts->{cols} のはすが. ..
  my $left $opts{centred}? int($gap/2) 0; 時opts->{centred} のはすが.. .
  my $right = $gap -$left;
  return $SPACE x $left . $text . $SPACE x $right;
}

15. Acrobat のテキスト認識は、ScanSnap Manager の 3倍の時間がかかる

Acrobat はアルファベットの認識精度が良いかわりに、きっと裏で複雑なことをやっているんでしょうね。処理にやたら時間がかかりました。

(『Perl ベストプラクティス』(B5版・498ページ)の処理にかかった時間)

ScanSnap Manager ScanSnap Organizer Adobe Acrobat 9 Pro
スキャン 13分22秒 - -
テキスト認識 11分47秒 19分14秒 31分37秒

画質はいずれも「スーパーファイン」で計測。ScanSnap Organizer は VMWare Fusion 3 上で動かしたので、余計に時間がかかっているはず。

まとめ

さて、これまで書いたことを総括すると、次のようになります。

  1. 文字の滲みが気になる人 → 画質「スーパーファイン」
  2. 文字の滲みが気にならない、もしくはファイルサイズ重視 → 画質「ファイン」
  3. 「文字をくっきりします」のチェックは外しておく
  4. アルファベットの認識精度も求めるなら Adobe Acrobat
  5. テキスト認識するファイルが複数あるときは、寝ているときにまとめて処理(ScanSnap Organizer もしくは Acrobat

おわりに

ところで、PC で本を読むのって目が疲れない?ってよく訊かれます。ぶっちゃけ、疲れます(笑)。それでもなお本を電子化するのは、やはり「検索できる」とか「プログラミングのお供に」という点がもはや手放せないほど便利に感じているから。

ほか、おもしろい記事を見つけたので紹介しておきます。

ではでは。