基于Python实现档案数字化快速服务的完整实操指南

一、环境准备与工具安装

构建档案数字化服务,核心在于OCR(光学字符识别)能力。本方案采用Python作为胶水语言,调用Tesseract-OCR引擎,实现本地化、高并发的批量档案处理。

1. 安装Python环境

前往Python官网下载 Python 3.9 或更高版本Windows安装包。安装时务必勾选 "Add Python to PATH" 选项,否则后续命令行无法直接调用Python。

2. 安装Tesseract-OCR引擎

这是OCR识别的核心引擎。下载Windows版本的Tesseract安装包。推荐下载地址:https://github.com/UB-Mannheim/tesseract/wiki。下载完成后运行安装,安装路径建议不要包含中文或空格,例如 C:\Program Files\Tesseract-OCR

3. 安装Poppler工具(用于PDF处理)

如果需要处理PDF档案,必须安装Poppler将PDF转换为图片。下载地址:https://github.com/oschwartz10612/poppler-windows/releases/。下载最新版Release并解压,将解压后文件夹内的 bin 目录路径(如 C:\poppler-23.01.0\Library\bin)添加到系统环境变量 Path 中。

4. 配置中文语言包

默认Tesseract仅支持英文。下载中文简体语言包 chi_sim.traineddata,下载地址:https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata。将下载的文件放入Tesseract安装目录下的 tessdata 文件夹中(例如 C:\Program Files\Tesseract-OCR\tessdata)。

二、Python依赖库安装

打开命令行终端(CMD或PowerShell),执行以下命令安装必要的Python库。确保网络连接畅通。

```bash pip install pytesseract pillow pdf2image opencv-python ```

依赖库说明:

  • pytesseract:Python调用Tesseract的接口封装。
  • pillow:基础图像处理库,用于图像读取与格式转换。
  • pdf2image:专门用于将PDF页面转换为图片对象。
  • opencv-python:用于高级图像预处理(去噪、二值化),提升识别率。

三、核心代码实现

在项目目录下新建文件 digital_archive.py。以下代码实现了批量读取图片/PDF、图像预处理(提升识别率)、多线程OCR识别及结果导出功能。

1. 完整代码编写

直接复制以下代码到文件中。请根据实际情况修改代码顶部的配置路径。

```python import os import cv2 import numpy as np import pytesseract from PIL import Image from pdf2image import convert_from_path from concurrent.futures import ThreadPoolExecutor import csv - 配置区域 - Tesseract执行文件路径,Windows下必须显式指定,请修改为你的实际安装路径 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 输入文件夹(存放待处理的图片或PDF) INPUT_DIR = './input_files' 输出文件夹(存放识别结果) OUTPUT_DIR = './output_files' 识别语言:chi_sim(简体中文)+eng(英文) LANG = 'chi_sim+eng' 线程数,根据CPU核心数调整,建议4-8 THREAD_COUNT = 4 def ensure_dir(directory): """检查并创建目录""" if not os.path.exists(directory): os.makedirs(directory) def preprocess_image(image_path): """ 图像预处理:灰度化、去噪、二值化,大幅提升OCR准确率 """ 读取图像 img = cv2.imread(image_path) if img is None: return None 转为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 中值滤波去噪,去除椒盐噪声 gray = cv2.medianBlur(gray, 3) 自适应阈值二值化,处理光照不均 binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) return binary def ocr_process_file(file_info): """ 处理单个文件:PDF转图或直接处理图片,进行OCR识别 """ file_name, file_path = file_info print(f"正在处理: {file_name}") try: text_content = "" 如果是PDF,先转换为图片列表 if file_name.lower().endswith('.pdf'): dpi=200 保证清晰度,thread_count控制PDF转换的线程 pages = convert_from_path(file_path, dpi=200, thread_count=THREAD_COUNT) for i, page in enumerate(pages): 直接对PIL对象进行OCR text = pytesseract.image_to_string(page, lang=LANG) text_content += f" 第{i+1}页 \n{text}\n" else: 处理图片文件 processed_img = preprocess_image(file_path) if processed_img is None: return (file_name, "Error: 无法读取图像文件") 将OpenCV图像转回PIL格式供pytesseract使用 pil_img = Image.fromarray(processed_img) psm 6 表示假设文本为统一的文本块 config = r'--psm 6' text_content = pytesseract.image_to_string(pil_img, lang=LANG, config=config) return (file_name, text_content.strip()) except Exception as e: print(f"处理文件 {file_name} 失败: {str(e)}") return (file_name, f"Error: {str(e)}") def main(): ensure_dir(OUTPUT_DIR) ensure_dir(INPUT_DIR) 获取待处理文件列表 files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.pdf'))] if not files: print(f"在 {INPUT_DIR} 目录下未找到任何支持的文件。") return file_paths = [(f, os.path.join(INPUT_DIR, f)) for f in files] results = [] 使用线程池并行处理 print(f"开始处理,共 {len(files)} 个文件,使用 {THREAD_COUNT} 个线程...") with ThreadPoolExecutor(max_workers=THREAD_COUNT) as executor: results = list(executor.map(ocr_process_file, file_paths)) 保存结果到CSV output_csv = os.path.join(OUTPUT_DIR, 'digitization_result.csv') with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) writer.writerow(['文件名', '识别内容']) writer.writerows(results) print(f"处理完成!结果已保存至: {output_csv}") if __name__ == "__main__": main() ```

