Mac OS X

ImageMagickとXnConvertを併用してみる

[備忘録] 自炊PDFの後処理関係のメモ。

XnConvertのバージョンが1.51に上がり,従来のBrightness, Contrast以外にも,白黒のレベル指定が出来るようになった。これで,ImageMagickでの -level high, low, gamma と同じ(多分ね)パラメーターの指定が可能となった。速度的にはLanczosでの拡大処理を含めてXnConvertの方が速いので,こちらをメインにしようかと思う。

ただ,XnConvertでは,モノクロ2値への変換で threshold値を選ぶことが出来ない。また,ImageMagickの shave (上下左右を切り取る),border (逆に上下左右を塗る) などの処理が出来ないみたいだ。shaveに関しては,cropとrotateを組み合わせれば良いようにも思うが,よく分からない。一番の問題点は,thresholdの値(閾値)を選べないということなので,この部分はImageMagickを使う方が良いだろう。

ということで,試しに一冊処理してみた。hoge.pdfをpdfimagesを使って,hoge_000.jpgからhoge_124.jpgにバラす処理は済んでいるものとする。そこの階層に行って,次のようにする。

nconvert -extract 0 -ratio -rtype lanczos -resize 200% 200%  -levels 60 255 -gamma 0.7  -posterize 64 -posterize 32 -posterize 16 -posterize 8 -posterize 4 -out png  -o nc_% -overwrite  *.jpg

コマンドの意味は次の通り。-extract 0 で赤チャンネル抽出。-ratio 以下は,lanczosアルゴリズムによる200%拡大。-levels 60 255 と -gamma 0.7 は ImageMagickでの level 60,255,0.7 と同じ。今回の本は,スキャンの具合が良くなくて,全体的に文字が薄くてボケた感じなので,白飛びさせると文字が消えてしまいそうだったので,high=255とマックスのままにした。

-posterize は減色(ポスタリゼーション)処理。64色から順に半分ずつにして,4色まで減色している。-out png は出力ファイル形式をPNGにするということ。-o nc_% は出力ファイルの名前の設定。これだと,元ファイルがhoge002.jpgの場合,nc_hoge002.png となる。-overwrite は出力ファイルと同じ名前があった場合に上書きするということ。nconvert による処理は以上で終了。

次は,ImageMagickを使う。mogrifyコマンドを使って,上下左右を削除して白で元にもどす。それから,閾値を80%にして,モノクロ2値化する。出力ファイルはtiffにして,FAX Group4で圧縮する。

mogrify -shave 40x40 -border 40x40 -bordercolor "#FFFFFF" -threshold 80% -format tiff -compress Group4 nc_*.png

続いて,tiffをpdfに変換。

mogrify -format pdf nc_*.tiff

最後に,pdfファイルをまとめて,hoge-mono.pdf にする。

pdftk nc_*.pdf cat output hoge-mono.pdf

こんな手順で,モノクロ2値化が完了。一冊毎にパラメーター変えるのなら,この程度の入力を毎回行なっても,それほど面倒ではない。パラメーター固定で複数の書籍を変換するのなら,やはりバッチ処理用のスクリプトを書いた方が良いだろうなあ,やはり。

ImageMagickのmogrifyコマンドを使う

[備忘録] 以前 The Internet Archive からダウンロードしておいた E. Cahen の Theorie des nombre, tome 2 (整数論,第2巻)。サイズも小さくで良いのだが,何故かMacのプレビュー.appで見ると,ものすごく動作が遅くてスクロールもままならないという状況だった。それで,放っておいたのだった。そのときは対処法など分からなかったのだが,業者に依頼した自炊(?)PDFが時々同じようにスクロールが重たいという経験を経て,どうすれば良いかが自分なりに少し分かってきたので,それを試してみることにした。

