一、环境搭建与依赖安装
要实现档案的自动化识别与归档,我们需要搭建Python环境并配置Tesseract-OCR引擎。以下是具体的安装步骤:
1. 安装Tesseract-OCR引擎
Tesseract是OCR的核心引擎,必须优先安装。请根据你的操作系统选择对应的安装方式:
Windows系统:
访问UB Mannheim的官方发布页面下载安装包:https://github.com/UB-Mannheim/tesseract/wiki。下载最新版本Windows安装程序(如tesseract-ocr-w64-setup-5.x.x.exe)。安装过程中,务必在"Choose Components"界面勾选“Chinese (Simplified)”语言包,否则无法识别中文。默认安装路径通常为C:\Program Files\Tesseract-OCR\tesseract.exe。
macOS系统:
打开终端,确保已安装Homebrew,然后执行以下命令:
```bash
brew install tesseract tesseract-lang
```
Linux系统(Ubuntu/Debian):
```bash
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-chi-sim
```
2. 配置Python环境与依赖库
确保系统已安装Python 3.8及以上版本。在终端或命令行中执行以下命令安装必要的Python库:
```bash
pip install pytesseract pillow
```
pytesseract是Tesseract的Python封装库,用于调用引擎;pillow用于图像预处理(如灰度化、二值化),这两者是提升识别率的关键依赖。
二、核心代码实现:图像预处理与OCR识别
直接对原始扫描件进行OCR识别效果往往不佳,必须进行图像预处理以去除噪点。以下是完整的Python脚本,包含图像预处理、文字提取及关键信息正则匹配逻辑。
新建文件archive_upgrade.py,将以下代码完整复制进去:
```python
import os
import re
import pytesseract
from PIL import Image, ImageEnhance
【关键配置】Windows用户必须指定tesseract.exe的绝对路径
如果是Mac/Linux,通常不需要配置此行,但如果报错请加上
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def preprocess_image(image_path):
"""
图像预处理:灰度化、二值化、去噪
这是提升档案识别准确率的核心步骤
"""
img = Image.open(image_path)
1. 转换为灰度图,去除色彩干扰,减少计算量
img = img.convert('L')
2. 增强对比度,使文字与背景分离更明显
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)
3. 二值化处理,将灰度图转为黑白图
阈值设为180,可根据实际扫描件质量调整(范围0-255)
像素值大于180变白(1),小于180变黑(0)
threshold = 180
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
img = img.point(table, '1')
return img
def extract_info_from_text(text):
"""
使用正则表达式从OCR识别的文本中提取关键归档信息
这里演示提取:日期(YYYY-MM-DD)和发票号码/档案编号
"""
提取日期,支持多种常见格式
date_pattern = r'\d{4}[-/年]\d{1,2}[-/月]\d{1,2}日?'
dates = re.findall(date_pattern, text)
date_str = dates[0] if dates else "未知日期"
提取编号,假设编号由字母+数字组成,长度至少6位
根据实际档案类型修改正则,例如身份证号、合同号等
code_pattern = r'[A-Za-z]{0,4}\d{6,}'
codes = re.findall(code_pattern, text)
code_str = codes[0] if codes else "未知编号"
return date_str, code_str
def process_archive_folder(folder_path):
"""
遍历文件夹,处理所有图片并重命名
"""
files = os.listdir(folder_path)
supported_exts = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff')
for filename in files:
if filename.lower().endswith(supported_exts):
file_path = os.path.join(folder_path, filename)
print(f"正在处理: {filename}")
try:
1. 预处理图像
processed_img = preprocess_image(file_path)
2. OCR识别
lang='chi_sim+eng' 表示同时识别中文简体和英文
text = pytesseract.image_to_string(processed_img, lang='chi_sim+eng')
3. 提取关键信息
date_str, code_str = extract_info_from_text(text)
4. 构造新文件名
清理文件名中的非法字符
safe_date = re.sub(r'[\\/:?"<>|]', '-', date_str)
safe_code = re.sub(r'[\\/:?"<>|]', '-', code_str)
new_filename = f"{safe_date}_{safe_code}{os.path.splitext(filename)[1]}"
new_file_path = os.path.join(folder_path, new_filename)
5. 重命名文件
os.rename(file_path, new_file_path)
print(f"归档成功: {filename} -> {new_filename}")
except Exception as e:
print(f"处理文件 {filename} 失败: {str(e)}")
if __name__ == "__main__":
【操作】修改此处为你存放档案图片的本地文件夹绝对路径
target_folder = r'C:\Users\Administrator\Desktop\test_archives'
if os.path.exists(target_folder):
process_archive_folder(target_folder)
else:
print(f"路径错误: {target_folder} 不存在")
```
三、实操步骤:如何运行脚本
代码准备就绪后,按照以下步骤执行档案智能化归档操作。
1. 准备测试数据
在电脑桌面上(或任意位置)新建一个文件夹,命名为test_archives。放入几张扫描好的图片(JPG或PNG格式),图片内容需包含日期和数字编号,以测试识别效果。
2. 修改脚本配置
打开刚才创建的archive_upgrade.py文件,找到代码底部的target_folder变量。将其路径修改为你刚才创建的测试文件夹的绝对路径。

