首页 > 解决方案 > 处理 tif 文件的文件夹以创建可搜索的 PDF 文件

问题描述

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

缩微胶片图像

我正在做的是:

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

文件列表 唯一页面 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_%[filename:original ].tif

    echo "$f" 完成

这是我需要帮助的地方:

提前致谢

标签: pdfimagemagickocrtesseractautomator

解决方案


好的,对于处于相同情况的人:

我从这里和那里获取代码并制作了一个 Automator bash 脚本。

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

因此,我打开一个 Finder 窗口,将文件视为大图标(缩略图),按 8 列文件列出(因此当报纸的页数多于或少于 4 或 8 页时,我可以很容易地在缩略图中看到。我移动了所有的 tiff 2 页报纸的文件到文件夹 2 和 o 儿子。

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

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 个文件夹。

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


推荐阅读