四、实操步骤与验证

1. 准备测试数据

在代码同级目录下创建 input_files 文件夹。放入几张扫描好的中文档案图片(JPG/PNG)或PDF文档。确保图片文字清晰,倾斜角度不要太大。

2. 调整Tesseract路径(关键)

打开 digital_archive.py,检查第10行的 pytesseract.pytesseract.tesseract_cmd 路径是否与你实际安装路径一致。如果不一致,请修改为绝对路径,否则程序会报错找不到文件。

3. 运行脚本

基于Python实现档案数字化快速服务的完整实操指南

在终端中执行以下命令启动服务:

```bash python digital_archive.py ```

4. 查看结果

程序运行结束后,会自动生成 output_files 文件夹。打开其中的 digitization_result.csv 文件。你应该能看到每一行对应一个文件名,第二列是对应的识别文本内容。

五、常见报错与解决方案

1. FileNotFoundError: [WinError 2] The system cannot find the file specified

原因: 未指定Tesseract可执行文件路径或路径错误。

解决: 检查代码中 tesseract_cmd 的赋值,确保指向 tesseract.exe

2. TesseractNotFoundError: tesseract is not installed or it's not in your PATH

原因: 系统环境变量未配置。

解决: 将Tesseract的安装目录(如 C:\Program Files\Tesseract-OCR)添加到Windows系统的 Path 环境变量中,并重启IDE或终端。

3. 识别结果全是乱码或空白

原因: 未加载中文语言包,或图片分辨率过低。

解决: 确认 chi_sim.traineddata 已放入 tessdata 文件夹。检查扫描件DPI是否至少为300,若DPI太低,OCR无法识别。

4. PDF处理报错: Unable to get page count

原因: 未安装Poppler或未配置环境变量。

解决: 回顾第一步,下载Poppler并配置bin目录到Path变量。

六、进阶优化建议

上述代码实现了基础的数字化功能。若需在生产环境大规模使用,建议关注以下两点:

1. 版面分析

对于复杂的表格档案,Tesseract直接识别效果一般。建议引入表格结构识别逻辑,或者将图片切片,分别识别表头和表体,再进行拼接。

2. 后处理纠错

OCR结果常包含标点错误。可以基于词典或语言模型(如简单的编辑距离算法)对识别出的文本进行二次纠错,提高数据入库的准确率。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统