注意:Windows路径前建议加r,防止转义字符错误,例如r'C:\Users\Name\Desktop\test_archives'。如果你是Windows用户且Tesseract不在环境变量中,请取消代码第10行的注释并填入正确的安装路径。
3. 执行脚本
在终端(CMD、PowerShell或Terminal)中进入脚本所在目录,执行以下命令:
```bash
python archive_upgrade.py
```
观察终端输出。如果配置正确,你将看到“正在处理...”、“归档成功...”的日志信息。处理完成后,打开test_archives文件夹,你会发现原本杂乱命名的图片(如IMG_2023.jpg)已经变成了2023-10-25_NO88291.jpg这样具有业务含义的文件名。
四、进阶优化:提升识别准确率
如果初次运行发现识别出的文字乱码或关键信息提取错误,请按照以下维度进行微调。
1. 调整图像预处理参数
扫描件的背景噪点或清晰度是影响识别率的主因。在preprocess_image函数中,调整threshold(二值化阈值)。如果该值设得太低,背景会变黑;设得太高,文字会消失。建议从180开始,每次加减10进行测试,直到打印出的text变量内容清晰可读。
2. 优化正则表达式
档案中的日期或编号格式千差万别。在extract_info_from_text函数中,修改date_pattern或code_pattern。例如,如果你的档案编号全是纯数字且固定8位,可将正则改为r'\d{8}'。建议先打印text变量,观察OCR原始输出的文本格式,再针对性编写正则。
3. 处理多页PDF档案
如果档案是PDF格式,需先将其转换为图片。可以使用pdf2image库。安装命令为pip install pdf2image。然后在主循环中增加判断逻辑:
```python
from pdf2image import convert_from_path
if filename.lower().endswith('.pdf'):
pages = convert_from_path(file_path)
for page in pages:
将每一页转换为图片对象后,传入process逻辑
注意:convert_from_path返回的是PIL Image对象,可直接用于OCR
text = pytesseract.image_to_string(page, lang='chi_sim+eng')
...后续处理逻辑
```
五、常见问题排查
在落地过程中,新手常遇到以下报错,请对照排查。
1. 报错:tesseract is not installed or it's not in your path
这是路径配置问题。Windows用户必须检查代码中pytesseract.pytesseract.tesseract_cmd是否指向了正确的.exe文件。Mac/Linux用户需检查which tesseract是否有输出。
2. 识别结果全是乱码
通常是语言包缺失。确保安装Tesseract时勾选了chi_sim(简体中文)。代码中lang='chi_sim+eng'参数必须与安装的语言包名称一致。
3. 提取信息为空
OCR虽然识别出了文字,但正则没匹配上。建议在代码中添加print(text),查看OCR实际提取到的原始字符串格式,检查是否存在空格、换行符干扰了正则匹配。