档案数字化入库实操指南,零基础搭建OCR识别与存储系统

一、环境准备与工具安装

在开始构建档案数字化系统之前,必须确保运行环境配置正确。本系统基于Python开发,利用Tesseract OCR引擎进行图像文字识别,使用SQLite作为轻量级数据库存储档案信息。请严格按照以下步骤安装依赖。

1. 安装Python环境

确保系统已安装Python 3.8或更高版本。如果未安装,请访问Python官网下载对应操作系统的安装包。安装时务必勾选"Add Python to PATH"选项。安装完成后,在终端执行以下命令验证:

python --version

2. 安装Tesseract OCR引擎

Tesseract是OCR的核心识别引擎。不同操作系统的安装方式如下:

  • Windows:访问 https://github.com/UB-Mannheim/tesseract/wiki 下载最新的安装包(推荐tesseract-ocr-w64-setup)。安装时请务必勾选"Additional language data"中的Chinese (Simplified)English语言包,否则无法识别中文。默认安装路径通常为 C:\Program Files\Tesseract-OCR\tesseract.exe
  • macOS:使用Homebrew安装,执行命令:brew install tesseract tesseract-lang
  • Linux (Ubuntu/Debian):执行命令:sudo apt install tesseract-ocr tesseract-ocr-chi-sim

3. 安装Python依赖库

在项目根目录下创建 requirements.txt 文件,并填入以下内容。随后执行安装命令。这些库分别用于OCR封装、图像处理和数据库操作。

pip install pytesseract pillow sqlite3

注意:sqlite3通常包含在Python标准库中,无需单独安装。如果上述命令报错,请尝试分别安装:pip install pytesseract pillow

二、项目目录结构规划

为了保持代码的可维护性,请按照以下结构创建文件夹和文件。这种结构将输入文件、处理后的图片、数据库和代码逻辑分离,避免混乱。

  • archive_system/ (项目根目录)
    • input_files/ (存放待扫描的原始图片,支持jpg, png)
    • processed_files/ (存放经过降噪处理的图片)
    • data/ (存放数据库文件)
    • config.py (配置文件,存放路径和常量)
    • image_processor.py (图像预处理模块)
    • ocr_engine.py (文字识别模块)
    • db_manager.py (数据库管理模块)
    • main.py (主程序入口)

三、配置文件编写

创建 config.py,集中管理路径和Tesseract配置。这在更换机器或部署时能极大减少修改工作量。请根据Windows或Linux的实际安装路径修改 TESSERACT_PATH

```python import os 基础路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 文件路径配置 INPUT_DIR = os.path.join(BASE_DIR, 'input_files') PROCESSED_DIR = os.path.join(BASE_DIR, 'processed_files') DATA_DIR = os.path.join(BASE_DIR, 'data') DB_PATH = os.path.join(DATA_DIR, 'archives.db') Tesseract OCR 引擎路径配置 Windows用户请务必修改为实际安装路径,Mac/Linux用户可注释掉此行或设为None TESSERACT_PATH = r'C:\Program Files\Tesseract-OCR\tesseract.exe' OCR识别参数 OCR_LANG = 'chi_sim+eng' 同时识别中文简体和英文 PAGE_SEG_MODE = '6' PSM 6: 假设为统一的文本块 ```

四、图像预处理模块开发

档案数字化入库实操指南,零基础搭建OCR识别与存储系统

扫描件通常存在噪点、倾斜或光照不均,直接识别准确率极低。创建 image_processor.py,编写代码将图片转为灰度、进行二值化处理,这是提升识别率的关键步骤。

```python import os from PIL import Image, ImageEnhance import config def ensure_dir(directory): if not os.path.exists(directory): os.makedirs(directory) def preprocess_image(image_path, output_path): """ 对图像进行灰度化、二值化和对比度增强处理 """ try: img = Image.open(image_path) 1. 转为灰度图 img = img.convert('L') 2. 增强对比度 enhancer = ImageEnhance.Contrast(img) img = enhancer.enhance(2.0) 3. 二值化处理 (阈值设为 170,可根据实际扫描件调整) 像素值大于170的设为白(255),小于的设为黑(0) threshold = 170 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(255) img = img.point(table, '1') 保存处理后的图片 img.save(output_path) return True except Exception as e: print(f"图像处理失败: {image_path}, 错误: {e}") return False def batch_process(): ensure_dir(config.PROCESSED_DIR) files = [f for f in os.listdir(config.INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg'))] processed_files = [] for filename in in files: src_path = os.path.join(config.INPUT_DIR, filename) dst_path = os.path.join(config.PROCESSED_DIR, f"processed_{filename}") if preprocess_image(src_path, dst_path): processed = {'original': filename, 'processed': f"processed_{filename}"} processed_files.append(processed) print(f"已处理: {filename}") return processed_files ```

