¿Cómo extraer texto con OCR de un PDF en Linux?


Respuestas:


25

He tenido éxito con el puerto Linux con licencia BSD del sistema Cuneiform OCR.

Parece que no hay paquetes binarios disponibles, por lo que debe compilarlo desde el origen. Asegúrese de tener las bibliotecas ImageMagick C ++ instaladas para admitir esencialmente cualquier formato de imagen de entrada (de lo contrario, solo aceptará BMP).

Si bien parece ser esencialmente indocumentado, aparte de un breve archivo README, he encontrado que los resultados de OCR son bastante buenos. Lo bueno de esto es que puede generar información de posición para el texto OCR en formato hOCR , de modo que sea posible volver a colocar el texto en la posición correcta en una capa oculta de un archivo PDF. De esta manera, puede crear archivos PDF "buscables" desde los cuales puede copiar texto.

He usado hocr2pdf para recrear archivos PDF a partir de los resultados de OCR y PDF originales de solo imagen. Lamentablemente, el programa no parece admitir la creación de archivos PDF de varias páginas, por lo que es posible que deba crear un script para manejarlos:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

Tenga en cuenta que el script anterior es muy rudimentario. Por ejemplo, no retiene ningún metadato PDF.


¿Alguna idea para mejorar este script para agregar una etapa de corrección ortográfica para corregir errores en el paso de reconocimiento?
Gökhan Sever

@ Gökhan Sever, ¿quiere decir que agrega un corrector ortográfico interactivo donde se le solicita al usuario que reemplace las palabras mal escritas / desconocidas? Creo que podría hacer eso agregando algo como aspell check --mode=html "$base.html"en el script justo después de ejecutar cuneiforme.
Jukka Matilainen

Esta es una solución. Sin embargo, sin ver todo el contexto del texto, es difícil hacer correcciones. Sería mejor ver una interfaz integrada en el ocrfeeder.
Gökhan Sever

1
Por cierto, uso tesseract para el reconocimiento de caracteres: reemplazando la línea cuneiforme con: tesseract "$ page" "$ base" hocr
Gökhan Sever

1
Pequeña corrección: la línea para tesseract al menos para otros idiomas además del inglés, aquí, por ejemplo, alemán (= deu) es: `tesseract" $ page "" $ base "-l deu hocr` (por supuesto, debe eliminar el ``) .
Keks Dose

14

Vea si pdftotext funcionará para usted. Si no está en su máquina, deberá instalar el paquete poppler-utils

sudo apt-get install poppler-utils 

También puede encontrar el kit de herramientas pdf de uso.

Una lista completa de software pdf aquí en wikipedia.

Editar: dado que necesita capacidades de OCR, creo que tendrá que probar una táctica diferente. (es decir, no pude encontrar un convertidor de pdf2text de Linux que haga OCR).

  • Convierte el pdf a una imagen
  • Escanee la imagen a texto usando las herramientas de OCR

Convertir pdf a imagen

  • gs: El siguiente comando debe convertir archivos PDF de varias páginas a archivos tiff individuales.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - filename

  • Utilidades de ImageMagik : hay otras preguntas en el sitio de SuperUser sobre el uso de ImageMagik que puede utilizar para ayudarlo a realizar la conversión.

    convertir foo.pdf foo.png

Convertir imagen a texto con OCR

Tomado de la lista de Wikipedia de software OCR


2
¿Este programa también funciona para documentos de texto escritos a mano?
Ivo Flipse

1
No, no creo que tenga capacidades de OCR. Simplemente puede extraer el texto incrustado en el pdf. Página del manual
nagul

Sí, esto funciona para documentos PDF que ya vienen con el texto incrustado. Mi caso es exactamente uno donde no lo hace.
Helder S Ribeiro

1
@ obvio171 Se agregó la mejor opción que pude encontrar para que OCR funcione en su caso.
nagul

12

Google Docs se ahora utilizar OCR para convertir sus documentos subidos imagen / PDF a texto. He tenido buen éxito con eso.

Están utilizando el sistema OCR que se utiliza para el gigantesco proyecto de Google Books .

Sin embargo, debe tenerse en cuenta que solo se aceptarán archivos PDF con un tamaño de 2 MB para su procesamiento.

