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

手把手教你用Python开发档案数字化著录软件

发布时间:2026年08月21日 07:15:19 浏览量:0

一、环境准备与依赖安装

在开始编写代码之前,必须先配置好开发环境。我们需要Python作为运行基础,Tesseract-OCR用于文字识别,以及几个关键的Python库来处理图像和Excel数据。

1. 安装Python环境

前往Python官网下载最新稳定版(推荐3.9及以上版本)。下载地址:https://www.python.org/downloads/

安装时,务必勾选界面底部的"Add Python to PATH"选项,这能避免后续在命令行中无法识别Python命令的问题。

2. 安装Tesseract-OCR引擎

这是实现档案自动著录的核心组件。下载Windows版本的安装包,推荐使用5.3.0版本。

下载地址:https://github.com/UB-Mannheim/tesseract/wiki

安装过程中,路径尽量保持简单,例如:C:\Program Files\Tesseract-OCR。请记住这个路径,后续代码中需要调用。

3. 安装Python依赖库

打开命令行(Win+R输入cmd),依次执行以下命令安装所需库:

二、核心代码实现

我们将创建一个单文件应用,包含图像预览、OCR自动识别、元数据录入和Excel导出功能。新建一个文件名为archive_tool.py,并将以下代码完整复制进去。

注意:代码第7行需要根据你实际安装Tesseract的路径进行修改。

```python import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTk import pytesseract import pandas as pd import os from datetime import datetime 【关键配置】请修改为你电脑上Tesseract的实际安装路径 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' class ArchiveApp: def __init__(self, root): self.root = root self.root.title("档案数字化著录工具 v1.0") self.root.geometry("800x600") self.current_image_path = None self.excel_path = "档案著录数据.xlsx" self.create_widgets() def create_widgets(self): 顶部:图片选择区 top_frame = tk.Frame(self.root, pady=10) top_frame.pack(side=tk.TOP, fill=tk.X) tk.Button(top_frame, text="选择档案图片", command=self.load_image, width=15, bg="e1e1e1").pack(side=tk.LEFT, padx=10) self.lbl_image_info = tk.Label(top_frame, text="未选择图片", fg="gray") self.lbl_image_info.pack(side=tk.LEFT) 中部:左侧预览,右侧录入 middle_frame = tk.Frame(self.root) middle_frame.pack(expand=True, fill=tk.BOTH, padx=10, pady=10) 左侧图片预览 self.preview_label = tk.Label(middle_frame, text="图片预览区", bg="f0f0f0", width=40, height=20) self.preview_label.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) 右侧数据录入区 input_frame = tk.Frame(middle_frame, padx=10) input_frame.pack(side=tk.RIGHT, fill=tk.Y) tk.Label(input_frame, text="档号:").grid(row=0, column=0, sticky="e", pady=5) self.entry_id = tk.Entry(input_frame, width=30) self.entry_id.grid(row=0, column=1, pady=5) tk.Label(input_frame, text="题名:").grid(row=1, column=0, sticky="e", pady=5) self.entry_title = tk.Entry(input_frame, width=30) self.entry_title.grid(row=1, column=1, pady=5) OCR识别按钮 tk.Button(input_frame, text="OCR自动提取题名", command=self.ocr_extract, bg="d9ead3").grid(row=2, column=0, columnspan=2, pady=10, sticky="we") tk.Label(input_frame, text="责任者:").grid(row=3, column=0, sticky="e", pady=5) self.entry_author = tk.Entry(input_frame, width=30) self.entry_author.grid(row=3, column=1, pady=5) tk.Label(input_frame, text="日期:").grid(row=4, column=0, sticky="e", pady=5) self.entry_date = tk.Entry(input_frame, width=30) self.entry_date.insert(0, datetime.now().strftime("%Y-%m-%d")) self.entry_date.grid(row=4, column=1, pady=5) tk.Label(input_frame, text="页数:").grid(row=5, column=0, sticky="e", pady=5) self.entry_pages = tk.Entry(input_frame, width=30) self.entry_pages.insert(0, "1") self.entry_pages.grid(row=5, column=1, pady=5) 底部:操作区 bottom_frame = tk.Frame(self.root, pady=20) bottom_frame.pack(side=tk.BOTTOM, fill=tk.X) tk.Button(bottom_frame, text="保存到Excel", command=self.save_data, width=20, height=2, bg="cfe2f3", font=("Arial", 10, "bold")).pack() def load_image(self): file_path = filedialog.askopenfilename(filetypes=[("Image Files", ".jpg;.jpeg;.png;.bmp")]) if file_path: self.current_image_path = file_path self.lbl_image_info.config(text=os.path.basename(file_path)) 显示缩略图 try: load = Image.open(file_path) load.thumbnail((400, 500), Image.Resampling.LANCZOS) ) render = ImageTk.PhotoImage(load) self.preview_label.config(image=render) self.preview_label.image = render except Exception as e: messagebox.showerror("错误", f"图片加载失败: {e}") def ocr_extract(self): if not self.current_image_path: messagebox.showwarning("提示", "请先选择图片") return try: 简单的OCR配置,识别中文+英文 text = pytesseract.image_to_string(Image.open(self.current_image_path), lang='chi_sim+eng') 提取前50个字符作为题名预填,并去除换行符 clean_text = text.replace('\n', ' ').strip()[:50] self.entry_title.delete(0, tk.END) self.entry_title.insert(0, clean_text) messagebox.showinfo("成功", "题名已自动提取,请人工核对修正。") except Exception as e: messagebox.showerror("错误", f"OCR识别失败,请检查Tesseract路径配置: {e}") def save_data(self): data = { "档号": [self.entry_id.get()], "题名": [self.entry_title.get()], "责任者": [self.entry_author.get()], "日期": [self.entry_date.get()], "页数": [self.entry_pages.get()], "关联图片路径": [self.current_image_path if self.current_image_path else ""] } df_new = pd.DataFrame(data) 检查文件是否存在,决定是新建还是追加 if os.path.exists(self.excel_path): try: df_old = pd.read_excel(self.excel_path) df_final = pd.concat([df_old, df_new], ignore_index=True) except: df_final = df_new else: df_final = df_new try: df_final.to_excel(self.excel_path, index=False) messagebox.showinfo("成功", f"数据已保存至 {os.path.abspath(self.excel_path)}") 清空输入框以便下一条录入 self.entry_id.delete(0, tk.END) self.entry_title.delete(0, tk.END) self.entry_author.delete(0, tk.END) self.preview_label.config(image="") except Exception as e: messagebox.showerror("错误", f"保存Excel失败: {e}") if __name__ == "__main__": root = tk.Tk() app = ArchiveApp(root) root.mainloop() ```

