前言
本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~
注意:
本项目pdf的ocr对于表格、画图文字,水印等干扰没做任何处理,因此希望各位使用该功能的pdf尽量不要含有这些干扰项,以免影响翻译效果。
流程
1.构建环境
用conda创建一个虚拟python环境
conda crate -n pp python==3.11
2.安装包
安装飞浆paddle 和paddleocr
gpu版本
pip install paddlepaddle-gpu paddleocr
cpu版本
pip install paddlepaddle paddleocr
pdf转图片工具
https://github.com/oschwartz10612/poppler-windows/releases
pip install pdf2image
3.具体代码
假设在我们有一堆pdf文件在pdfs文件夹中,我们需要将其每个pdf文件转成对应的txt文件。则可使用如下代码
from pdf2image import convert_from_path
import cv2
import numpy as np
from PIL import Image
import os
# 将 PDF 文件转换为图片列表
files = os.listdir('pdf')
for file in files:
if not file.endswith('.pdf'):
print(file)
continue
txt = file.replace('.pdf', '.txt')
if os.path.exists('txt/'+txt):
continue
txt_writer = open('txt/'+txt, 'w',encoding='utf-8')
images = convert_from_path('pdf/'+file)
# print(type(images))
# print(images[0])
# image = cv2.cvtColor(np.array(images[0]), cv2.COLOR_RGB2BGR)
from paddleocr import PaddleOCR, draw_ocr
# 创建 PaddleOCR 实例
ocr = PaddleOCR(use_angle_cls=True, lang='ch',use_gpu=True) # 默认使用英文模型,可以通过 lang 参数切换到中文模型
# 遍历每一张图片并识别文字
for i, image in enumerate(images):
print('第{}张图片'.format(i+1))
# 转换图片为可用于识别的格式
# source = image.convert('RGB')
image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) # image.save(f'page_{i}.jpg')
# 识别图片中的文字
result = ocr.ocr(image, cls=True)
# 打印识别结果
try:
for lines in result:
for line in lines:
# print(line[1][0])
txt_writer.write(line[1][0]+'\n')
except:
print(file+'识别失败')
txt_writer.close()
4.注意
由于本代码仅能简单提取pdf的文字,所以一旦出图片或者表格之类会导致该页识别效果变差,敬请谅解~