【问题标题】:Process a folder of tif files to create searchable PDF files处理 tif 文件的文件夹以创建可搜索的 PDF 文件
【发布时间】:2020-03-09 15:58:15
【问题描述】:

我正在研究一个工作流程,以从一堆缩微胶卷报纸中创建 PDF 可搜索文件和已识别文本的 txt 文件。每卷有近 500 张图片,如下所示:

Microfilm image

我正在做的是:

  1. 使用 ScanTailor 高级处理每个卷筒,以便裁剪图像、分离奇数页和偶数页、添加边距并为每页输出 tiff 文件,获得此功能

File list Unique page tif

  1. 然后,手动删除所有实际上不是报纸的页面(如滚动开始、滚动结束、建议和其他元图片)。

  2. 然后,将一份报刊的tif文件合并到一个文件中。例如,该特定报纸每个版本有 4 页。我使用 automator 和 Imagemagick 编写了一个 shell 服务,它接收来自 finder 的文件选择作为输入:

    对于“$@”中的 f

    /usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg "$@" -adjoin ~/Pictures/Microfilms/ediciones_%[文件名:原始].tif

    回显“$f” 完成

这里是我需要帮助的地方:

  • 在我的无知中,我不得不使用 -set filename:original '%t' 以避免文件覆盖,因为 IM 无法将文件 (-adjoin) 与输出文件名 %escape 合并(例如 %02d )。这没问题,但不是理想的。

  • 如何 cd 到输入文件的父文件夹?

  • ScanTailor的输出文件夹有近1000个文件,我需要处理67个文件夹。因此,您可以想象选择每个报纸版本的每 4 页并手动执行该过程...那么 我如何告诉 automator 获取每 4 个(或 n 个)文件并使用它们执行转换命令? , 并不是所有的报纸每个版本都有 4 页,所以最好的解决方案是询问用户有多少页(文件)有报纸版本。在这种情况下,我可以处理整个文件夹并让计算机通宵工作。

  • 最后,我使用 Tesseract 处理多页 tif 以输出可搜索的 pdf 和纯文本 (.txt)。这里我需要将 tesseract 进程添加到 automator,告诉 automator 处理合并的 tif 文件夹的所有文件(IM 进程的输出),首先使用 PDF 选项,然后使用 TXT 选项。

提前致谢

【问题讨论】:

  • 压缩 jpeg 选项会破坏您的所有工作。不要使用有损压缩,尤其是在 1 位图片上。
  • 它们不是 1bit 图像,您可以看到它们是 8bit 灰度
  • 如果您想要清晰可读的文本和较小的 PDF 大小,请在 ScanTailor 之后以黑白 1 位 TIFF G4 FAX(或 JBIG)保存。 Jpeg 压缩适用于半色调照片,而不适用于报纸。如果你想要一个不可读、模糊的文本 - 使用 JPEG。
  • 使用 scantailor 或 imagemagick 转换为 1bit 的所有类型对于阅读报纸都没有用处。看到图片了吗?

标签: pdf imagemagick ocr tesseract automator


【解决方案1】:

好吧,谁有同样的情况:

我从各处获取代码并制作了一个 Automator bash 脚本。

我创建了各种文件夹,里面有报纸的版本页数:文件夹“2”包含与 2 页报纸版本对应的所有 tiff 文件,文件夹“4”包含与 4- 对应的所有 tiff 文件页报纸版等...

因此,我打开一个 Finder 窗口,将文件视为大图标(缩略图),按 8 列文件列出(因此当报纸的页数多于或少于 4 或 8 页时,我可以轻松地以缩略图形式查看。我移动2页报纸的所有tiff文件到文件夹2,等等。

然后我使用脚本处理包含编号文件夹的文件夹(您可以下载here)。我也让它在这里:

for f in "$@"
do 
cd "$@"
if [ -d ./ediciones ]; then
echo "Ya existe la carpeta ediciones. Carpeta ya fue procesada?"
exit 1
else
mkdir ./ediciones
mkdir ./ediciones/ocr
fi


if [ -d ./1 ]; then
cd ./1
/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg +adjoin ../ediciones/edicion_%[filename:original].tif
cd ../
else
echo "No hay periódicos de 1 sola página"
fi

if [ -d ./2 ]; then
cd ./2

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+2)); do
j=$((i+1))
k=$((i+2))

