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

基于Python搭建HR数字档案馆系统全流程实操

发布时间:2026年08月31日 12:00:05 浏览量:0

一、环境准备与依赖安装

本系统采用 Python Flask 作为 Web 框架,SQLite 作为数据库,Tesseract OCR 进行档案文字识别。请确保你的操作系统已安装 Python 3.8 或更高版本。

1. 安装 Tesseract OCR 引擎

OCR 是实现档案检索的核心,必须先安装系统级的识别引擎。

Windows 用户:访问 UB Mannheim 的 Tesseract 仓库下载 Windows 安装包:https://github.com/UB-Mannheim/tesseract/wiki。下载最新版安装时,务必勾选 "Additional language data" 中的 Chinese (Simplified) 语言包,并记住安装路径(默认为 C:\Program Files\Tesseract-OCR)。

Linux 用户:执行以下命令安装引擎及中文语言包:

```bash sudo apt-get update sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim ```

2. 配置 Python 依赖库

在项目根目录下创建 requirements.txt,直接复制以下内容。这包含了 Web 服务、图像处理及数据库连接驱动。

```text flask==2.3.3 pytesseract==0.3.10 Pillow==10.0.0 werkzeug==2.3.7 ```

打开终端,切换到项目目录,执行安装命令:

```bash pip install -r requirements.txt ```

二、项目目录结构搭建

为了保持代码清晰,请严格按照以下结构创建文件和文件夹。在终端执行以下命令快速生成骨架:

```bash mkdir hr_archive_system cd hr_archive_system mkdir uploads templates touch app.py init_db.py ```

最终的目录结构应如下所示:

三、数据库设计与初始化

我们需要一个轻量级的数据库来存储档案元数据和 OCR 识别后的文本内容。SQLite 无需配置服务器,直接以文件形式存储。

打开 init_db.py,填入以下完整代码。该脚本会创建一个名为 archives 的表,包含文件名、上传时间和识别内容。

```python import sqlite3 def init_db(): 连接数据库文件,不存在则自动创建 conn = sqlite3.connect('hr_archive.db') cursor = conn.cursor() 创建档案表 cursor.execute(''' CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, content TEXT ) ''') conn.commit() conn.close() print("数据库初始化成功,已生成 hr_archive.db 文件。") if __name__ == '__main__': init_db() ```

保存后,在终端运行 python init_db.py。如果看到成功提示,目录下会出现 hr_archive.db 文件。

四、后端核心逻辑开发

这是系统的核心部分,负责处理文件上传、调用 OCR 引擎提取文字以及响应搜索请求。

基于Python搭建HR数字档案馆系统全流程实操

打开 app.py,写入以下代码。注意:如果你是 Windows 用户,请取消代码中关于 tesseract_cmd 的注释并修改为你的实际安装路径。

```python import os import sqlite3 from flask import Flask, render_template, request, redirect, url_for, send_from_directory from werkzeug.utils import secure_filename from PIL import Image import pytesseract app = Flask(__name__) 配置区域 UPLOAD_FOLDER = 'uploads' ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'pdf', 'tif', 'bmp'} app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['MAX_CONTENT_LENGTH'] = 16 1024 1024 限制上传大小为 16MB Windows 用户必须配置此路径,Linux 用户可忽略 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 确保上传目录存在 if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) def allowed_file(filename): """检查文件扩展名是否合法""" return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS def perform_ocr(file_path): """执行 OCR 识别,支持中英文""" try: 使用 PIL 打开图片文件 image = Image.open(file_path) lang='chi_sim+eng' 表示同时识别简体中文和英文 text = pytesseract.image_to_string(image, lang='chi_sim+eng') return text except Exception as e: print(f"OCR Error: {e}") return "识别失败" @app.route('/') def index(): """首页:展示档案列表及搜索结果""" query = request.args.get('q', '') conn = sqlite3.connect('hr_archive.db') cursor = conn.cursor() if query: 执行模糊搜索,匹配文件名或识别内容 cursor.execute( "SELECT FROM archives WHERE content LIKE ? OR filename LIKE ? ORDER BY upload_time DESC", ('%' + query + '%', '%' + query + '%') ) else: 无搜索词时,显示所有记录 cursor.execute("SELECT FROM archives ORDER BY upload_time DESC") archives = cursor.fetchall() conn.close() return render_template('index.html', archives=archives, query=query) @app.route('/upload', methods=['POST']) def upload_file(): """处理文件上传""" if 'file' not in request.files: return redirect(request.url) file = request.files['file'] if file.filename == '': return redirect(request.url) if file and allowed_file(file.filename): 1. 安全处理文件名并保存 filename = secure_filename(file.filename) file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(file_path) 2. 执行 OCR 识别 print(f"正在识别文件: {filename}...") ocr_content = perform_ocr(file_path) 3. 存入数据库 conn = sqlite3.connect('hr_archive.db') cursor = conn.cursor() cursor.execute("INSERT INTO archives (filename, content) VALUES (?, ?)", (filename, ocr_content)) conn.commit() conn.close() print(f"文件 {filename} 处理完成。") return redirect(url_for('index')) @app.route('/uploads/') def uploaded_file(filename): """回显已上传的文件""" return send_from_directory(app.config['UPLOAD_FOLDER'], filename) if __name__ == '__main__': 启动服务,监听所有 IP,端口 5000 app.run(debug=True, host='0.0.0.0', port=5000) ```

