网站首页/ 信息中心/ 档案百科/

Python实战:博物馆档案OCR识别与自动化整理全流程

发布时间:2026年09月16日 14:40:26 浏览量:0

一、环境搭建与依赖安装

在开始博物馆档案数字化整理之前,必须先配置好基础的运行环境。本方案采用 Python 作为核心语言,结合 Tesseract OCR 引擎进行图像文字识别。请严格按照以下步骤操作,确保环境零报错。

1. 安装 Python 运行环境

请确保系统已安装 Python 3.8 或更高版本。如果未安装,请直接访问 Python 官网下载 Windows installer 版本。安装时,务必勾选 "Add Python to PATH" 选项,这将避免后续在命令行中无法识别 python 命令的问题。安装完成后,在终端输入 python --version 检查是否配置成功。

2. 安装 Tesseract OCR 引擎

Tesseract 是本方案的核心识别引擎。对于 Windows 用户,下载地址为:https://github.com/UB-Mannheim/tesseract/wiki。请下载最新的 64-bit 安装包。

安装过程中,必须选择 "Additional language data" 并在列表中勾选 Chinese (Simplified)English,否则无法识别中文档案。假设默认安装路径为 C:\Program Files\Tesseract-OCR,请记住此路径,后续代码中需要调用。

3. 安装 Python 依赖库

打开终端(CMD 或 PowerShell),执行以下命令安装所需的第三方库。这些库分别用于 OCR 封装、图像处理、文件操作和表格生成:

```bash pip install pytesseract pillow pandas openpyxl shutil ```

二、项目目录结构规划

为了保证代码能够直接运行,请在本地 D 盘或任意位置创建一个文件夹,命名为 MuseumArchiveTool。并在其中严格按照以下结构创建子目录和文件:

请将所有待整理的博物馆档案扫描件放入 raw_images 文件夹中。建议图片命名包含序号,如 001.jpg, 002.jpg,以确保处理顺序。

三、核心代码实现逻辑

本脚本将执行四个关键步骤:图像预处理(去噪)、OCR 文本提取、文件重命名与归档、生成 Excel 索引表。以下是详细的代码逻辑拆解,archive_sort.py 的完整代码将在下一节提供。

1. 图像预处理模块

博物馆老旧档案往往存在纸张发黄、噪点多的问题,直接识别准确率低。我们需要使用 Pillow 库将图片转换为灰度图像,并进行适当的二值化处理,去除背景干扰。

2. OCR 识别配置

Python实战:博物馆档案OCR识别与自动化整理全流程

在代码中必须显式指定 Tesseract 的可执行文件路径。对于 Windows 用户,通常为 r'C:\Program Files\Tesseract-OCR\tesseract.exe'。同时,配置识别参数 --psm 6,该参数表示“假设为统一的文本块”,非常适合对齐良好的档案扫描件。

3. 文件重命名与移动

识别出文本后,脚本会提取文本的前 20 个字符作为新文件名,去除特殊符号,并加上时间戳,防止重名。随后,利用 shutil.move 将处理完的文件移动到 processed_files 目录。

4. 数据汇总

利用 Pandas 的 DataFrame 对象,将“原文件名”、“新文件名”、“识别摘要”、“处理时间”记录在内存中,最后统一导出为 Excel 文件,形成档案电子台账。

四、完整自动化脚本

请将以下代码完整复制到 archive_sort.py 文件中。请特别注意修改 tesseract_cmd 路径以匹配你实际的安装位置。