処理対象は,thoriedesnombr02caheuoft_bw.pdf というファイル。サイズは27.2MBほど。このままでも良いが,これを cahen2.pdf として保存。Acrobatで開き,jpegにバラして保存。cahen2_Page_001.jpg から cahen2_Page_762.jpg までの762個のjpegファイルが出来る。これらはモノクロの画像なのだが,サイズは500KBないし900KBもあり,かなり大きい。762個で520MBくらいになっている。グレースケールなのかもだが,拡大した様子では,文字部分は2値のようにも感じる。ともかく,これが27MBに圧縮されていたのだから,すごい圧縮率ではある。

さて,これを ImageMagick で白黒2値のtiffに変換して,CCITT Group4の圧縮をかけることにする。ついでに,広すぎる余白を少し削ってみた。iPhoneで見るときは余白ないほうが見やすいから。

ImageMagickのconvertでは多数のファイルを処理させると,ウソみたいに大量のメモリーを消費してしまうので,今回は mogrify というコマンドを使ってみた。convertとほとんど同じ処理が出来る。

mogrify -shave 100x200 -threshold 80% -compress Group4 -format tiff cahen*.jpg
mogrify -format pdf cahen*.tiff
pdftk cahen*.pdf cat output cahen2mono.pdf

作業内容は次の通り。mogrify コマンドで,まず, -shave 100×200 として,左右100ピクセル,上下200ピクセルずつを削除。次に,-threshold 80% で2値化。さらに, -compress Group4 でFAX G4での圧縮,最後に -format tiff でファイル・フォーマットをTIFFにする。これらを cahen*.jpg すべてに適用する。次に,生成されたtiffファイルをpdfに変換し,pdftkによって,これらのpdfを結合して,cahen2mono.pdf にする。最終的なファイルサイズは,25MBくらいになり,Macのプレビューでも,iPhone4Sの i文庫S でも,スムーズにスクロールして,すこぶる快適になった。

最初のページは次のような感じ。

Cahen "Theorie des Nombres" tome 2

iPhone 4Sでのスクリーンショットは大体こんな感じ。

Cahen "Theorie des nombres" on iPhone4S

iPhoneではさすがに文字が小さく,老眼にはつらいのだが,メガネ外すと,それでも何とか読める。何よりも,750ページもあるのに25MBに収まり,動作も軽くなったので,大満足である。

Mac OSX Lion上でAsymptote2.16をビルドした

asymptoteのバージョン2.13を使っていたが,3次元パッケージでラベルが切れてしまうバグ(?多分)に遭遇したので,最新版にアップすることにした。以前はLion上ではコンパイル出来なかったが,対応が進んでいるらしく,今回は上手く行った。コンパイラーもgcc-4.2に変更することなく,デフォルトのllvm-gccのままで問題なかった。readlineだけは相変わらずで,自分で指定しなくてはいけない模様。以下,メモ。

例によって,GNU readlineは /usr/local 以下にインストールしてあるとする。asymptote 2.16 のソースを本家からダウンロードして解凍。Boehm GCの最新版は gc-7.2b だが,以前のような修正は不要で,ダウンロードしたものを解凍することなく asymptote 2.16 のソース・ディレクトリーに放り込むだけでよいようだ。そして,configureのときに,GNU readline ライブラリーを読み込むように指定する。

./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"

あとは make して make install (うちの場合は,諸般の事情で sudo make install) すればよい。うちの環境では,最後でGhostscriptがエラーを吐いてしまったが,これは付属文書を生成するlatex処理の部分なので,asymptote本体はちゃんとインストールされていた。gsのエラーについては,これ以外にもあって,ちょっと困ってはいるのだが,とりあえず目的は果たしたので,今回はこれまでとしよう。

HyperjuiceとBixPowerコネクターでMacBookに充電する

喫茶店など電源が取れない場所で仕事することも考えて、MacBook Airに繋げるバッテリー Hyperjuice を購入した。昨日、Amazonで注文したら、今日の朝一で届いた。

Hyperjuice MBP-060

いくつか種類ある中から、一番小さい MBP-060 というのを選んだ。容量は 60Wh と、ちと少なめだが、重さが360グラムしかないのがメリット。一つ上の 100Wh とどちらにするか、けっこう悩んだが、軽さを重視した。職場に行けば電源取れるし、内蔵バッテリーと合わせて実質7時間持てば、自分の使い方では困らないだろうと思ったので。