五、前端交互页面开发

templates 文件夹下创建 index.html。这个页面集成了文件上传表单和搜索框,并使用表格展示档案列表。

```html HR 数字档案馆系统
HR 数字档案馆系统

档案列表 ({{ archives|length }})

{% for archive in archives %} {% else %} {% endfor %}
ID 文件名 上传时间 识别内容摘要 操作
{{ archive[0] }} {{ archive[1] }} {{ archive[2] }}
{% if archive[3] %} {{ archive[3] }} {% else %} (无文本内容) {% endif %}
查看原件
暂无档案数据,请先上传。
```

六、系统运行与实操测试

代码编写完毕,现在启动系统并进行实际操作验证。

1. 启动服务

确保终端位于项目根目录,执行以下命令:

```bash python app.py ```

当终端显示 Running on http://0.0.0.0:5000 时,说明服务已成功启动。

2. 上传测试

打开浏览器访问 http://127.0.0.1:5000

  1. 准备一张图片(例如员工身份证扫描件、劳动合同 PDF 或 JPG 图片)。
  2. 点击页面上的“选择文件”,选中该图片。
  3. 点击“上传档案”按钮。
  4. 观察终端:你会看到 "正在识别文件..." 的日志,稍等片刻(取决于图片大小和电脑性能)。
  5. 观察页面:页面刷新后,下方列表会出现新上传的文件,且“识别内容摘要”栏会显示从图片中提取出的文字。

3. 检索测试

在页面右上角的搜索框中,输入刚才上传图片中包含的任意关键词(例如员工姓名“张三”或词语“劳动合同”)。

点击“搜索”,列表将只展示包含该关键词的档案记录。这证明了 OCR 提取的文字已成功存入数据库并支持检索。

七、常见故障排查

在实操过程中,可能会遇到以下两个典型问题,请按方案解决:

1. 报错:tesseract is not installed or your path is incorrect

这是最常见的路径配置问题。请检查 app.py 中的 pytesseract.pytesseract.tesseract_cmd 是否已取消注释,且路径指向你电脑上 tesseract.exe 的绝对位置。Windows 路径中通常包含 Program Files,建议在字符串前加 r 以避免转义问题。

2. 识别内容为空或乱码

如果识别结果全是乱码或为空,通常是语言包缺失。请确保 Tesseract 的 tessdata 文件夹中存在 chi_sim.traineddata 文件。如果是 Linux,请重新运行安装命令;如果是 Windows,请手动下载该文件放入 Tesseract 安装目录下的 tessdata 文件夹中。

档案管理软件公司哪家便宜?过来人亲测高性价比选择指南
档案管理软件公司哪家便宜?过来人亲测高性价比选择指南
家人们谁懂啊,去年我帮公司选档案管理软件,抱着电脑搜了三天“档案管理软件公司哪家便宜”,踩了仨大坑,差点把我年终奖金整没了。今天把我踩坑攒的干货全掏出来,帮你省时间省money还不背锅,咱打工人就是要...
2026年08月31日 12:00:05
柳州档案管理系统:踩过坑的过来人都私藏的档案神器
柳州档案管理系统:踩过坑的过来人都私藏的档案神器
哎,各位兄弟姊妹、行政老铁、职场打工人,我跟你们掏心窝子说啊——当初我为了找个靠谱的档案管理系统,那真的是蹲过柳州政务中心的走廊,翻了17份不同的系统测评,踩过的坑能绕我家小区柳石路的健身器材三圈,最...
2026年08月31日 12:00:05
<p>档案软件审计日志不完整?别慌,老司机带你填坑!</p>

档案软件审计日志不完整?别慌,老司机带你填坑!

档案软件审计日志不完整?别慌,老司机带你填坑! 一、审计日志“缺斤少两”?这可不是小事! 哎,兄弟/集美,最近是不是被档案软件那审计日志搞得头大?就是那种,关键时刻想查个“谁在什么时候动了啥”,结...
2026年08月31日 12:00:05
找对档案制度建设部门 少走三年档案合规冤枉路
找对档案制度建设部门 少走三年档案合规冤枉路
说真的兄弟,我前两年真的被公司那堆乱成麻的档案坑得差点递辞职报告,头发都掉了一大把,才实打实明白:找对档案制度建设部门,真的能少走三年冤枉路。我这过来人踩过的坑、攒的干货,今天全给你们唠明白,绝对没半...
2026年08月31日 12:00:05
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818