/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]}  -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 2 paginas"
fi

if [ -d ./3 ]; then

cd ./3
arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+3)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))

/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]}  -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../

else
echo "no hay de 3 páginas"
fi

if [ -d ./4 ]; then
cd ./4

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+4)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))

/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 4 paginas"
fi

if [ -d ./5 ]; then
cd ./5

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+5)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))
n=$((i+5))


/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} ${arr[$m]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 5 paginas"
fi

if [ -d ./6 ]; then
cd ./6

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+6)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))
n=$((i+5))
o=$((i+6))


/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} ${arr[$m]} ${arr[$n]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 6 paginas"
fi

if [ -d ./7 ]; then
cd ./7

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+7)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))
n=$((i+5))
o=$((i+6))
p=$((i+7))


/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} ${arr[$m]} ${arr[$n]} ${arr[$o]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 7 paginas"
fi

if [ -d ./8 ]; then
cd ./8

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+8)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))
n=$((i+5))
o=$((i+6))
p=$((i+7))
q=$((i+8))


/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} ${arr[$m]} ${arr[$n]} ${arr[$o]} ${arr[$p]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 8 paginas"
fi

if [ -d ./12 ]; then
cd ./12

arr=(`ls *.tif`)
num=${#arr[*]}
for ((i=0; i<num; i=i+12)); do
j=$((i+1))
k=$((i+2))
l=$((i+3))
m=$((i+4))
n=$((i+5))
o=$((i+6))
p=$((i+7))
q=$((i+8))
r=$((i+9))
s=$((i+10))
t=$((i+11))
u=$((i+12))


/usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -set filename:original '%t' -compress jpeg ${arr[$i]} ${arr[$j]} ${arr[$k]} ${arr[$l]} ${arr[$m]} ${arr[$n]} ${arr[$o]} ${arr[$p]}  ${arr[$q]}  ${arr[$r]}  ${arr[$s]}  ${arr[$t]} -adjoin ../ediciones/edicion_%[filename:original].tif
done;
cd ../
else
echo "no hay de 12 paginas"
fi


cd ./ediciones
for i in *.tif ; do 
/usr/local/bin/tesseract -l spa $i ./ocr/$i txt PDF;
done;



cd ./ocr

sed -i '' "s/º/o/g" *.txt


cd ../
cd ../
done;
name=${PWD##*/}
a=1
for i in ./ediciones/ocr/*.pdf; do
  new=$(printf "%03d.pdf" "$a") 
  mv -i -- "$i" "DM_${name}_${new}"
  let a=a+1
done;
for z in ./ediciones/ocr/*.txt; do
  new=$(printf "%03d.txt" "$a") 
  mv -i -- "$z" "DM_${name}_${new}"
  let a=a+1


    echo "$f"
done

这段代码做的:

  1. 将所有版本的 tiff 文件合并到一个使用 imagemagick 创建 (ediciones) 的文件夹中,并进行合理压缩。

  2. 阅读报纸合并文件并创建转录的可搜索 PDF 和 Txt 文件,这两个文件都位于名为 OCR 的子文件夹中。这是使用 Tesseract 和最佳训练数据文件制作的

  3. 用“o”更改所有“º”(总是写为错误识别的字符)。这是用 sed 制作的

  4. 重命名所有文件以符合我们的存档文件名规则。对我们来说是 DM_0001_01(DM 表示“Diario microfilmado”-缩微报纸-),0001 是卷号,01+ 是卷内的版本。

就是这样。

在此之前我与 Scantailor 合作生成文件,然后让电脑通宵处理 2 或 3 个文件夹。

希望对像我这样的人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多