```python import os import shutil import time import datetime import pandas as pd from PIL import Image, ImageEnhance, ImageFilter import pytesseract 配置区域 1. 设置 Tesseract 路径 (Windows用户必须修改此路径为你的实际安装路径) 如果是 Mac/Linux 用户,通常不需要设置此行,或者设置为 '/usr/bin/tesseract' pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 2. 设置文件夹路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) RAW_DIR = os.path.join(BASE_DIR, 'raw_images') PROCESSED_DIR = os.path.join(BASE_DIR, 'processed_files') 3. 设置 OCR 语言包:'chi_sim'简体中文, 'eng'英文 LANG = 'chi_sim+eng' 确保输出目录存在 if not os.path.exists(PROCESSED_DIR): os.makedirs(PROCESSED_DIR) def preprocess_image(image_path): """ 图像预处理:转灰度、增强对比度、去噪 """ try: img = Image.open(image_path) 转换为灰度图 img = img.convert('L') 增强对比度 enhancer = ImageEnhance.Contrast(img) img = enhancer.enhance(2.0) 二值化处理(阈值过滤),使文字更黑白分明 img = img.point(lambda x: 0 if x < 140 else 255) return img except Exception as e: print(f"图片预处理失败: {image_path}, 错误: {e}") return None def extract_text_from_image(img): """ 使用 Tesseract 提取文字 """ psm 6: 假设为统一的文本块 custom_config = r'--psm 6' try: text = pytesseract.image_to_string(img, lang=LANG, config=custom_config) 去除首尾空白和换行符 return text.strip().replace('\n', ' ') except Exception as e: print(f"OCR识别失败: {e}") return "" def sanitize_filename(name): """ 清理文件名,移除Windows不允许的字符 """ invalid_chars = '<>:"/\|?' for char in invalid_chars: name = name.replace(char, '') return name def main(): print(f" 开始处理档案任务: {datetime.datetime.now()} ") 支持的图片格式 valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff') files = [f for f in os.listdir(RAW_DIR) if f.lower().endswith(valid_extensions)] if not files: print("raw_images 文件夹中没有找到图片文件。") return 用于存储Excel数据的列表 record_data = [] for filename in files: raw_path = os.path.join(RAW_DIR, filename) print(f"正在处理: {filename}") 1. 预处理 processed_img = preprocess_image(raw_path) if not processed_img: continue 2. OCR 识别 full_text = extract_text_from_image(processed_img) 生成新文件名:取识别文本的前20个字符 + 时间戳 if len(full_text) > 20: name_part = sanitize_filename(full_text[:20]) else: name_part = sanitize_filename(full_text) if full_text else "未识别内容" timestamp = datetime.datetime.now().strftime("%H%M%S") ext = os.path.splitext(filename)[1] new_filename = f"{name_part}_{timestamp}{ext}" 3. 移动文件 dest_path = os.path.join(PROCESSED_DIR, new_filename) try: shutil.move(raw_path, dest_path) print(f"已归档: {new_filename}") except Exception as e: print(f"文件移动失败: {e}") continue 4. 记录数据 record_data.append({ "原文件名": filename, "新文件名": new_filename, "识别摘要": full_text[:50] + "..." if len(full_text) > 50 else full_text, "处理时间": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") }) 5. 生成 Excel 报表 if record_data: df = pd.DataFrame(record_data) excel_path = os.path.join(BASE_DIR, f"档案整理报表_{datetime.datetime.now().strftime('%Y%m%d')}.xlsx") df.to_excel(excel_path, index=False) print(f" 任务完成 报表已生成: {excel_path}") else: print("没有成功处理任何文件。") if __name__ == "__main__": main() ```

五、执行与结果验证

代码保存后,即可进行最终的执行操作。请确保 raw_images 文件夹中已放入测试图片。

1. 运行脚本

MuseumArchiveTool 目录下打开终端,执行以下命令启动程序:

```bash python archive_sort.py ```

终端将实时打印处理进度,例如“正在处理: 001.jpg”、“已归档: 清代瓷器图录_123045.jpg”。

2. 检查输出结果

任务完成后,请检查以下三个指标以验证操作是否成功:

至此,一套完整的博物馆档案自动化整理流程已落地。通过该方案,可将人工整理档案的效率提升 10 倍以上,并自动生成可检索的数字化台账。

微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818