网站首页/ 信息中心/ 档案百科/

基于Python实现档案数字化一站式服务全流程实操

发布时间:2026年08月28日 10:30:22 浏览量:0

环境搭建与依赖安装

在开始构建档案数字化系统之前,必须先配置好Python运行环境。本系统基于Python 3.8及以上版本开发,主要依赖Flask作为Web框架,Pillow处理图像,pytesseract调用OCR引擎。请打开终端或命令提示符,依次执行以下命令安装核心依赖库:

pip install flask pytesseract pillow werkzeug

为了确保文件上传的安全性,werkzeug是必须的辅助库。安装完成后,建议创建一个独立的虚拟环境进行隔离,避免污染系统全局环境。创建虚拟环境的命令如下:

python -m venv venv

激活虚拟环境:

Tesseract OCR 引擎部署

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

基于Python实现档案数字化一站式服务全流程实操

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框架。

``` 档案数字化一站式服务 档案数字化一站式服务 {% with messages = get_flashed_messages() %} {% if messages %}
{{ messages[0] }}
{% endif %} {% endwith %}

上传档案图片



已处理档案列表

{% for doc in docs %} {% else %} {% endfor %}
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

操作步骤验证:

  1. 上传测试: 准备一张包含文字的JPG或PNG图片(建议使用清晰的照片或扫描件)。点击“选择文件”,选中图片后点击“开始数字化处理”。
  2. 后台处理: 观察终端日志,Flask会显示POST请求。如果图片较大,OCR处理可能需要几秒钟,请耐心等待页面跳转。
  3. 结果核对: 页面刷新后,下方的表格中应出现新的一行。检查“识别内容预览”列,确认文字提取是否准确。如果识别结果为乱码,请检查Tesseract是否正确安装了中文语言包。
  4. 数据持久化: 停止服务(Ctrl+C)并重新运行 python app.py。刷新浏览器页面,之前上传的档案记录依然存在,证明SQLite数据存储配置正确。

至此,一个包含文件摄入、OCR识别、数据存储和结果展示的档案数字化一站式服务系统已完全落地。

职业学校档案培训:别让档案成为你职业路上的绊脚石
职业学校档案培训:别让档案成为你职业路上的绊脚石
这事儿吧,我干了这么多年,见过太多职业学校的同学,毕业时技能证书拿了一堆,结果在档案上栽了跟头。档案这东西,平时感觉不到它的存在,一到关键时刻——考公、评职称、进国企——它立马就能让你体会到什么叫“一...
2026年08月28日 10:30:22
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818