El PDF tiene este aspecto:
Es necesario dividir la imagen en dos y eliminar el ruido de los bordes que interfiere con el OCR.
Herramientas utilizadas:
Imagemagick
Tesseract
Python
1. Convertir el PDF a imágenes JPG.
import os
cmd = "convert -density 200 %s[%i] -trim %s"
pdfFile = "document.pdf"
jpgFile = "tmppage%i.jpg"
pages = 161
for n in range (0,pages):
print "Extrayendo " + jpgFile % n
os.system (cmd % (pdfFile, n, jpgFile % n))
cmd = "convert -density 200 %s[%i] -trim %s"
pdfFile = "document.pdf"
jpgFile = "tmppage%i.jpg"
pages = 161
for n in range (0,pages):
print "Extrayendo " + jpgFile % n
os.system (cmd % (pdfFile, n, jpgFile % n))
2. Dividir verticalmente las imágenes.
inFile = "tmppage%i.jpg"
outFile = "tmp2page%i.jpg"
pages = 161
cmd = "convert %s -crop 50%%x100%% -trim %s"
for n in range(0,pages):
print "Dividiendo " + inFile %n
os.system (cmd % (inFile % n , outFile % n ))
3. Recortar los bordes
inFile = "tmp2page%i-%i.jpg"
outFile = "page%i.jpg"
pages = 161
mainContador = 0
pageFlag = 0
cmd = "convert %s -gravity Center -crop 90%%x99%% +repage -trim %s"
for n in range(0,pages):
for i in range(2):
fIn = inFile %(n,pageFlag)
fOut = outFile % mainContador
print "Recortando %s hacia %s" % (fIn,fOut)
os.system (cmd %(fIn,fOut))
mainContador += 1
pageFlag+=1
if pageFlag==2:
pageFlag = 0
4. Convertir las imagenes a TIFF
Tesseract utiliza imagenes TIFF como entrada. Aquí hacemos la conversión. ¿Por qué no usar TIFF desde el principio? Por el tamaño de los archivos.
pdfFile = "page%i.jpg"
tifFile = "tif/page%i.tif"
pages = 322
cmd = "convert %s %s"
for n in range(pages):
f1 = pdfFile % n
f2 = tifFile % n
print "convirtiendo " + f1
os.system (cmd %(f1,f2))
5. OCR
tifFile = "page%i.tif"
txtFile = "ocr/page%i" #No necesita extension .txt
pages = 322
cmd = "tesseract %s %s"
for n in range(pages):
f1 = tifFile % n
f2 = txtFile % n
print "convirtiendo " + f1
os.system (cmd %(f1,f2))
txtFile = "ocr/page%i" #No necesita extension .txt
pages = 322
cmd = "tesseract %s %s"
for n in range(pages):
f1 = tifFile % n
f2 = txtFile % n
print "convirtiendo " + f1
os.system (cmd %(f1,f2))