pdf的试卷,识别不了,先转换成图片,再识别输出
# -*- coding: utf-8 -*-
import fitz
import traceback
import datetime
import os
import glob
# 处理图片
import pytesseract
from PIL import Image
def pyMuPDF_fitz(pdfPath, imagePath, count):
print("pdfPath=" + pdfPath)
print("imagePath=" + imagePath)
pdfDoc = fitz.open(pdfPath)
for pg in range(pdfDoc.page_count):
page = pdfDoc[pg]
rotate = int(0)
zoom_x = 4
zoom_y = 4
mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
rect = page.rect
clip = fitz.Rect(rect.tl + 15, rect.br - 13)
pix = page.get_pixmap(matrix=mat, alpha=False, clip=clip)
if not os.path.exists(imagePath): # 判断存放图片的文件夹是否存在
os.makedirs(imagePath) # 若图片文件夹不存在就创建
pix.save(imagePath + '/' + 'images_%s.jpg' % (pg)) # 将图片写入指定的文件夹内
print('图片名称:', 'images_%s.jpg' % (pg))
def read_jpg_txt(file_path):
img = Image.open(file_path) # 获取图片句柄
img = img.convert("L") # 图像转灰度
# 图像二值化处理
table = []
for n in range(256):
if n < 150:
table.append(0)
else:
table.append(1)
img = img.point(table, '1')
# 识别图片文字
pic_txt= pytesseract.image_to_string(img, lang='chi_sim')
print(pic_txt)
return pic_txt
def deal_img(path_dir):
# 获取目录下的所有文件和文件夹(文件夹里的内容不会去识别)
files = os.listdir(path_dir)
# 文件排序
files.sort()
data = open("F:\\ab\\exam.txt", 'a+', encoding="utf-8")
for file in files:
file_path = os.path.join(path_dir, file) # 文件全路径
if '.' not in file: # 排除文件夹
continue
file_format = file.split('.')[-1] # 获取文件格式
# 如果是PDF文件调用pdf的方法,否则调用图片,文件识别报错添加一条报错数据
try:
if file_format in ('jpg', 'JPG'):
img_txt = read_jpg_txt(file_path)
print(img_txt, file=data)
except Exception:
traceback.print_exc()
continue
if __name__ == "__main__":
# 1、PDF地址
pdfPath = r"F:\\ab"
# 2、需要储存图片的目录
imagePath = r"F:\\pic"
# 3.文件后缀数字
count = 1
# 4.获取文件
files = glob.glob(pdfPath + r'\*.pdf')
# 5.循环调用函数进行转化
for file in files:
pyMuPDF_fitz(file, imagePath, count)
count = count + 1
# 6.处理图片
deal_img(imagePath)
网友评论