J'ai imité les merveilleux ancêtres et j'ai écrit le code OCR à partir de PDF en Python. Et utilise. Ce que je fais, c'est convertir le PDF en jpg avec poppler, puis le transcrire dans un fichier txt avec Tesseract OCR.
Je suis un débutant, donc je serais heureux si vous pouviez signaler quelque chose d'étrange dans le code. J'ai également évoqué de nombreux sites que je n'ai pas cités. Merci beaucoup.
En référence à ce site, la structure des dossiers est la suivante. Comment convertir un PDF en fichier image (JPEG, PNG) avec Python
Dossier parent | Dossier enfant |
---|---|
\ Courant | ¥image_file |
¥pdf_file | |
¥poppler | |
¥txt_file |
import os
import pathlib
from pathlib import Path
from pdf2image import convert_from_path
from PIL import Image
import sys
import pyocr
import pyocr.builders
import pathlib
import glob
def cleanup():
#Répertoire contenant le fichier img à supprimer
image_dir = pathlib.Path('./image_file')
#Obtenez une liste de fichiers jpeg dans un répertoire avec glob
jpg_path = list(image_dir.glob('**/*.jpeg'))
#Répertoire contenant le fichier txt à supprimer
txt_dir = pathlib.Path('./txt_file')
#Obtenez une liste de fichiers txt dans un répertoire avec glob
txt_path = list(txt_dir.glob('**/*.txt'))
if jpg_path == []: #Pause si la liste est vide
pass
else:
for i in jpg_path:
os.remove(i)
if txt_path == []: #Pause si la liste est vide
pass
else:
for i in txt_path:
os.remove(i)
def pdf_to_image():
# poppler/Ajouter un bac à la variable d'environnement Path(Temporairement)
# Path("__file__").parent.resolve()donc.Renvoie le chemin absolu du dossier parent du fichier py
poppler_dir = pathlib.Path("__file__").parent.resolve() / "poppler/bin"
#pathsep est un délimiteur lors de l'ajout aux variables d'environnement;
os.environ["PATH"] += os.pathsep + str(poppler_dir)
#Chemin du fichier PDF
pdf_dir = pathlib.Path('./pdf_file')
#Obtenez une liste de fichiers pdf dans un répertoire avec glob
pdf_path = list(pdf_dir.glob('**/*.pdf'))
# PDF ->Convertir en image(200dpi)
pages = convert_from_path(str(pdf_path[0]))
#Enregistrer les fichiers image page par page
image_dir = pathlib.Path("./image_file")
for i, page in enumerate(pages): #Obtenez le nombre de pages de pages avec la fonction énumérer
# .Afficher la fin du chemin avec la tige (pathlib)
file_name = pdf_path[0].stem + "_{:02d}".format(i + 1) + ".jpeg "
image_path = image_dir / file_name
#Enregistrer au format JPEG
page.save(str(image_path), "JPEG")
def image_ocr():
# tesseract-Passer le chemin OCR
tessera_path = "C:\***\Tesseract-OCR"
#pathsep est un délimiteur lors de l'ajout aux variables d'environnement;
os.environ["PATH"] += os.pathsep + str(tessera_path)
tools = pyocr.get_available_tools()
if len(tools) == 0:
print("No OCR tool found")
sys.exit(1) #L'argument 1 renvoie 1 dans l'état final
tool = tools[0]
#Répertoire avec les fichiers cibles ocr
image_dir = pathlib.Path('./image_file')
#Obtenez une liste de fichiers jpeg dans un répertoire avec glob
jpg_path = list(image_dir.glob('**/*.jpeg'))
for i in jpg_path:
#Convertir le contenu ocr en la variable txt
txt = tool.image_to_string(
Image.open(str(i)),
lang="jpn",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
#Txt variable txt_Enregistrer en tant que fichier txt dans le répertoire de fichiers
with open('./txt_file/' + str(i.stem) + '.txt', mode='wt') as t:
t.write(txt)
Recommended Posts