ocr bashスクリプトを使用してスキャンする方法

ocr bashスクリプトを使用してスキャンする方法

スキャンプロセスを簡素化するために、OCRを1ステップでスキャンして適用できるスクリプトを作成します。しかし、私のbash技術は非常に悪いので、助けてくれて本当にありがとう。私の試みは次のとおりです。

#!/bin/bash

mydate="$(date +"%Y%m%d-%H%M%S")"
image="$(scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf)"
ocrmypdf --deskew "$image" "$mydate".pdf

このコマンドは、日付別のファイル名を作成しなくてもうまく機能します。

scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf > scan.pdf && ocrmypdf --deskew scan.pdf scan.pdf

OCR処理には時間がかかりますので、スキャン時に時間(最大秒)を含むファイル名を保存してから、最終ファイルに適用する必要があります。あるいはocrmypdf、名前を指定せずにファイルをパイプし、日付と時刻の情報を含むファイルを保存することもできます。

答え1

一時ディレクトリを作成し、ここにファイルを保存できます。mktemp一意のファイル/ディレクトリ名を提供するように設計されており、この目的に適しています。

tmpdir=$(mktemp -d OcrTmpDirXXXXXXXXX)

scanimage args >"$tmpdir/in.pdf"
ocrmypdf args "$tmpdir/in.pdf" "$tmpdir/out.pdf"

printf 'See "%s" for result\n' "$tmpdir"

答え2

問題は

image="$(scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf)"

$image変数には次のものが含まれています。バイナリコンテンツファイル名ではなくPDF名です。


非常にトリッキーな方法は次のとおりです。プロセスの交換

ocrmypdf --deskew <(
    scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf
) "$mydate".pdf

私はocrmypdfがそれを受け入れることを保証しません。


ocrmypdfが-「標準入力」を表すファイル名を受け入れる場合は、次のことができます。

scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf \
| ocrmypdf --deskew - "$mydate".pdf

あるいは、二重ハイフンが必要な場合があります。このツールがどのように機能するかわかりません(マンページを確認)。

... \
| ocrmypdf --deskew -- - "$mydate".pdf

関連情報