零基础实现唐山档案整理:Python自动化OCR归档实操教程

一、环境搭建与依赖安装

在进行唐山档案整理的数字化操作前,必须先配置好Python运行环境及OCR识别引擎。本指南基于Windows 10/11系统编写,核心逻辑同样适用于Linux和macOS。

1. Python环境配置

首先需要安装Python解释器。请前往Python官网下载最新稳定版(推荐3.9或3.10版本)。安装时,务必勾选界面底部的"Add Python to PATH"选项,这将自动配置环境变量,避免后续命令行无法识别Python指令。

安装完成后,打开命令提示符(CMD),输入以下命令验证安装是否成功:

```bash python --version ```

2. 安装必要的Python库

我们需要使用`pytesseract`进行OCR调用,`Pillow`处理图像,`pandas`和`openpyxl`用于将识别结果导出为Excel表格。在CMD中执行以下命令进行批量安装:

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

3. 安装Tesseract OCR引擎

这是实现文字识别的核心工具。Python库只是接口,真正的识别能力由Tesseract引擎提供。

下载地址:请访问UB Mannheim的Tesseract页面下载Windows安装包。

安装步骤:

  • 运行安装程序,一路点击"Next"。
  • 在"Choose Components"界面,务必勾选"Additional language data(download)"
  • 展开该项,在列表中找到Chinese (Simplified)Chinese (Traditional)并勾选,这是识别唐山档案中汉字的关键。
  • 安装路径建议保持默认,通常为C:\Program Files\Tesseract-OCR
  • 二、项目目录结构搭建

    为了保持档案整理的条理性,请在D盘或任意工作目录下创建一个名为TangshanArchives的项目文件夹。并在其中建立以下子目录结构:

    • TangshanArchives/ (根目录)
      • raw_images/:存放待整理的档案扫描件(支持JPG、PNG格式)。
      • processed_data/:用于存放输出的Excel结果文件。
      • archive_sorter.py:我们将要编写的自动化脚本。

    请将所有待处理的唐山档案图片文件复制到raw_images文件夹中。

    三、核心代码编写:图像预处理与OCR识别

    零基础实现唐山档案整理:Python自动化OCR归档实操教程

    打开代码编辑器(如VS Code或PyCharm),新建文件archive_sorter.py。我们将分模块编写代码,确保每一步都可执行。

    1. 导入库与配置路径

    代码首部需要引入相关库,并手动指定Tesseract的安装路径。这是Windows环境下最容易报错的环节,必须使用绝对路径。

    ```python import os import pytesseract from PIL import Image import pandas as pd from datetime import datetime 请根据您的实际安装路径修改,注意路径前的r表示原始字符串,避免转义问题 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 定义文件夹路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) INPUT_DIR = os.path.join(BASE_DIR, 'raw_images') OUTPUT_DIR = os.path.join(BASE_DIR, 'processed_data') ```

    2. 图像预处理函数

    档案扫描件往往带有噪点或倾斜,直接识别效果不佳。我们需要编写一个函数,将图片转换为灰度图并进行适当的二值化处理,以提高文字对比度。

    ```python def preprocess_image(image_path): """ 加载图像并转换为灰度模式,提升OCR识别率 """ try: img = Image.open(image_path) 转换为灰度图 img = img.convert('L') 这里可以扩展二值化处理,例如 threshold = 200 img = img.point(lambda x: 0 if x < 200 else 255, '1') return img except Exception as e: print(f"图片读取失败: {image_path}, 错误: {e}") return None ```

    3. 核心识别逻辑

    编写函数调用OCR引擎。针对唐山档案,主要包含中文,因此指定语言参数为chi_sim(简体中文)。同时开启--psm 6参数,假设图片为统一的文本块,这对于排版整齐的档案效果最好。

    ```python def extract_text_from_image(img): """ 使用Tesseract识别图片中的中文文本 """ if img is None: return "" config参数说明: --psm 6: 假设图像为统一的文本块 -l chi_sim+eng: 同时加载简体中文和英文语言包 custom_config = r'--psm 6 -l chi_sim+eng' try: text = pytesseract.image_to_string(img, config=custom_config) return text.strip() except Exception as e: print(f"OCR识别出错: {e}") return "" ```

    四、数据清洗与结构化存储

    OCR识别出的原始文本通常包含大量换行符和空格。我们需要将其清洗,并提取出关键信息(如文件名、识别时间、正文内容),最后存入列表以便导出。

    ```python def clean_text(text): """ 清洗文本,去除多余的空白字符 """ 将连续的空白字符替换为单个空格 import re text = re.sub(r'\s+', ' ', text) return text def process_archives(): """ 主处理函数:遍历文件夹,执行OCR,汇总数据 """ if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) data_records = [] files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg'))] print(f"开始处理,共发现 {len(files)} 个档案文件...") for filename in files: file_path = os.path.join(INPUT_DIR, filename) print(f"正在处理: {filename}") 1. 预处理 img = preprocess_image(file_path) 2. 识别 raw_text = extract_text_from_image(img) 3. 清洗 clean_content = clean_text(raw_text) 4. 组装数据 record = { "档案文件名": filename, "识别时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "档案内容摘要": clean_content[:100] + "..." if len(clean_content) > 100 else clean_content, 摘要 "完整识别内容": clean_content } data_records.append(record) return data_records ```

    五、完整自动化脚本整合

    将上述模块整合,并添加Excel导出的最终逻辑。请将以下完整代码覆盖archive_sorter.py中的内容。

    ```python import os import re import pytesseract from PIL import Image import pandas as pd from datetime import datetime 配置区域 如果您的Tesseract没有安装在默认路径,请务必修改此处 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' BASE_DIR = os.path.dirname(os.path.abspath(__file__)) INPUT_DIR = os.path.join(BASE_DIR, 'raw_images') OUTPUT_DIR = os.path.join(BASE_DIR, 'processed_data') 功能函数 def preprocess_image(image_path): 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_text_from_image(img): if img is None: return "" 使用简体中文和英文混合识别 custom_config = r'--psm 6 -l chi_sim+eng' try: text = pytesseract.image_to_string(img, config=custom_config) return text.strip() except Exception as e: print(f"OCR识别出错: {e}") return "" def clean_text(text): 去除特殊符号和多余空格 text = re.sub(r'\s+', ' ', text) return text def main(): if not os.path.exists(INPUT_DIR): print(f"错误:未找到输入文件夹 {INPUT_DIR},请检查目录结构。") return if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) results = [] files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg'))] print(f">>> 开始任务:共发现 {len(files)} 个待档案文件。") for index, filename in enumerate(files): file_path = os.path.join(INPUT_DIR, filename) print(f"[{index+1}/{len(files)}] 正在识别: {filename} ...") img = preprocess_image(file_path) text = extract_text_from_image(img) clean_content = clean_text(text) results.append({ "原始文件名": filename, "归档日期": datetime.now().strftime("%Y-%m-%d"), "识别全文": clean_content }) 导出Excel if results: output_file = os.path.join(OUTPUT_DIR, f"唐山档案整理结果_{datetime.now().strftime('%Y%m%d%H%M%S')}.xlsx") df = pd.DataFrame(results) try: df.to_excel(output_file, index=False, engine='openpyxl') print(f"\n>>> 任务完成!结果已保存至:{output_file}") except Exception as e: print(f"\nExcel导出失败: {e}") else: print("\n未处理任何文件,请检查raw_images文件夹中是否有图片。") if __name__ == "__main__": main() ```

    六、运行与结果验证

    代码保存后,我们直接在命令行中运行脚本。

    1. 进入目录:在CMD中使用cd命令切换到项目目录。
      cd /d D:\TangshanArchives (假设您在D盘)
    2. 执行脚本:
      python archive_sorter.py

    终端将实时显示处理进度。如果看到"任务完成!结果已保存至..."的提示,说明程序运行成功。

    结果校验

    打开processed_data文件夹,你会看到一个以时间戳命名的Excel文件。打开该文件,你应该能看到以下列:

    • 原始文件名:对应图片的名称。
    • 归档日期:处理当天的日期。
    • 识别全文:图片中提取出的文字内容。

    此时,唐山档案的数字化初步工作已完成。你可以打开Excel,利用Ctrl+F功能快速检索档案内容,实现从“翻阅纸质堆”到“秒级检索”的转变。如果发现识别率不高,建议回到preprocess_image函数中,调整图片的分辨率或对比度参数。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统