一、环境搭建与依赖安装
在开始博物馆档案数字化整理之前,必须先配置好基础的运行环境。本方案采用 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
```
- pytesseract:Tesseract 的 Python 封装库。
- pillow:用于对扫描件进行灰度化、二值化等预处理,提高识别率。
- pandas:用于生成结构化的 Excel 档案目录。
- openpyxl:Pandas 依赖库,用于读写 xlsx 文件。
二、项目目录结构规划
为了保证代码能够直接运行,请在本地 D 盘或任意位置创建一个文件夹,命名为 MuseumArchiveTool。并在其中严格按照以下结构创建子目录和文件:
- MuseumArchiveTool/ (项目根目录)
- raw_images/ (存放待处理的原始扫描件图片,支持 jpg, png)
- processed_files/ (存放处理后的图片和重命名后的文件)
- archive_sort.py (核心自动化脚本,后文将提供完整代码)
请将所有待整理的博物馆档案扫描件放入 raw_images 文件夹中。建议图片命名包含序号,如 001.jpg, 002.jpg,以确保处理顺序。
三、核心代码实现逻辑
本脚本将执行四个关键步骤:图像预处理(去噪)、OCR 文本提取、文件重命名与归档、生成 Excel 索引表。以下是详细的代码逻辑拆解,archive_sort.py 的完整代码将在下一节提供。
1. 图像预处理模块
博物馆老旧档案往往存在纸张发黄、噪点多的问题,直接识别准确率低。我们需要使用 Pillow 库将图片转换为灰度图像,并进行适当的二值化处理,去除背景干扰。
2. 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. 检查输出结果
任务完成后,请检查以下三个指标以验证操作是否成功:
- processed_files 文件夹:原
raw_images 中的图片应已被移动至此,且文件名已变为包含中文关键词的名称,不再是简单的数字序号。
- 根目录 Excel 文件:目录下应生成一个名为
档案整理报表_YYYYMMDD.xlsx 的文件。打开该文件,应包含“原文件名”、“新文件名”、“识别摘要”和“处理时间”四列完整数据。
- 识别准确率:抽查 Excel 中的“识别摘要”列,确认关键信息(如年份、文物名称)是否被正确提取。如果识别率较低,请检查扫描件清晰度,或调整代码中
img.point 的阈值参数(当前为 140)。
至此,一套完整的博物馆档案自动化整理流程已落地。通过该方案,可将人工整理档案的效率提升 10 倍以上,并自动生成可检索的数字化台账。