铜陵档案数字化:Python自动化整理与OCR识别全流程

一、环境准备与工具安装

在进行铜陵档案整理之前,我们需要搭建一套基于Python的自动化处理环境。这套环境将利用OCR技术自动识别档案图片中的文字,并根据内容进行分类和重命名。请严格按照以下步骤操作,确保所有依赖项安装正确。

1. 安装Python环境

确保你的系统已安装Python 3.8或更高版本。如果未安装,请访问Python官网下载Windows installer版进行安装。安装时,务必勾选"Add Python to PATH"选项,这将避免后续配置环境变量的麻烦。

2. 安装Tesseract-OCR引擎

Python的OCR库依赖于Tesseract引擎。这是Google开源的OCR识别工具,支持中文识别。

下载地址: https://github.com/UB-Mannheim/tesseract/wiki

进入页面后,找到"tesseract-ocr-w64-setup-5.x.x.exe"(64位Windows版本)进行下载。安装过程中,在"Choose Components"界面,务必勾选"Chinese (Simplified)""Chinese (Simplified, Vertical)"语言包,否则无法识别铜陵档案中的中文内容。

假设安装路径为默认路径:C:\Program Files\Tesseract-OCR。如果修改了路径,请记下实际路径,后续代码中需要配置。

3. 安装Python依赖库

打开命令行工具(CMD或PowerShell),依次执行以下命令安装所需的第三方库:

  • pip install pillow:用于图像处理(如格式转换、灰度化)。
  • pip install pytesseract:Python调用Tesseract的接口库。
  • pip install shutil:用于文件的高级移动、复制操作(通常为内置库,但建议检查)。

二、建立档案目录结构

为了实现自动化整理,请在D盘根目录下(或其他位置)创建以下文件夹结构。这有助于我们将原始档案与处理后的档案物理隔离。

  • D:\tongling_archives\raw:存放待整理的原始档案图片(支持JPG, PNG, BMP格式)。
  • D:\tongling_archives\processed:存放识别成功并重命名后的档案。
  • D:\tongling_archives\error:存放无法识别或处理出错的文件。

请将所有需要整理的铜陵相关档案图片复制到raw文件夹中。

三、编写自动化整理脚本

创建一个名为auto_organize.py的文件,并将以下完整代码复制进去。这段脚本包含了图像预处理、OCR识别、关键词提取及文件重命名移动的全套逻辑。

```python import os import shutil import time from datetime import datetime from PIL import Image import pytesseract import re ================= 配置区域 ================= Tesseract安装路径,请根据实际安装位置修改,如果是路径中有空格,不需要加引号 tesseract_path = r'C:\Program Files\Tesseract-OCR\tesseract.exe' pytesseract.pytesseract.tesseract_cmd = tesseract_path 源文件夹和目标文件夹设置 SOURCE_DIR = r'D:\tongling_archives\raw' PROCESSED_DIR = r'D:\tongling_archives\processed' ERROR_DIR = r'D:\tongling_archives\error' 铜陵档案常见关键词,用于分类检测 KEYWORDS = ['铜陵', '档案', '局', '市政府', '铜官山', '义安区', '郊区', '枞阳县'] =========================================== def preprocess_image(image_path): """ 图像预处理:转灰度并调整大小,提高OCR识别率 """ try: img = Image.open(image_path) 转换为灰度图,去除色彩干扰 img = img.convert('L') 这里可以添加二值化处理,但对于普通档案,灰度通常足够 return img except Exception as e: print(f"图像预处理失败: {image_path}, 错误: {e}") return None def extract_info_from_text(text): """ 从识别的文本中提取关键信息 """ 提取年份(匹配19xx或20xx) year_match = re.search(r'(19|20)\d{2}', text) year = year_match.group(0) if year_match else "未知年份" 提取铜陵相关的区域或部门关键词 found_keyword = "其他" for kw in KEYWORDS: if kw in text: found_keyword = kw break return year, found_keyword def organize_files(): """ 主处理函数:遍历文件夹,识别并移动文件 """ 检查目录是否存在,不存在则创建 for dir_path in [PROCESSED_DIR, ERROR_DIR]: if not os.path.exists(dir_path): os.makedirs(dir_path) files = [f for f in os.listdir(SOURCE_DIR) if f.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp'))] print(f"开始处理,共发现 {len(files)} 个档案文件。") for index, filename in enumerate(files): file_path = os.path.join(SOURCE_DIR, filename) print(f"[{index+1}/{len(files)}] 正在处理: {filename}") 1. 图像预处理 img = preprocess_image(file_path) if not img: move_to_error(file_path) continue 2. OCR识别 lang='chi_sim'指定简体中文,--psm 6假设单行文本块,提高准确性 try: 使用配置参数 psm 6 (假设是一个统一的文本块) custom_config = r'--psm 6' text = pytesseract.image_to_string(img, lang='chi_sim', config=custom_config) except Exception as e: print(f"OCR识别出错: {e}") move_to_error(file_path) continue 3. 提取信息 year, keyword = extract_info_from_text(text) 4. 构建新文件名 格式:年份_关键词_原文件名_时间戳.后缀 file_ext = os.path.splitext(filename)[1] timestamp = datetime.now().strftime("%H%M%S") new_filename = f"{year}_{keyword}_{timestamp}{file_ext}" 5. 移动文件 destination_path = os.path.join(PROCESSED_DIR, new_filename) try: shutil.move(file_path, destination_path) print(f" -> 成功归档: {new_filename}") 打印识别出的前20个字符供调试 print(f" -> 识别内容预览: {text.strip()[:20]}...") except Exception as e: print(f"文件移动失败: {e}") move_to_error(file_path) def move_to_error(src_path): """移动文件到错误目录""" filename = os.path.basename(src_path) try: shutil.move(src_path, os.path.join(ERROR_DIR, filename)) except: pass if __name__ == "__main__": start_time = time.time() organize_files() end_time = time.time() print(f"所有档案整理完成,耗时: {end_time - start_time:.2f}秒。") ```