五、数据库管理模块开发

创建 db_manager.py,负责初始化数据库和将识别结果入库。使用SQLite无需配置服务器,适合单机或小团队使用。我们将建立一张 archives 表,存储文件名、识别文本和入库时间。

```python import sqlite3 import os import datetime import config def init_db(): """初始化数据库,创建表""" ensure_dir = lambda d: os.makedirs(d, exist_ok=True) ensure_dir(config.DATA_DIR) conn = sqlite3.connect(config.DB_PATH) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_name TEXT NOT NULL, ocr_content TEXT, create_time TEXT ) ''') conn.commit() conn.close() print("数据库初始化完成。") def insert_archive(file_name, ocr_content): """插入单条档案记录""" conn = sqlite3.connect(config.DB_PATH) cursor = conn.cursor() create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') cursor.execute(''' INSERT INTO archives (file_name, ocr_content, create_time) VALUES (?, ?, ?) ''', (file_name, ocr_content, create_time)) conn.commit() conn.close() print(f"已入库: {file_name}") def query_all(): """查询所有档案""" conn = sqlite3.connect(config.DB_PATH) cursor = conn.cursor() cursor.execute('SELECT id, file_name, create_time FROM archives ORDER BY id DESC') results = cursor.fetchall() conn.close() return results ```

六、OCR识别与核心业务逻辑

创建 main.py,这是系统的入口。它将串联预处理、OCR识别和数据存储三个环节。注意,这里必须显式指定Tesseract的可执行文件路径,否则Windows环境下会报错。

```python import pytesseract import config from image_processor import batch_process from db_manager import init_db, insert_archive 设置Tesseract路径,仅Windows需要,Mac/Linux可忽略 if config.TESSERACT_PATH and os.path.exists(config.TESSERACT_PATH): pytesseract.pytesseract.tesseract_cmd = config.TESSERACT_PATH def run_ocr_on_image(image_path): """ 调用Tesseract进行文字识别 """ try: config参数:lang='chi_sim+eng' 指定中英文混合识别 text = pytesseract.image_to_string( Image.open(image_path), lang=config.OCR_LANG, config=f'--psm {config.PAGE_SEG_MODE}' ) return text.strip() except Exception as e: print(f"OCR识别出错: {image_path}, 错误: {e}") return "" def main(): print("=== 档案数字化入库系统启动 ===") 1. 初始化数据库 init_db() 2. 批量预处理图像 print("开始图像预处理...") file_list = batch_process() if not file_list: print("未发现待处理文件,请将图片放入 input_files 目录。") return 3. 循环执行OCR与入库 print("开始OCR识别与入库...") for item in file_list: processed_img_path = os.path.join(config.PROCESSED_DIR, item['processed']) 执行识别 content = run_ocr_on_image(processed_img_path) if content: 入库 insert_archive(item['original'], content) else: print(f"跳过空内容文件: {item['original']}") print("=== 所有任务处理完成 ===") if __name__ == "__main__": 导入Image用于PIL操作 from PIL import Image main() ```

七、运行与测试验证

至此,所有代码已编写完毕。现在进行实际操作验证。

1. 准备测试数据

找几张包含中文和数字的档案扫描件(JPG或PNG格式),放入项目的 input_files 文件夹中。建议图片分辨率不低于300DPI以保证识别效果。

2. 执行程序

在项目根目录下打开终端,运行以下命令启动系统:

python main.py

3. 观察输出结果

终端将依次显示图像处理进度、OCR识别进度和入库状态。如果一切正常,你将看到“已入库”的提示。

4. 验证数据存储

我们可以使用Python命令行快速查看数据库中的数据,确认入库是否成功。在终端执行:

```python python ``` ```python import sqlite3 conn = sqlite3.connect('data/archives.db') cursor = conn.cursor() cursor.execute("SELECT FROM archives") print(cursor.fetchall()) conn.close() exit() ```

如果屏幕打印出了包含你档案文字内容的列表,元组中包含文件名、识别出的文本和时间戳,说明档案数字化与入库系统已成功落地。你可以根据实际需求,修改 image_processor.py 中的二值化阈值,或调整 config.py 中的PSM参数以获得更精准的识别效果。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统