実は、MacBook に外部バッテリー繋ぐには、ちょっとした問題がある。それは、アップル独自のMagsafeコネクターというもの。アップルが特許を持っていて、サードパーティーに使用許可を出していないので、ここをなんとかしないと繋げないのである。

HyperjuiceからMacBook Airに充電中

とは言いながら、写真のように繋いで、充電できている。どうしてこういうものの販売が許可されているのか、アップルは知っているのか、いささか不可思議なのであるが、汎用のDCプラグをMagsafeに変換するコネクターが売っているのだ。

BixPowerの CNT-28 DC Power Connector というのが、それ。ジャック側のサイズは外径5.5mm, 内径2.5mmで、多くのバッテリーで使われている汎用サイズらしい。実は、HyperjuiceのDC outputのサイズも、外径5.5mm, 内径2.5mmである。したがって、これを繋ぐケーブルがあればよい。これなら国内でも買えると思うが、ついでなので、BixPowerのサイトから CAB-Z6 というケーブルを一緒に購入した。

HyperjuiceとBixpower CNT-C28 DC Power Connector for Macbook

接続は簡単。HyperjuiceにZ6ケーブルを繋ぎ、先端をC-28コネクターでMagsafeに変換して MacBook Air に繋げばよい。一瞬、充電できません、という表示が出ることもあるが、数秒後には充電できるようになる。Airline Adapterによる接続がオフィシャルの繋ぎ方らしいが、それだと、いささか不細工な感じになる。おまけに、コネクターの仕様の関係で充電できずに給電のみとなるらしいのである。Airline Adapterの値段を考えれば、BixPowerからケーブルとコネクター購入した方が、かえって安いくらいなのである。充電したいのであれば、おすすめのやり方だと思う。

au版iPhone4S、ezwebメールの設定

3月の半ばあたりから、ezwebメール、つまり、auの携帯メールのリアルタイム受信が iPhone でも出来るようになったらしく、とりあえずはそれで設定してみた。ところが、リアルタイム受信の実現方法が、Microsoft Exchange を使ったものであり、しかもパスワードが分からないということで、他のメーラーで普通に IMAP プロトコルとしての受信が出来無いみたいなのであった。

ううむ、と思いつつ、あちこち検索した後に決断す。リアルタイム受信は止めようと。普通の IMAP にしましょうよ、って。

ということで、Wi-Fi切って、メッセージから#5000に1234送って、メールの設定を手動で行うように変更した。普通の IMAP であるから、Macbook Air の Thunderbird からも送受信できるのである。

さらに、AppStoreにある、デコメーラーというのを使って、メールの転送設定をすれば、サーバーが受信したと同時に転送され、そうして、メール来たよ〜とiPhoneの画面上にポップアップが出るのである。これってリアルタイム受信とほとんど同値みたいなもの。

ということで、今後どうなるのか、メッセージアプリで使えるようになるのか、といったことはあるものの、自分としては、現時点では 普通のIMAP+デコメール転送が一番のような気がするのであった。

アナログ音源デジタル化計画

数年前にもアナログ・レコードをパソコンに取り込んだことはあったのだが、そのときは直接には取り込めず、音楽CDを焼ける専用機を使って一度CDに焼き、それをパソコンに取り込むという手順を踏んでいた。今回、久しぶりにLPレコードを買ったののだが、またそれを繰り返すのも面倒だなあということで、ちょっと調べてみた。USBに接続するオーディオ・インターフェイスというものがあり、それを使えば、アナログの音源を直接コンピューターに取り込めるらしい。

ということで購入したのが、Behringerという会社のU-Phono UFO202 という USB オーディオ・インターフェイス。2000円ちょっとと安価なのだが、フォノ・イコライザー(アンプ)も内蔵していて、ライン出力のない昔ながらのレコード・プレイヤーを直接繋げることも出来る。

Behringer U-Phono UFO202 (USB/Audio Interface)

