档案数字化项目OCR识别完整实操流程 零门槛落地指南
一、前期工具准备
本次实操采用开源免费OCR工具,可离线处理,满足档案数字化合规要求,所有工具均可直接复制命令安装:
1. 核心工具安装
- Windows系统:直接从GitHub下载安装包,地址:
https://github.com/tesseract-ocr/tesseract/releases,下载时勾选中文语言包完成安装,安装后将安装路径添加到系统环境变量Path - MacOS系统:打开终端执行命令: ``` brew install tesseract tesseract-lang ```
- Linux(Ubuntu/Debian)系统:打开终端执行命令: ``` sudo apt update && sudo apt install -y tesseract-ocr tesseract-ocr-chi-sim ```
- Python依赖安装,所有系统统一执行: ``` pip install pytesseract pillow opencv-python numpy ```
2. 待处理档案整理
提前将所有档案扫描件按原分类放入同一个父文件夹,所有文件夹和文件名不要包含中文字符,避免工具调用报错,统一保存为JPG/PNG格式,这一步提前做好能避免80%的后期运行问题。
二、核心实操流程
第一步:档案扫描件批量预处理
预处理直接决定OCR识别准确率,90%的低识别率问题都是预处理不到位导致的,核心操作包含分辨率调整、倾斜校正、二值化去噪、黑边裁剪四步,以下是可直接运行的批量预处理代码:
``` import cv2 import os import numpy as np input_dir = "./input" 替换为你的待处理档案文件夹路径 output_dir = "./output_pre" 预处理后输出文件夹 os.makedirs(output_dir, exist_ok=True) for filename in os.listdir(input_dir): if filename.endswith(('.jpg', '.png', '.jpeg')): img = cv2.imread(os.path.join(input_dir, filename)) 1. 分辨率调整到适配300DPI的尺寸 h, w = img.shape[:2] if max(h,w) < 2000: img = cv2.resize(img, (int(w2), int(h2)), interpolation=cv2.INTER_CUBIC) 2. 自动倾斜校正 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) coords = np.column_stack(np.where(gray > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = img.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) 3. 二值化去噪 _, thresh = cv2.threshold(cv2.cvtColor(rotated, cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY) 4. 去除装订黑边 contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnt = max(contours, key=cv2.contourArea) x,y,w,h = cv2.boundingRect(cnt) crop = thresh[y:y+h, x:x+w] 保存预处理结果 cv2.imwrite(os.path.join(output_dir, filename.replace('.jpg', '.png')), crop) ```
使用说明:修改代码开头的input_dir为你的档案文件夹路径,直接运行即可完成批量预处理,不需要手动调整每一张。
第二步:批量OCR文字提取
预处理完成后,运行以下代码即可批量提取文字,每张档案对应生成一个同名TXT文本文件,方便后续归档:
``` import pytesseract import os import cv2 pre_dir = "./output_pre" 预处理后的文件夹路径 output_txt_dir = "./ocr_result" 识别结果输出路径 os.makedirs(output_txt_dir, exist_ok=True) Windows系统需要取消下一行注释,替换为你实际的安装路径,Mac/Linux可直接删除这行 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' for filename in os.listdir(pre_dir): if filename.endswith(('.png', '.jpg')): img = cv2.imread(os.path.join(pre_dir, filename)) OCR识别,简体中文+英文 text = pytesseract.image_to_string(img, lang='chi_sim+eng') 保存结果 txt_name = filename.split('.')[0] + '.txt' with open(os.path.join(output_txt_dir, txt_name), 'w', encoding='utf-8') as f: f.write(text) ```注意事项:如果需要识别繁体中文,将lang参数改为chi_tra+eng即可。
第三步:结果校对与归档
- 批量校对:对于印刷体档案,默认识别准确率在95%以上,可将所有TXT文件导入Word,利用自带拼写检查功能批量标注错误,人工核对修正即可;
- 对应归档:按照原档案的分类编号规则,将原扫描件、预处理后的图片、识别后的TXT文件三个为一组,对应命名存储;如果需要生成符合要求的可检索双层PDF,可添加PyPDF2依赖,将识别文字叠加到原扫描件上即可;
- 终检完成:按照档案管理要求,抽查10%的档案核对内容准确率,准确率达到98%以上即可完成入库。
三、常见问题排查
1. 识别准确率低怎么解决?
- 检查分辨率:扫描件分辨率必须达到300DPI,低于200DPI识别准确率会下降30%以上,代码已经自动放大低分辨率图片,若还是偏低需要重新扫描;
- 检查预处理:确认装订黑边已经被裁剪,倾斜已经校正,纸面污渍已经去除,黑边对识别结果的影响远大于预期;
- 更新语言包:如果识别特殊字体,可从https://github.com/tesseract-ocr/tessdata下载对应语言包,放到Tesseract的tessdata目录即可。
2. 运行代码报错怎么解决?
- 报错`pytesseract is not installed or it's not in your PATH`:Windows系统检查环境变量是否配置,安装路径是否和代码中填写的一致;
- 报错`No such file or directory`:检查文件路径是否正确,路径中是否包含中文字符;
- 批量处理卡顿:分批次处理,每次放入不超过50张图片,避免内存占用过高。
整个流程不需要付费工具,完全离线运行,符合档案数据安全要求,所有代码均可直接复制修改使用,从零开始1小时内即可完成环境搭建和第一批档案处理。