虚苦心観察ブログ

ブログ管理者である虚苦心が私利私欲に基づいて書いているブログです。主にガジェットのレビューだったり、画像処理のことだったりを記事にしています。

へっぽこ知識で作る画像処理プログラム 「自炊本のページ抜けチェック」 1日目

はじめに

ちょっとやりたいことがあるのですが、ただ単にプログラム書いて公開、というのも味気ないし、最後まで作りきらない気がしたので日記のように覚え書きをしながらプログラムを書いていこうと思い、「へっぽこ知識で作る画像処理プログラム」というタイトルで週1程度で更新していこうかと思います。

最終目標!

”はじめに”で書いたちょっとやりたいこと、というのが最終目標です。
そのちょっとやりたいこと、というのは画像処理の基礎知識で自炊した電子書籍のチェックプログラムを作ることです。

なぜ電子書籍チェックプログラム?

部屋の本を自炊したはいいけど・・・

自炊というのは1冊の紙の本をスキャナーで取り込んで1冊の電子書籍にすることです。
私は東京で一人暮らしなのですが、6畳しかない部屋で紙の本というのは思いのほか場所を取ります。
そこで「自炊」です。自炊をすることで紙の本は電子化され場所をとらなくなります!

ただし自炊というのは一つリスクがあります。
それは自炊した本のすべてのページが正しくスキャンされるとは限らない、ということです。

自炊した後の本は捨ててしまうので、捨てた後に自炊した本を読んでいたらページが抜けていた!なんてことがあるともう一度買いなおす、なんていう残念なことになりかねません。

自炊に適したスキャナーにドキュメントスキャナーという機器がありますが、これも完璧ではなくミスはあります。
数冊であれば目視で確認すればよいですが、数十冊となると話は別です。

これが今回電子書籍のチェックプログラムを作ろうと思ったきっかけになります。

もう一つの理由

それからこのプログラムを作ろうと思ってからしばらく、ない知識を絞って考えたところ画像処理の基礎知識だけで作れそうだなという結論に至ったことがもう一つの理由です。

さっそく作るプログラムについて考える

まずは対象とする本の種類・・・小説

万能なプログラムを作るのはめちゃくちゃ難しいので頭の良い人達に任せるとして、処理対象とする本の種類を一つにして簡単なプログラムを書くことにします。

そこで対象とする本は文字だけの本、特に小説を対象にしようと思います。もちろんラノベも含みます。
最終的には技術書も対象としたいのですが、とりあえずは小説に限定します。

小説にした理由は基本的にスキャンしたページの色が2色しかなく単純であること、ページを構成するものの場所が決まっていること、が主な理由です。

ページを構成するものというのはページ番号や本文などのことです。私は専門外で本の各部位の正式名を知りません。 ちょっと調べたら丁寧に解説されているページがあったのでメモとして載せさせていただきます。

本の各部名称

チェックプログラムで何をチェックする?

チェックするのは自炊した本のページ抜けの有無です。

で す が、「抜けあるよ!」「抜けないよ!」とプログラムを実行するだけで教えてくれるプログラムを作るのはほぼ不可能です。
なぜかというとページ番号と実際のページ数が対応していない場合がほとんどなので、これなら抜けがない、という「正解」の条件を決めることができないからです。

もし実行するだけで抜けの有無を教えてくれるプログラムを作ろうとすると、書かれている内容を理解できるプログラムを作らなければならないと思うのでとても大変です。頭の良い人達に任せましょう。

では作ろうとしているプログラムで何をするのかというと、「ページ番号の切り抜き」です。
ページ番号を切り抜いて一覧にして、”ページ抜けのチェックをしやすく”することを目的とします。

そんなわけで「チェックプログラム」と書きましたが、実際には「チェックのサポートプログラム」になります。
せっかくここまで読んでくれたのに思ってたものと違った人、ごめんなさい。。。

開発環境や使用言語、ライブラリ

今のところ想定しているものを並べてみます。

メインはWindowsで開発します。つまりVisual Studioを使います。使うバージョンはおそらく2015のComunityEdition。
ただし、後述しますがCMakeを使うので2013などOpenCVが対応しているバージョンであれば問題ないようにしたいと思います。
LinuxWindowsで開発したC++コンパイルの確認で使う予定です。C++Visual Studioだけで開発しているとひどい目に合うので・・・

  • 使用する言語

メインはC++で開発しようと思っています。
が、辛くならない程度にPythonでも並行してプログラムしてみようかと思います。
CMakeはビルドツールで、開発環境に合わせてファイルを生成してくれます。UnixLinuxだとMakefileWindowsだとソリューションファイルを作ってくれます。Macは・・・リンゴアレルギーなのでわかりません。

  • 使用するライブラリ

OpenCVは言わずと知れた画像処理プログラムです。フル活用します。
Qt(PythonではPySide)はUnixWindowsなどOSを気にせず使えるGUI作成のライブラリです。OpenCVにも簡易のGUIが用意されているのでそれで済ましてしまうかもしれません。

今回は予告、ということで・・・

ここまで書いたら疲れてしまいました。けど今回作ろうとしているものの目標や前提条件などをしっかり説明できたと思うので良しとします。
これから地道に更新していけたらいいなー