四、代码核心逻辑详解

为了确保你能根据实际需求调整脚本,以下对代码中的关键部分进行详细解释,这部分内容能帮助你解决实际运行中可能遇到的卡壳点。

1. Tesseract路径配置

代码第8行pytesseract.pytesseract.tesseract_cmd是必须配置的项。很多新手报错tesseract is not installed or it's not in your PATH,就是因为这一行路径填写错误。请务必指向tesseract.exe文件的绝对路径,注意路径前的r字符,它表示原始字符串,防止反斜杠转义。

2. OCR识别参数优化

image_to_string函数中,我们使用了lang='chi_sim'来调用简体中文训练数据。同时,加入了config=custom_config,其中--psm 6代表“假设是一行统一的文本块”。对于标题清晰的档案图片,这个参数能显著提高识别准确率。如果你的档案是整版文字密集型,建议将custom_config改为r'--psm 3'(全自动页面分割)。

3. 文件名冲突处理

在重命名逻辑中,我们引入了timestamp(时间戳,精确到秒)。这是为了防止在极短时间内处理两个相同年份、相同关键词的文件时,发生文件名覆盖导致数据丢失的问题。这是一个在生产环境中必须考虑的细节。

五、运行脚本与结果验证

铜陵档案数字化:Python自动化整理与OCR识别全流程

环境配置完毕且脚本保存后,即可开始执行整理任务。

1. 执行命令

在命令行中进入auto_organize.py所在的目录,执行:

python auto_organize.py

2. 观察控制台输出

程序运行时,你会看到类似以下的日志输出:

[1/10] 正在处理: SCAN001.jpg
-> 成功归档: 1998_市政府_143022.jpg
-> 识别内容预览: 铜陵市人民政府关于...
[2/10] 正在处理: SCAN002.jpg
-> 成功归档: 2005_档案局_143025.jpg
-> 识别内容预览: 市档案局年度工作总结...

如果看到“识别内容预览”中显示为乱码或奇怪符号,通常是图片清晰度不够或未正确加载中文语言包。

3. 检查结果目录

打开D:\tongling_archives\processed文件夹,你会发现原本杂乱无章的SCAN001.jpg已经被重命名为1998_市政府_时间戳.jpg。这样,无需打开图片,仅凭文件名就能知道该档案所属的年份和关联单位。

六、常见故障排查

在实操过程中,可能会遇到以下具体问题,请对照解决方案进行修复。

1. 报错:Failed loading language 'chi_sim'

原因:安装Tesseract时未勾选简体中文语言包,或者Tesseract未找到.traineddata文件。

解决:重新运行Tesseract安装程序,点击"Modify",确保在Language组件中勾选Chinese (Simplified)。或者手动下载chi_sim.traineddata文件,放入C:\Program Files\Tesseract-OCR\tessdata目录下。

2. 识别率极低或全是乱码

原因:档案图片可能是彩色背景、字迹模糊或倾斜。

解决:修改代码中的preprocess_image函数。可以增加二值化处理代码:

```python 在preprocess_image函数中替换 img = img.convert('L') img = img.convert('L') threshold = 200 阈值,可根据实际情况调整 img = img.point(lambda p: 0 if p < threshold else 255, '1') ```

这会将图片转为纯黑白,去除噪点,通常能大幅提升扫描件文字的对比度。

3. 提示权限不足

原因:目标文件夹processed正在被其他程序(如文件管理器)打开,或源文件被设置为只读。

解决:关闭所有打开目标文件夹的窗口,确保源文件属性未被锁定,然后重新运行脚本。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统