録音用のソフトとして Audacity というのが付属しているが、これはオープンソースなので、ネットから最新版をダウンロードして、そちらを使うことにした。使い方は簡単で、入力としてUSBを選んで録音ボタンを押すだけ。ただし、これを曲ごとに分割するのが、存外に面倒。いや、手順は簡単なんだが。

ともあれ、これで、アナログ音源をコンピューターに取り込む準備が出来た。あとは根気だけ 😉

スキャンした書籍の後処理など

自炊した(業者さんに依頼しているから厳密には違うかもだが)書籍のPDFの後処理についてのメモ。

数学関係の本は,ほとんどが白黒なので,最終的にはモノクロ2値にすることにした。PDFをページ毎の画像にばらして,処理したあと,最終的にFAX Group4圧縮でモノクロ2値のTiffにする。こうすると,1頁あたり50KBないしは100KB程度に収まる。

PDFをベージ毎の画像にばらすには,Acrobatあるいは,Xpdf付属のpdfimagesを使う。ただし,pdfimagesはjpeg指定なのにppmを吐き出すことがあって,信頼性にやや欠ける。でも,シェルから呼び出せるので,バッチ処理には便利。

画像の変換には,最初GIMPを使っていた。GIMPをシェルから使うために,Script-Fuというスキーム(Lispの方言)によるスクリプトをいくつか書いた。それはそれで良かったのだが,スピードがいまいち遅いので,ImageMagickに鞍替えした。ImageMagickはびっくりするくらい多機能(たとえば,傾き補正を自動でやってくれる)で,自炊本の後処理くらいなら,これで十分かなと思う。

具体的にはImageMagickのconvertというコマンドを用いて,赤チャンネル抽出(-channel Red -separate), 2倍拡大(-filter Lanczos -resize 200%), レベル補正(たとえば -level 20%,90%,0.6 とか), 傾き補正(-deskew 40%), モノクロ2値(たとえば -threshold 70% とか), 圧縮(-compress Group 4), TIFFで保存(出力先を hoge.tif などと), といった処理を行う。

これをすべてのページに施すのだが,Perlを使って一括処理することを試みた。実のところ,Perlの勉強も兼ねているという泥縄。まあしかし,入門書は本棚にあるし,ネットで適当に調べながら,Getopt::Long という便利なモジュールを利用して,なんとか動作するものが書けた。

しばらく実験していると,プログラムの設計に柔軟性がないことに気付く。もう少し汎用的なツールになっていると良いのにと思う。あるいは,Cコンパイラーのmakeみたいな構造にしても良いなあ,とも思う。このあたりは,思案中。

ともあれ,現時点では次のような感じで,一括変換を行なっている。

% pdf2mono hoge.pdf -level 40 240 0.7 -threshold 180

GIMPを使って自炊PDFを加工してみた

XNView付属(?)のnconvertでのバッチ処理の手順は大体わかったのだが、より細かい加工をしようとすると、やや物足りない感じもする。そこで、GIMPを試してみた。PhotoShopのGNU版である。使ったのは、Mac用にアプリ化した Gimp.app のバージョン2.6.11 である。Lionでも問題なく起動した。

いろいろ試した結果、nconvertの処理でも大差ないことがわかった 😉 。ならば、わざわざGIMP使う必要もないのだが、せっかく試したので、とりあえずメモ。

まずは、PDFからバラした画像(TIFF形式)を2倍に拡大する。コントラストと明るさを変更する。オートでの修正というのがあり、これでも悪くない。こうすると、文字がくっきりし、文字のまわりのモヤモヤしたノイズっぽいのも目立たなくなる。これであきたらないときは、レベルの修正を手動で、さらに物足りない場合は、トーンカーブを使うとよい。トーンカーブをあれこれいじって実験すると、これはこれで面白いのだが、写真ならともかく、スキャンした書籍の場合、ここで凝っても大差ないように思う。

次は減色(ポスタリゼーション)あるいは、グレースケール化、あるいはモノクロ2値化。ここは本によって変えると良いが、数学の本の場合は、モノクロ2値で良いだろう。threshold(しきい値)を変えると微妙に結果が変わるが、大体200前後で問題ないと思う。オートもある。

