事业单位档案数字化全流程实操指南与代码落地

一、技术栈选型与环境准备

事业单位档案数字化的核心难点在于批量扫描件的OCR识别与结构化存储。为了确保方案零成本且可落地,本方案采用Python作为核心开发语言,利用Tesseract OCR引擎进行文字识别,SQLite作为轻量级数据库,Flask搭建检索界面。这套组合无需购买昂贵的商业软件,且在普通办公电脑上即可运行。

必须搭建基础运行环境。请严格按照以下步骤操作,缺一不可。

1. 安装Python环境

访问Python官网下载Windows安装包。地址如下:https://www.python.org/downloads/

下载时务必勾选"Add Python to PATH"选项,这将自动配置环境变量,避免后续在命令行无法识别python命令。安装完成后,在CMD(命令提示符)中输入python --version,若显示版本号则安装成功。

2. 安装Tesseract OCR引擎

这是识别文字的核心组件。下载地址为:https://github.com/UB-Mannheim/tesseract/wiki

请下载最新的Windows installer(如tesseract-ocr-w64-setup-5.x.x.exe)。安装过程中,在"Choose Components"界面,务必展开"Additional language data",勾选Chinese (Simplified)English,否则无法识别中文。默认安装路径通常为C:\Program Files\Tesseract-OCR,请记住此路径。

3. 安装Python依赖库

打开CMD,依次执行以下命令安装所需库:

```bash pip install pytesseract pillow flask sqlite3 ```

注意,sqlite3是Python内置库,通常无需单独安装,但如果报错请确保Python环境完整。pytesseract是Tesseract的Python接口,pillow用于处理图像,flask用于Web展示。

二、档案目录结构与预处理规范

在编写代码前,必须在本地建立标准化的文件目录。混乱的文件存放会导致程序读取失败。请在D盘根目录下创建一个名为DigitalArchive的文件夹,并在内部建立以下子目录结构:

  • DigitalArchive /
    • raw_scans/:存放待处理的扫描件图片(支持jpg, png, bmp格式)。
    • processed_text/:存放识别成功后的TXT文本文件。
    • database/:存放SQLite数据库文件。
    • static/:存放Web界面所需的CSS样式文件。
    • templates/:存放HTML模板文件。
    • app.py:核心运行脚本。

将所有需要数字化的档案图片统一放入raw_scans文件夹中。为了提高识别率,建议文件命名带有编号,例如2023_001_人事档案.jpg

三、核心OCR识别与入库脚本开发

这是整个方案的核心。我们将编写一个Python脚本,自动扫描raw_scans文件夹中的图片,调用Tesseract进行识别,将结果存入TXT文件,并将元数据(文件名、识别内容、时间)写入SQLite数据库。

请在DigitalArchive目录下创建app.py,并完整复制以下代码。注意修改代码中的tesseract_cmd路径以匹配你的实际安装位置。

```python import os import sqlite3 import datetime from PIL import Image import pytesseract from flask import Flask, render_template, request 配置区域 如果你的Tesseract没有安装在默认路径,请务必修改下面这行引号内的路径 Windows默认路径示例: r'C:\Program Files\Tesseract-OCR\tesseract.exe' pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' SOURCE_DIR = 'raw_scans' OUTPUT_DIR = 'processed_text' DB_PATH = os.path.join('database', 'archives.db') app = Flask(__name__) 数据库初始化 def init_db(): if not os.path.exists('database'): os.makedirs('database') conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() 创建档案表,包含文件名、识别内容、处理时间 cursor.execute(''' CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, content TEXT, process_date TEXT ) ''') conn.commit() conn.close() 核心处理函数 def process_files(): if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() files = [f for f in os.listdir(SOURCE_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] for filename in files: file_path = os.path.join(SOURCE_DIR, filename) print(f"正在处理: {filename}") try: 打开图片并进行灰度处理,提高识别率 img = Image.open(file_path) img = img.convert('L') 调用Tesseract识别,lang='chi_sim+eng'表示中英文混合识别 text = pytesseract.image_to_string(img, lang='chi_sim+eng') 保存TXT文件 txt_name = os.path.splitext(filename)[0] + '.txt' txt_path = os.path.join(OUTPUT_DIR, txt_name) with open(txt_path, 'w', encoding='utf-8') as f: f.write(text) 写入数据库 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') cursor.execute("INSERT INTO archives (filename, content, process_date) VALUES (?, ?, ?)", (filename, text, current_time)) conn.commit() print(f"完成: {filename}") except Exception as e: print(f"处理 {filename} 失败: {e}") conn.close() Web路由部分 @app.route('/') def index(): return render_template('index.html') @app.route('/search') def search(): query = request.args.get('q', '') conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() if query: 使用SQL LIKE进行模糊查询 cursor.execute("SELECT filename, content, process_date FROM archives WHERE content LIKE ?", ('%' + query + '%',)) else: cursor.execute("SELECT filename, content, process_date FROM archives") results = cursor.fetchall() conn.close() return render_template('results.html', results=results, query=query) if __name__ == '__main__': 首次运行初始化数据库 init_db() 如果需要批量处理图片,取消下面这行的注释,处理完成后建议注释掉以免重复处理 process_files() app.run(debug=True, port=5000) ```

四、Web检索界面搭建

为了让档案能被搜索,我们需要创建两个简单的HTML文件。Flask会自动渲染这些文件。

1. 创建主页

事业单位档案数字化全流程实操指南与代码落地

templates文件夹下创建index.html

```html 档案数字化检索系统 事业单位档案检索
```

2. 创建结果页

templates文件夹下创建results.html

```html 搜索结果 搜索结果: {{ query }} 返回首页
{% for row in results %}

文件名: {{ row[0] }}

处理时间: {{ row[2] }}

摘要内容: {{ row[1][:200] }}...

{% else %}

未找到相关档案。

{% endfor %} ```

五、执行步骤与常见问题解决

代码与文件准备就绪后,按照以下顺序启动系统:

1. 执行数字化处理

打开app.py,找到代码底部的if __name__ == '__main__':部分。将process_files()这一行的注释符号去掉。保存文件。

在CMD中进入DigitalArchive目录,执行命令:

```bash python app.py ```

此时控制台会输出"正在处理..."等日志。待所有图片处理完毕,按Ctrl+C停止程序。然后务必将process_files()这行重新加上注释,防止每次启动Web服务都重复处理图片。

2. 启动Web服务

再次执行python app.py。打开浏览器,访问 http://127.0.0.1:5000。输入关键词即可看到检索结果。

3. 常见报错处理

  • 报错:tesseract is not installed or it's not in your path

    原因:Python找不到Tesseract程序。解决:检查代码中pytesseract.pytesseract.tesseract_cmd的路径是否正确,必须指向tesseract.exe这个文件,而不是文件夹。

  • 报错:FileNotFoundError: [Errno 2] No such file or directory: 'raw_scans'

    原因:目录结构不完整。解决:确保在DigitalArchive下手动创建了raw_scans等所有文件夹。

  • 识别结果全是乱码

    原因:未安装中文语言包。解决:重新运行Tesseract安装包,确保勾选了Chinese (Simplified)语言数据。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统