安曇野の森から> 一万円で作るブックスキャナ> 検討したこと

検討したこと

読み取り速度

スキャン作業に時間がかかりすぎると使おうとする気力がなくなってしまいますので、まずは500ページを30分以内にスキャンし終わることを目標にしました。

この目標では1ページあたりの読み取り時間は3.6秒以内で行う必要があります。
低価格で購入出来るフラットベット型のスキャナだとスキャンに時間がかかりすぎるので、ここでは紙面をデジタルカメラで撮影する方法を選びました。


カメラ

デジタルカメラで撮影した画像は、電子書籍端末で読みやすくする為に、いくつかの画像処理を加える必要があります。

普通のデジタルカメラはPCから制御したり、PCにリアルタイムでデータを取り込むのが難しいので、代わりに高解像度のものが安く手に入るようになってきたWebカメラを使います。

WebカメラにはUVC(Universal Video Class)規格により、ドライバなしでもPCにつなげるようになっているものがあります。
このため、画像を取り込むためのプログラムも以前と比較して作りやすくなっています。

ただし、Webカメラの中には接写をした時に中央にピントをあわせると四隅にピントが合わなくなるなど、レンズ性能の低いものも含まれている場合がありますので購入時には注意が必要です。

PCの性能によってはフレームレートが高いと複数のカメラからの画像が取り込めない場合があります。

カメラに自動焦点のものを使うとページめくりをする際にカメラが認識している対象が変化するため焦点調整の動作が入ってしまいます。この動作が安定するまで時間がかかってしまうため、自動焦点のものは使わないようにします。
自動焦点以外でも露出やホワイトバランスなどは自動で調整されることがあるので、これも手動で固定するようにします。


解像度

Faxの解像度は200dpiなので、これを目安にカメラの解像度を決めます。
文庫本のサイズはA6(105 x 148[mm])です。市販されているカメラの解像度と画素数は以下のとおりです。

    1.3M   960 x 1280pixel
    2M    1200 x 1600pixel
    3M    1536 x 2048pixel
						

各辺の解像度は以下の式で計算出来ます。

解像度 = 辺の画素数[pixel] / 辺の長さ[mm] / 25.4[mm/inch]

上式より1.3Mのカメラで文庫本を撮影した場合、短辺の解像度は232[dpi]、長辺の解像度は220[dpi]になり、 1.3Mのカメラで十分であることが分かります。(実際は撮影範囲が本のサイズより少し広くなりますので解像度は少し下がります。)

ちなみに教科書サイズの本を撮影する場合は、紙面の広さが文庫本の2倍になりますので、2M以上のカメラが必要になります。

以上の計算は、大体の雰囲気をつかむのには使えますが、実は落とし穴があって、デジカメの場合、撮影可能な画素数が同じであっても細かいものを見分ける能力はスキャナやFAXに比べて下がります。
スキャナの場合、擬似的に1画素にRGB3つの光センサが入っているかのように動作します。
これに対して、デジカメの場合は撮像素子(CCD/CMOS)上に以下のように光センサが配置(Bayer配列)されており、1つの画素には1色の光センサしか入っていません。残りの2色は回りの光センサの情報から合成して求めます。RとBは画素がそれぞれ全画素数1/4、Gは画素が1/2しかありません。色毎の分解能が下がりますので、当然、合成された画像はスキャナに比べて分解能が下がるということになります。

    GRGRGR
    BGBGBG
    GRGRGR
						

文庫本の紙面は大部分がモノクロです。ブックスキャナではファイルサイズを小さくするため取り込んだ画像をモノクロ画像に変換して扱っています。

そこで各画素のRGB全ての色を使うのではなく画素毎にBayer配列で並んでいる色センサの情報のみを取り出してモノクロ画像に変換すれば、分解能は下がらないのではないか、という仮説を立ててプログラムを作りテストしてみました。
画像を主観で比較する限りでは残念がら目立った差を見つけることが出来ませんでした。
分解能はセンサの画素数だけでなくレンズ性能などにも影響されるので効果が分かりにくいのかもしれません。あるいは分解能を客観的な方法で測定すれば違いが出るのかもれしません。


