在开始构建档案数字化系统之前,必须先配置好Python运行环境。本系统基于Python 3.8及以上版本开发,主要依赖Flask作为Web框架,Pillow处理图像,pytesseract调用OCR引擎。请打开终端或命令提示符,依次执行以下命令安装核心依赖库:
pip install flask pytesseract pillow werkzeug
为了确保文件上传的安全性,werkzeug是必须的辅助库。安装完成后,建议创建一个独立的虚拟环境进行隔离,避免污染系统全局环境。创建虚拟环境的命令如下:
python -m venv venv
激活虚拟环境:
OCR(光学字符识别)是档案数字化的核心,我们需要安装Tesseract引擎。Python库只是接口,真正的识别工作由引擎完成。
1. Windows系统安装:
访问Tesseract的GitHub发布页面或UB Mannheim镜像站下载安装包。为了确保兼容性,请下载 tesseract-ocr-w64-setup-5.3.3.exe(或最新稳定版)。安装过程中,务必勾选“Additional language data”,并下载简体中文语言包chi_sim和英文包eng。安装路径建议保持默认,例如 C:\Program Files\Tesseract-OCR。
安装完成后,必须将Tesseract的安装路径添加到系统环境变量Path中。具体操作为:右键“此电脑”->属性->高级系统设置->环境变量->系统变量->Path->编辑->新建,输入 C:\Program Files\Tesseract-OCR。
2. Linux系统安装:
在终端执行以下命令安装引擎及语言包:
sudo apt update

sudo apt install tesseract-ocr tesseract-ocr-chi-sim
在本地创建一个名为 archive_system 的文件夹作为项目根目录。为了实现文件上传、静态资源访问和模板渲染,请在根目录下创建以下子目录结构:
确保 uploads 文件夹为空,系统会自动处理文件写入权限。如果是在Linux服务器上部署,请手动赋予该文件夹读写权限:chmod 755 uploads。
在项目根目录下创建 app.py 文件。该文件包含完整的Web服务逻辑:数据库初始化、文件上传处理、OCR识别及结果存储。以下是完整的、可直接运行的代码:
``` 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 = 'secret_key_for_session' app.config['UPLOAD_FOLDER'] = 'uploads' app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'} Windows系统如果未配置环境变量,需显式指定tesseract路径 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 确保上传目录存在 os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] def get_db_connection(): conn = sqlite3.connect('archive.db') conn.row_factory = sqlite3.Row return conn def init_db(): conn = get_db_connection() conn.execute('CREATE TABLE IF NOT EXISTS documents (' 'id INTEGER PRIMARY KEY AUTOINCREMENT,' 'filename TEXT NOT NULL,' 'content TEXT,' 'upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)') conn.commit() conn.close() @app.route('/') def index(): conn = get_db_connection() docs = conn.execute('SELECT FROM documents ORDER BY upload_date DESC').fetchall() conn.close() return render_template('index.html', docs=docs) @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No selected file') return redirect(request.url) 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: 打开图片进行识别,指定中英文混合语言 img = Image.open(filepath) 转换为RGB模式,防止部分RGBA模式图片报错 if img.mode != 'RGB': img = img.convert('RGB') text_content = pytesseract.image_to_string(img, lang='chi_sim+eng') except Exception as e: flash(f'OCR Processing Error: {str(e)}') text_content = "Recognition Failed" 存入数据库 conn = get_db_connection() conn.execute('INSERT INTO documents (filename, content) VALUES (?, ?)', (filename, text_content)) conn.commit() conn.close() flash('File successfully uploaded and digitized') return redirect(url_for('index')) else: flash('Invalid file type. Only images allowed.') return redirect(url_for('index')) if __name__ == '__main__': init_db() app.run(debug=True, host='0.0.0.0', port=5000) ```代码逻辑说明:init_db 函数用于创建SQLite数据库表;upload_file 函数接收前端表单提交的图片,使用Pillow打开并转换格式,随后调用 pytesseract 进行识别,语言参数设置为 chi_sim+eng 以支持中英文混合识别。识别结果与文件名一同存入数据库。
在 templates 文件夹下创建 index.html 文件。这个页面集成了文件上传表单和数字化结果展示列表。为了保持零门槛,这里使用原生HTML和内联CSS,无需额外下载CSS框架。
```| ID | 文件名 | 识别内容预览 | 上传时间 |
|---|---|---|---|
| {{ doc.id }} | {{ doc.filename }} | {{ doc.content[:100] }}... | {{ doc.upload_date }} |
| 暂无数据 | |||
前端页面使用POST方法提交表单到 /upload 接口,表格部分通过Jinja2语法循环渲染数据库中的数据。content[:100] 用于截取识别结果的前100个字符进行预览,避免页面过长。
所有代码和配置文件就绪后,即可启动服务。在项目根目录下执行:
python app.py
终端显示 Running on http://0.0.0.0:5000 即表示启动成功。打开浏览器,访问 http://localhost:5000。
操作步骤验证:
至此,一个包含文件摄入、OCR识别、数据存储和结果展示的档案数字化一站式服务系统已完全落地。