一、环境准备与核心组件安装
在构建政府档案数字化收集系统前,必须先搭建基础运行环境。本方案基于Python 3.9和Tesseract OCR引擎,确保系统具备高精度的文字识别能力。
1.1 安装Python环境
请确保系统已安装Python 3.9或更高版本。若未安装,请直接访问Python官网下载Windows installer或使用Linux包管理器安装。
1.2 安装Tesseract OCR引擎
OCR是实现档案数字化的核心,用于将扫描件或图片转换为可检索文本。
Windows系统:下载Tesseract-OCR-Win64安装包,安装时务必勾选“Additional language data”中的Chinese (Simplified)语言包,默认安装路径建议保持为C:\Program Files\Tesseract-OCR。
Linux系统(Ubuntu/Debian):执行以下命令:
```bash
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-chi-sim
```
1.3 安装Python依赖库
在项目根目录下打开终端,执行以下命令安装Flask框架及图像处理库:
```bash
pip install flask pytesseract pillow werkzeug
```
二、项目目录结构规划
为了保持代码逻辑清晰,建议严格按照以下目录结构创建文件和文件夹:
```text
gov_archive_system/
├── app.py 核心业务逻辑与路由
├── templates/ 前端模板目录
│ └── index.html 档案上传页面
├── static/ 静态资源目录
│ └── uploads/ 档案文件存储目录
└── archive.db SQLite数据库文件(自动生成)
```
三、后端核心逻辑开发

创建app.py文件,编写完整的后端处理代码。该代码包含数据库初始化、文件上传校验、OCR识别及元数据存储功能。
```python
import os
import sqlite3
from flask import Flask, request, render_template, redirect, url_for, flash
from werkzeug.utils import secure_filename
from PIL import Image
import pytesseract
app = Flask(__name__)
app.secret_key = 'gov_archive_secret_key_2024'
app.config['UPLOAD_FOLDER'] = 'static/uploads'
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'pdf', 'tif', 'bmp'}
Windows系统需指定tesseract路径,Linux系统可注释掉
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
确保上传目录存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
def init_db():
"""初始化数据库,创建档案表"""
conn = sqlite3.connect('archive.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS archives (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
doc_code TEXT UNIQUE NOT NULL,
category TEXT NOT NULL,
filename TEXT NOT NULL,
ocr_content TEXT,
upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
flash('未未选择文件')
return redirect(url_for('index'))
file = request.files['file']
title = request.form.get('title')
doc_code = request.form.get('doc_code')
category = request.form.get('category')
if file.filename == '':
flash('文件名为空')
return redirect(url_for('index'))
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
执行OCR识别
try:
使用中文简体和英文混合识别
ocr_text = pytesseract.image_to_string(Image.open(filepath), lang='chi_sim+eng')
except Exception as e:
ocr_text = f"OCR识别失败: {str(e)}"
存入数据库
conn = sqlite3.connect('archive.db')
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO archives (title, doc_code, category, filename, ocr_content) VALUES (?, ?, ?, ?, ?)",
(title, doc_code, category, filename, ocr_text))
conn.commit()
flash(f'档案 {title} 收集成功!OCR识别完成。')
except sqlite3.IntegrityError:
flash(f'错误:文号 {doc_code} 已存在,请检查重复数据。')
finally:
conn.close()
return redirect(url_for('index'))
else:
flash('不支持的文件格式,仅支持图片和PDF。')
return redirect(url_for('index'))
if __name__ == '__main__':
init_db()
app.run(debug=True, port=5000)
```
四、前端上传页面实现
在templates文件夹下创建index.html。此页面提供档案元数据录入和文件上传控件,设计简洁,方便工作人员操作。
```html
政府档案数字化收集入口
政府档案数字化收集
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
```
五、系统配置与OCR调优
代码中默认启用了中英文混合识别模式。在Windows环境下,如果运行时报错tesseract is not installed,请务必在app.py中取消注释第13行,并将路径修改为你实际的安装路径。
提高识别准确率建议:
- 对于扫描件,上传前尽量保证图片DPI在300以上。
- 如果文档包含繁体中文,需将
lang='chi_sim+eng'修改为lang='chi_tra+eng'。
六、系统启动与实操验证
6.1 启动服务
在终端中进入项目目录,执行启动命令:
```bash
python app.py
```
终端显示Running on http://127.0.0.1:5000即表示服务启动成功。
6.2 操作流程验证
- 打开浏览器访问
http://127.0.0.1:5000。
- 在表单中输入“档案标题”和“档案文号”(文号用于查重,不可重复)。
- 选择“档案分类”并点击“选择文件”,上传一张包含文字的JPG或PNG图片。
- 点击“提交并数字化处理”按钮。
- 观察结果:页面应提示“档案收集成功”。此时检查项目目录下的
static/uploads文件夹,确认文件已保存;检查根目录下的archive.db文件,使用SQLite查看工具打开,可以看到ocr_content字段中已经填充了识别出的文本内容。
至此,一套基础的政府档案数字化收集系统已搭建完成,实现了从文件上传、元数据录入到自动OCR识别及存储的全流程闭环。