档案数字化实战教程:零基础搭建与OCR识别
一、环境搭建与工具准备
在进行档案数字化处理之前,必须先配置好基础运行环境。本文以Windows系统为例,使用Python作为开发语言,Tesseract-OCR作为识别引擎。
1. 安装Python环境
访问Python官网下载安装包。直接运行安装程序,安装界面中务必勾选"Add Python to PATH"选项,这一步至关重要,否则后续命令行无法直接调用Python。安装完成后,打开CMD命令行窗口,输入以下命令验证安装是否成功:
python --version
2. 安装Tesseract-OCR引擎
Tesseract是OCR识别的核心引擎。前往UB Mannheim的Tesseract镜像站下载Windows安装包(推荐下载tesseract-ocr-w64-setup-5.x.x版本)。安装过程中,在"Choose Components"界面,务必展开"Additional language data",勾选"Chinese (Simplified)"和"Chinese (Traditional)",否则无法识别中文档案。
安装完成后,需要配置系统环境变量。右键"此电脑"->"属性"->"高级系统设置"->"环境变量",在"系统变量"中找到Path,点击编辑,新增Tesseract的安装路径(默认为C:\Program Files\Tesseract-OCR)。同时,新建一个系统变量,变量名为TESSDATA_PREFIX,变量值为Tesseract安装路径(例如C:\Program Files\Tesseract-OCR)。
3. 安装Python依赖库
在CMD中执行以下命令,安装图像处理库及OCR接口库:
pip install pytesseract opencv-python pillow numpy
二、图像预处理核心逻辑
扫描件或拍照的档案往往存在噪点、倾斜或光照不均的问题,直接识别准确率极低。必须通过OpenCV进行预处理。
1. 灰度化与二值化
将彩色图像转换为灰度图,再通过Otsu算法自动寻找阈值进行二值化处理,将图像转为纯黑白,能有效去除背景干扰。
2. 去噪处理
使用中值滤波去除椒盐噪点,保留边缘信息的同时平滑图像。
3. 旋转校正

档案扫描时容易发生微小倾斜,严重影响OCR排版识别。我们需要通过检测文本行角度进行旋转校正。
以下是预处理及旋转校正的完整代码函数:
```python
import cv2
import numpy as np
import pytesseract
from PIL import Image
import os
设置Tesseract路径,如果未配置环境变量则必须在此指定
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def preprocess_image(image_path):
读取图像
img = cv2.imread(image_path)
if img is None:
print(f"无法读取图像: {image_path}")
return None
1. 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
2. 二值化 (Otsu自动阈值)
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
3. 去噪 (中值滤波)
denoised = cv2.medianBlur(binary, 3)
4. 旋转校正
def correct_skew(image):
coords = np.column_stack(np.where(image > 0))
if coords.size == 0:
return image
angle = cv2.minAreaRect(coords)[-1]
if angle < -45:
angle = -(90 + angle)
else:
angle = -angle
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
return rotated
corrected = correct_skew(denoised)
return corrected
```
三、OCR识别与结构化输出
预处理后的图像即可送入Tesseract引擎进行识别。为了提高识别准确率,需要配置白名单、页码分割模式(PSM)等参数。
1. 识别参数配置
--oem 3: 使用LSTM神经网络引擎。
--psm 6: 假设图像为统一的文本块。
-l chi_sim+eng: 同时加载简体中文和英文语言包。
2. 批量处理逻辑
实际场景中通常是文件夹级别的批量处理。我们需要遍历文件夹,对每个图片执行预处理、识别,并将结果保存为同名的TXT文件。
以下是完整的批量处理主程序代码:
```python
def process_folder(input_folder, output_folder):
if not os.path.exists(output_folder):
os.makedirs(output_folder)
支持的图片格式
valid_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff']
for filename in os.listdir(input_folder):
file_ext = os.path.splitext(filename)[1].lower()
if file_ext not in valid_extensions:
continue
input_path = os.path.join(input_folder, filename)
print(f"正在处理: {filename}")
预处理
processed_img = preprocess_image(input_path)
if processed_img is None:
continue
保存预处理后的图片(可选,用于调试)
debug_path = os.path.join(output_folder, "processed_" + filename)
cv2.imwrite(debug_path, processed_img)
配置识别参数
custom_config = r'--oem 3 --psm 6 -l chi_sim+eng'
try:
执行OCR识别
text = pytesseract.image_to_string(processed_img, config=custom_config)
去除首尾空白字符
text = text.strip()
构建输出文件名
output_filename = os.path.splitext(filename)[0] + '.txt'
output_path = os.path.join(output_folder, output_filename)
写入文件
with open(output_path, 'w', encoding='utf-8') as f:
f.write(text)
print(f"识别完成,结果已保存至: {output_filename}")
except Exception as e:
print(f"识别 {filename} 时发生错误: {e}")
if __name__ == "__main__":
定义输入和输出目录,请根据实际情况修改
input_directory = r"./archives_input"
output_directory = r"./archives_output"
print("=== 档案数字化处理系统启动 ===")
process_folder(input_directory, output_directory)
print("=== 所有任务处理完毕 ===")
```
四、实操落地步骤指南
代码准备完毕后,按照以下步骤即可直接运行:
- 创建目录结构:在电脑D盘或任意位置新建一个文件夹,命名为
DigiArchProject。进入该文件夹,新建两个子文件夹,分别命名为archives_input和archives_output。 - 准备测试数据:找几张包含中文的档案扫描件(JPG或PNG格式),放入
archives_input文件夹中。 - 保存代码:新建一个文本文档,将上述两段代码合并复制进去,保存为
ocr_runner.py,放在DigiArchProject根目录下。注意修改代码底部的input_directory和output_directory路径,确保指向你刚才创建的文件夹(或者保持相对路径不变,直接在根目录运行)。 - 运行程序:打开CMD窗口,使用
cd命令切换到项目目录,例如:cd /d D:\DigiArchProject。然后执行运行命令:python ocr_runner.py。 - 查看结果:程序运行完毕后,打开
archives_output文件夹,你会看到生成了对应的TXT文件。打开文件即可查看提取出的文字内容。
五、常见报错与解决方案
在实操过程中,可能会遇到以下两个主要问题,请对照解决:
- 报错:FileNotFoundError: [WinError 2] "tesseract" not found
原因:系统未找到Tesseract可执行文件。
解决:检查环境变量Path是否正确添加了Tesseract路径;或者在代码中取消注释pytesseract.pytesseract.tesseract_cmd这一行,并填入你电脑上tesseract.exe的绝对路径。 - 识别结果为乱码或空白
原因:未下载中文语言包或图片质量过低。
解决:重新运行Tesseract安装包,确保勾选了Chinese语言数据;或者检查输入图片的分辨率,建议扫描件DPI不低于300。