このままPDFにしても良いし、半分のサイズに戻しても良い。解像度を半分にして元のサイズに戻してみたが、普通に見る分にはさほど劣化を感じなかった。最初に2倍に拡大して処理したのが効いていると思う。

ということで、GIMPもなかなかに使えるのである。あとは、バッチ処理のために、script-fuというの書けるようにならないと。なんとscript-fuの使用言語はLispの方言であるSchemeですよ。スキームでプログラム書いたことなどないのだが、この位なら、お手本参考になんとかなると思う。

しかしなあ、いまさらcarとかcdrとかやるとは思わなかったな(笑)。Lisp 1.5 以来ですよ。

自炊PDFの加工メモ

Hardy-WrightのAn Introduction to The Theory of NumbersのPDF化が完了し,bookscanのサイトからダウンロードした。450ページで150MBほど。これをモノクロ化した。Macで利用できるツール探しから始めたので,けっこう時間かかった。以下,その手順。本のファイル名は hr.pdfとする。

  1. AcrobatでPDFを開き,ページ毎にTIFF形式の画像ファイルにして保存。hr_Page_001.tiffからhr_Page_450.tiffまでの450個のファイルが出来る。
  2. XNViewMP.app, XNConv.app の配布サイトから nconvert というUNIX プログラムをダウンロードしておく。パスの通っている適当な場所(/usr/local/bin など)に移動。
  3. XNViewMP.appで画像を開き,ガンマ補正などのパラメーターを決める。今回は,コントラスト20,ガンマ0.40に決めた。
  4. ターミナルを開き,画像ファイルのある階層に行く。nconvertを使って,すべてのページをモノクロにするのだが,まずは200%に拡大し,それから画像補正(コントラスト,ガンマなど),しかるのちに,階調を64(6 bit)から順に半分ずつにして2bitまで下げ,最後に白黒2値(1bit)に落とす。具体的には,次のようにする。
    nconvert -ratio -rtype lanczos -resize 200% 200% -contrast 20 -gamma 0.4 -dither -grey 64 -dither -grey 32 -dither -grey 16 -dither -grey 8 -dither -grey 4 -binary nodither *.tiff
  5. 変換された画像を結合する。Acrobatを開いて,hr_Page_001.tif からhr_Page_450.tif までを1つのPDFにまとめ,適当なファイル名で保存。ここでは hr_mono.pdf とする。なお,TIFFの読み込みについては,デフォルトではJBIG2のロスレスでの圧縮になっていたが,これだと表示に時間かかるみたいなので,CCITTでの圧縮に変更した。もっとも,あとでPDF/Xにするなら,ここは気にしなくても良いかも。
  6. このままでも良いが,OCR処理する。画像は元のまま(exact)としたが,300dpiでダウンサンプリングしても良いかも。hr_mono_ocr.pdf として保存。
  7. OCRかけると,なぜかMacのPreviewで読むとき,スクロールが非常に重たい。そこで,PDF/Xに変換する。デフォルトのX1aのタイプにしたが,違いはよく分からない。hr_mono_ocr_x1a.pdf として保存。

以上で完了。最後のPDF/X化をすることで,スクロールが非常にスムーズになり,快適。ファイルサイズも30MBくらいだし,文字もくっきりと黒くなって,とても読みやすくなった。

Hardy-Wright Page 238

XnViewで画像処理

XnViewという画像処理ソフトで実験。Mac OS X で使えるのは,XnView MP というバージョン。自炊PDFから Seeley「フーリエ解析」(東京図書) を選んでみた。サンプルページで実験してから,全体をバッチ処理する。

Seeley フーリエ解析 p.102

これが元の画像。プレビュー・ウィンドウで,メニューから,Image -> Adjust -> Enchance Colors と進む。Contrastを8,Gammaを0.5にしたのが,下の画像。

Seeley フーリエ解析 p.102 Contrast=8, Gamma=0.5

どうだろうか。少なくとも文字の黒が濃くなって読みやすいと思う。元画像はいじってないので,いろいろ実験してみよう。