三、功能实操详解

代码保存后,直接双击运行或在命令行输入python archive_tool.py即可启动软件。以下是标准化的著录操作流程:

1. 加载并预览档案图像

点击左上角的“选择档案图片”按钮,选中你需要著录的扫描件(支持JPG、PNG等格式)。软件会自动在左侧窗口显示缩略图,确认这是你需要处理的档案。

2. 自动OCR提取题名

手把手教你用Python开发档案数字化著录软件

这是提升效率的核心步骤。在右侧录入区,点击“OCR自动提取题名”绿色按钮。软件会调用后台的Tesseract引擎,读取图片中的文字。

实操注意:OCR提取的文字通常包含噪点或换行符,代码已自动去除换行符并截取前50字。你需要人工核对“题名”输入框,删除多余的乱码,修正错别字,确保符合档案著录规范。

3. 补充元数据信息

手动录入或修改以下字段:

4. 数据持久化存储

点击底部的“保存到Excel”蓝色按钮。软件会自动在当前目录下生成或更新名为“档案著录数据.xlsx”的文件。

软件逻辑设计为追加模式:每次点击保存,新的一行数据会被添加到Excel表格末尾,而不会覆盖之前的数据。保存成功后,输入框会自动清空,你可以直接开始下一份档案的著录。

四、打包成独立EXE执行文件

为了方便在没有安装Python环境的电脑上使用,我们需要将Python脚本打包成EXE文件。

1. 安装PyInstaller

在命令行执行:pip install pyinstaller

2. 执行打包命令

archive_tool.py文件所在的目录下,打开命令行,执行以下命令:

pyinstaller -F -w archive_tool.py

参数解释:

3. 处理依赖文件(重要)

打包完成后,在生成的dist文件夹中找到archive_tool.exe。此时直接运行可能会报错,提示找不到Tesseract。

你需要将Tesseract安装目录下的tessdata文件夹(包含语言训练数据)和tesseract.exe复制出来,放在与archive_tool.exe相同的目录下,或者确保目标电脑已安装Tesseract环境。

至此,一个完全可用的、具备OCR功能的档案数字化著录软件就开发完成了。你可以直接将这个EXE文件分发给同事使用。

3个可直接抄作业的学校档案培训案例 新手小白也能快速上手
3个可直接抄作业的学校档案培训案例 新手小白也能快速上手
家人们谁懂啊,我5年前刚接学校档案岗的时候,简直是天选背锅侠:上级要求做档案培训找不到合适的方案,老师听完就忘,归档错漏被教育局通报了3次,差点把我那年的年终评优整黄,连带着整个部门的绩效都打了折。后...
2026年08月21日 07:15:19
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818