2012年08月31日

スキャン画像ものぐさ補正作戦

Summary:
I wrote a simple bash script that calls scantailor-cli to deskew and clean scanned images.
It processes all jpg images including subfolders.
And it uses xargs to run scantailor-cli up to 4 instances simultaneously.
IT OVERWRITES ORIGINAL IMAGES SO KEEP BACKUP BEFORE TRYING!
Enjoy!

ちょっと前の「P6道とは打ち込むことと見つけたり」の続きです。
スキャンした紙面をScanTailorというソフトで補正すると書きましたが、このソフトはGUIで、基本的に1つのフォルダ内の画像に対してだけ機能します。
これまでためてきた紙面は、打ち込む時になったら補正すればいいやと思っていたので、何も補正せずに掲載号ごとのフォルダに分けて保管していました。
後になってスマホで読もうとしたら、補正なしでは読めたもんではない、かと言ってGUIでは1フォルダずつしか補正できない、という事でScantailorのコマンドライン版を使ってスクリプトで一括補正することにしました。

bashで画像フォルダをカレントディレクトリにした状態で以下のスクリプトを呼び出すとサブフォルダまで再帰的にたどってすべてのJPGファイルを補正(黒枠除去、傾き補正、ノイズ除去、レベル補正、50%縮小)します。
元画像は問答無用で上書きするので(おい)バックアップを取っておいてください。
キモはxargsコマンドを使って複数画像を同時に処理しているところです。

こんなの需要あるかなと思いましたが、海外では意外と自炊の情報交換が盛んで、scantailorもかなり使われている印象なので、一応アップしてみました。

ファイルや元雑誌の種類によるパラメータ調整は全くやっていないにも関わらず、なかなか良好な結果を出しています。
deskew1.png
I/Oのページヘッダーの部分は黒帯に白抜きなので、一部コピーの影と誤認されて消されてるページがありますが、実害はあまりないのでよしとします。(おい)
deskew2.png


#!/bin/bash
processjpg(){
echo processing $PWD/$1...
local BASENAME
BASENAME=`basename $1 .jpg`
convert $1 "$BASENAME".tif
scantailor-cli --layout=1 --disable-content-text-mask --color-mode=color_grayscale --normalize-illumination "$BASENAME".tif .
convert -resize 50% -level 20%,90% $BASENAME.tif "$BASENAME".jpg
rm $BASENAME.tif
}

processdir(){
pushd "$1" > /dev/null

#recursive
IFS=$'\n'
local dirname
for dirname in `ls -1`; do
if [ -d "$dirname" -a "$dirname" != '.' ]
then
processdir "$dirname"
fi
done

#remove temporary file
rm *_d.jpg 2> /dev/null
rm *.tif 2> /dev/null

#unpaper process
#parallel processing
ls -1 *.jpg | xargs -n1 -P4 -I{} bash -c "processjpg {}"
popd > /dev/null
}

SAVEIFS=$IFS
export -f processjpg
processdir "$PWD"
IFS=$SAVEIFS

ラベル:自炊 OCR scantailor
posted by eighttails at 21:11| Comment(0) | PC-6001 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: