Archives de catégorie : Recipe

OCR

Cela fait des années (non, je ne plaisante pas) que je cherche à faire un petit bout de logiciel qui prend en entrée des PDF (en provenance directement d’un scanner… ce serait top) et qui les classe en fonction du contenu des PDF.

J’ai cherché plusieurs fois des solutions, mais à chaque fois, je tombais sur des lib qui utilisaient un service cloud pour faire l’OCR des PDF. Pas acceptable pour moi.

Et là hier soir, alors que je jouais avec nextcloud, je vois un pluggin OCR. Toujours curieux, je regarde un peu ce que cela implique. Je découvre alors qu’il utilise ‘tesseract.js’. WTF… un OCR en javascript !!

Il m’a pas fallut 10 minutes pour trouver l’équivalent en python (basé sur le binaire tesseract). 10 minutes de plus, et j’avais un container opérationnel capable de lire des PNG. Ensuite, j’ai un peu bricolé, et BIM… ouverture de PDF, extraction des images (JPG) et OCR sur les images.

Et dire que c’était aussi simple que ça !

Recipe

Dockerfile

FROM alpine
ENV HOSTNAME infra ENV PS1 "[\h] \w \$ " RUN apk add python3 && pip3 install --upgrade pip && pip3 install virtualenv

Lib python

apk add gcc
apk add make
apk add musl-dev
apk add python3-dev
apk add zlib-dev
apk add libjpeg
apk add jpeg-dev
pip install pytesseract
apk add tesseract-ocr
pip install PyPDF2

Paramétrage tesseract

wget https://github.com/tesseract-ocr/tessdata/raw/master/fra.traineddata
mkdir -p /usr/share/tessdata
mv fra.traineddata /usr/share/tessdata

Ouverture de PDF

pip install reportlab
wget https://raw.githubusercontent.com/ronanpaixao/PyPDFTK/master/pdf_images.py

Utilisation (lecture PNG)

import pytesseract
print(pytesseract.image_to_string(Image.open('test.png'), lang='fra'))

Utilisation (ouverture de pdf)

import PyPDF2
import pytesseract
import pdf_images
input1 = PyPDF2.PdfFileReader(open("test.pdf", "rb"))
page0 = input1.getPage(0)
pdf_images.extract_images(page0)
print(pytesseract.image_to_string(Image.open('IMG_0000.jpg'), lang='fra'))