照明

照明には紙面が近いのと光源の周囲に十分な空間が取れないので発熱の少ない白色LEDを使用します。

放射角の狭いLEDを使うと紙面の明るさにムラが出来てしまうので放射角が60度のものを複数使います。
今回は5個2列で合計10個のLEDを使いました。
最初、100円ショップで購入したLEDライトをバラして白色LEDのみを取り出してテストしていましたが、LEDライト用の白色LEDは放射角が15度程度と狭く、照射した紙面に照度ムラが出たため、放射角の広いものに交換しました。
当初、白色LEDには光拡散用のゴムキャップを付けていましたが、ゴムキャップを付けない場合と紙面の照度ムラにあまり違いが無かった為、現在は白色LEDを裸で使っています。
白色LEDの電流制御は特に行わず、各白色LEDに25Ω程度(51Ω抵抗を2個並列)の電流制限用抵抗を直列に接続し、5V, 2AのACアダプタで電流を供給しています。


保存フォーマット

保存フォーマットは二値画像のPNGファイルで保存するのが比較的ファイルサイズが小さくなるようです。

文庫本1ページあたりの大まかなファイルサイズは以下のとおりです。

    PNG(mono1bit) 30KB
    PNG(mono8bit) 100KB
    JPEG(mono)    200KB
    JPEG(color)   300KB
						

文庫本サイズで1ページを二値画像にして保存すると約30KBになります。ただ、残念ながら今回利用しているライブラリが二値画像のPNGファイルをサポートしてないため、グレー画像で保存されてしまい1ページあたり約100KBとなってしまいます。
それでも500ページの本で50MBなので2GBのiPhoneだと40冊(全てのメモリが保存に使えるわけではないのでもう少し少なくなるとは思いますが)保存出来ます。

最終的には各ページの画像ファイルをまとめて1つのPDFファイルに変換して電子書籍端末で読みます。PDFファイルに変換してもファイルサイズにはあまり大きな違いは出ないようです。


OpenCV

Webカメラをスキャナとして使うには以下の処理が必要になります。

    (1) 画像取り込み
    (2) 画像領域切り出し
    (3) 画像強調
    (4) 画像二値化
    (5) 画像回転
    (6) ファイル保存
						

これらの処理を行う為にIntelが開発したOpenCVというオープンソースの画像処理ライブラリを使っています。


開発環境

開発環境は無料でダウンロード出来るVisual C++ Express EditionにOpenCVとUVC対応のWebカメラから画像が取り込めるEWCLIBというライブラリを使っています。
OpenCVだけでも画像取り込みが可能ですが、読み取り解像度の変更や、露出やホワイトバランスなど自動調整を止める必要がある為にEWCLIBを使っています。


材料費

材料費を1万円以内に抑えることを目標にブックスキャナを作りました。

1万円を数百円超えてしまいましが、だいたい目標どおりの予算で出来ました。
材料費の内訳は以下ファイルのとおりです。

材料費(PDFファイル 44KB)


OCR

認識率の関係からOCRの利用はあきらめています。

例えば99%の認識率をもったOCRがあったとしても、文庫本の場合、1ページが約600文字ですから1ページあたり6文字の誤りが出ることになります。毎ページ6文字修正しなければならないのは面倒ということでOCRは使わないとしました。


電子書籍端末

文庫本の1ページを1画面に表示出来る携帯端末を探した結果、電子書籍端末としてiPhoneとKindleを使うことにしました。

Kindleは日本語フォントが入っていません。将来的には日本語が表示出来るようにソフトウェアがアップデートされる可能性もありますが、今のところ日本語が表示出来ません。ただ、スキャンしたものは単なる画像情報ですので、日本語フォントが入っていないKindleでも表示することが出来ます。また、PDFファイルの中に日本語フォントを埋め込んだ場合には日本語を表示出来るようです。その場合でもファイル名やメニューには日本語表示が使えません。



inserted by FC2 system