Notas más rápidas con Python y Deep Learning
Transcripción de diapositivas PDF con OCR basado en aprendizaje profundo

En el actual y revolucionario mundo de las tele-conferencias, se vuelve cada vez mas necesario la utilización de las herramientas que nos ayuden a la toma de notas y entendimiento de la información presentada. Estas conferencias se suelen acompañar con documentos de diapositivas,  de forma tradicional, el proceso de tomar notas sobre tales conferencias implica copiar o transcribir de forma manual gran parte del contenido de dichos documentos.

Aprovechando todas las posibilidades que el lenguaje de programación de python nos provee y el uso de OCR (reconocimiento de caracteres de objetos), se desarrolló este proyecto, buscando la transcripción automática de dichas diapositivas en PDF para manipular directamente su contenido en un archivo de texto.

En este articulo se muestra el proceso de transcripción generado en python para llegar a dicho objetivo.

La razón por la que se elige no usar herramientas tradicionales de PDF a texto es que tienden a dar más problemas que soluciones. 

El uso de herramientas tradicionales plantean problemas como tener que analizar la salida final con patrones complejos de expresiones regulares y ponen en riesgo la seguridad de la información presentada en los documentos, así que se decidió jugar con la detección de objetos y OCR para mejorar el rendimiento e intentar automatizar de forma mas completa el proceso.

Los pasos que se siguieron para este proyecto fueron los siguientes:

1.- Convertir el PDF objetivo en imágenes analizables.

2.- Detectar y reconoce el texto en dichas imágenes.

3.- Almacenar el texto en una archivo que posteriormente podremos utilizar de la manera que mejor convenga.

Para este caso utilizamos un código que utiliza una adaptación de pytorch del modelo CTPN junto con algunos códigos de pythorch_ctpn para la detección de texto y el modelo CRNN con códigos de crnn.pytorch para el reconocimiento de texto.

Para éste articulo, se utilizaron las diapositivas en pdf de esta introducción al aprendizaje por refuerzo de David Silver. Comencemos escribiendo un código para convertir cada diapositiva al formato png usando el paquete pdf2image.

Se pueden descargar directamente en este LINK

El paquete que utilizamos para este proceso es pdf2image.

1.  from pdf2image import convert_from_path

2.  from pdf2image.exceptions import (

3.  PDFInfoNotInstalledError,

4.  PDFPageCountError,

5.  PDFSyntaxError)

6.  pdf_path = “path/to/file/intro_RL_Lecture1.pdf”

7.  images = convert_from_path(pdf_path)

8.  for i, image in enumerate(images):

9.  fname = “image” + str(i) + “.png”

10.  image.save(fname, “PNG”)

Para detectar y reconocer el texto en las imágenes, usaremos el detector de texto del repositorio ocr.pytorch. 

Puedes seguir las instrucciones en GitHub para descargar los modelos y guardarlos en la carpeta de puntos de control.

# adapted from this source: https://github.com/courao/ocr.pytorch

1.  %load_ext autoreload

2.  %autoreload 2

3.  import os

4.  from ocr import ocr

5.  import time

6.  import shutil

7.  import numpy as np

8.  import pathlib

9.  from PIL import Image

10.  from glob import glob

11.  import matplotlib.pyplot as plt

12.  import seaborn as sns

13.  sns.set()

14.  import pytesseract

15.  def single_pic_proc(image_file):

16.      image = np.array(Image.open(image_file).convert(‘RGB’))

17.      result, image_framed = ocr(image)

18.      return result,image_framed

19.  image_files = glob(‘./input_images/*.*’)

20.  result_dir = ‘./output_images_with_boxes/’

21.  # If the output folder exists we will remove it and redo it.

22.  if os.path.exists(result_dir):

23.      shutil.rmtree(result_dir)

24.  os.mkdir(result_dir)

25.  for image_file in sorted(image_files):

26.      result, image_framed = single_pic_proc(image_file) # detecting and recognizing the text

27.      filename = pathlib.Path(image_file).name

28.      output_file = os.path.join(result_dir, image_file.split(‘/’)[-1])

29.      txt_file = os.path.join(result_dir, image_file.split(‘/’)[-1].split(‘.’)[0]+’.txt’)

30.      txt_f = open(txt_file, ‘w’)

31.      Image.fromarray(image_framed).save(output_file)

32.      for key in result:

33.          txt_f.write(result[key][1]+’\n’)

34.      txt_f.close()

Aquí, configuramos las carpetas de entrada y salida, luego ejecutamos un ciclo sobre todas las imágenes de entrada (las diapositivas PDF convertidas) y luego pasamos a través de la función single_pic_proc () que ejecuta los modelos de detección y reconocimiento ubicados en el módulo ocr, para posteriormente guardar la salida en la carpeta de salida.

1.  import cv2 as cv

2.  output_dir = pathlib.Path(“./output_images_with_boxes”)

3.  # image = cv.imread(str(np.random.choice(list(output_dir.iterdir()),1)[0]))

4.  image = cv.imread(f”{output_dir}/image7.png”)

5.  size_reshaped = (int(image.shape[1]),int(image.shape[0]))

6.  image = cv.resize(image, size_reshaped)

7.  cv.imshow(“image”, image)

8.  cv.waitKey(0)

9.  cv.destroyAllWindows()

Finalmente utilizamos éste código para mostrar las salidas de ejemplo.

La salida en texto se vería así:

– AboutRL
Characteristics of Reinforcement Learning
What makes reinforcement learningdifferent from other machine
learning paradigms?
There isnosupervisor,only areward signal
Feedback is delavyed,not instantaneous
Time really matters(sequential,non ii.d data)
Agent sactions affectthe subseauent datait receives

Lo que tenemos aquí es una herramienta realmente poderosa para transcribir todo tipo de documentos, con ella es posible detectar y reconocer notas escritas a mano hasta texto aleatorio en tus fotos.

Generar tu propia herramienta con las funcionalidades que nos permite tener python es mejor que depender de un software que por lo general tienen costo y en los cuales la seguridad de la información deja mucho que desear.

Existen además una variedad de aplicaciones para la detección y análisis de texto en imágenes por medio de machine learning que podemos utilizar en la vida cotidiana y que mejoran de manera sustancial el tiempo y la efectividad con la que es llevada a cabo esta tarea de forma natural.

© 2019 EnlineaSaltillo.com

Todos los derechos reservados.