Actualización
1. Para probarlo, cargue un archivo PDF de <2 MB en Google Docs desde un navegador web.
2. Haga clic derecho en el documento cargado y haga clic en "Abrir con Google Docs".
... Google Docs se convertirá en texto y se generará en un nuevo archivo con el mismo nombre pero el tipo de Google Docs en la misma carpeta.


La respuesta no es realmente específica de Ubuntu, pero realmente quiero agradecerles: ¡una solución BRILLANTE! :)
Pitto

Esto fue realmente útil :) Subí un archivo de 50 MB ayer y funcionó. Parece que han aumentado el límite de tamaño.
Gaurav

2

Geza Kovacs ha creado un paquete de Ubuntu que es básicamente un script que utiliza hocr2pdfcomo lo sugirió Jukka, pero hace que las cosas sean un poco más rápidas de configurar.

De la publicación del foro de Ubuntu de Geza con detalles sobre el paquete ...

Agregar el repositorio e instalar en Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Ejecutar ocr en un archivo

pdfocr -i input.pdf -o output.pdf

Repositorio de GitHub para el código https://github.com/gkovacs/pdfocr/


2

La mejor y más fácil forma de usarlo pypdfocres que no cambia el pdf

pypdfocr your_document.pdf

Al final, tendrá otro de your_document_ocr.pdfla forma que lo desee con texto de búsqueda. La aplicación no cambia la calidad de la imagen. Aumenta un poco el tamaño del archivo al agregar el texto superpuesto.

Actualización 3 de noviembre de 2018:

pypdfocrya no es compatible desde 2016 y noté algunos problemas debido a que no se mentained. ocrmypdf( module ) hace un trabajo symiliar y puede usarse así:

ocrmypdf in.pdf out.pdf

Instalar:

pip install ocrmypdf

o

apt install ocrmypdf

1

PDFBeads funciona bien para mí. Este hilo " Convertir imágenes escaneadas en un solo archivo PDF " me puso en funcionamiento. Para un escaneo de libros en blanco y negro, debe:

  1. Cree una imagen para cada página del PDF; cualquiera de los ejemplos de gs anteriores debería funcionar
  2. Generar salida de hOCR para cada página; Utilicé tesseract (pero tenga en cuenta que Cuneiform parece funcionar mejor).
  3. Mueva las imágenes y los archivos hOCR a una nueva carpeta; los nombres de archivo deben corresponder, por lo que file001.tif necesita file001.html, file002.tif file002.html, etc.
  4. En la nueva carpeta, ejecute

    pdfbeads * > ../Output.pdf
    

Esto colocará el PDF recopilado y OCR en el directorio principal.


1

otro script usando tesseract:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Asprise OCR Library funciona en la mayoría de las versiones de Linux. Puede tomar la entrada y salida de PDF como PDF de búsqueda.

Es un paquete comercial. Descargue una copia gratuita de Asprise OCR SDK para Linux aquí y ejecútelo de esta manera:

aocr.sh input.pdf pdf

Nota: el 'pdf' independiente especifica el formato de salida.

Descargo de responsabilidad: soy un empleado de la empresa que produce el producto anterior.


Esta publicación indica que el producto puede hacerlo, lo cual es una sugerencia útil que debe publicarse como comentario. No explica cómo resolver realmente el problema, que es lo que deberían hacer las respuestas. ¿Puedes ampliar tu respuesta para que alguien pueda ver cómo hacer la solución?
Fixer1234

Gracias @ fixer1234, lo he editado para incluir el comando.
Asprise Support

0

Pruebe Apache PDFBox para extraer contenido de texto del archivo PDF. En el caso de imágenes incrustadas en archivos PDF, utilice ABBYY FineReader Engine CLI para Linux para extraer texto.


Encontré que ABBYY OCR es bastante lamentable, uno de los programas menos capaces que he probado. Puede ser que sea adecuado, con una imagen muy limpia del texto fuente estándar de tamaño de texto del cuerpo típica, sin fuentes mezcladas, tamaños mixtos, diseño complejo, gráficos, líneas, etc.
fixer1234

Ya también lo intenté, funciona bien. Tengo alguna duda, ¿puedes ayudarme?
Praveen Kumar KR

Si lo que necesita no está cubierto en otras respuestas aquí, lo mejor que puede hacer es hacer su propia pregunta. Eso lo expondrá a muchos ojos.
fixer1234
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.