在进行数字化操作前,必须配置好Python运行环境及OCR识别引擎。本文以Windows 10/11系统为例,提供完整的安装路径。
访问Python官网下载3.9及以上版本安装包。安装过程中务必勾选"Add Python to PATH"选项,这能避免后续手动配置环境变量的麻烦。安装完成后,在CMD终端输入以下命令验证:
python --version
若返回版本号,说明环境配置成功。接着安装必要的依赖库,打开终端执行:
pip install pytesseract pillow opencv-python
Tesseract是OCR识别的核心。下载tesseract-ocr-w64-setup-5.3.0.exe(以5.3.0版本为例)。安装路径建议不要包含中文或空格,例如直接安装在C:\Tesseract-OCR。在安装组件选择界面,务必勾选Chinese (Simplified)语言包,否则无法识别中文内容。
高质量的源图像是识别准确率的基石。请使用支持ADF(自动进稿器)的高速扫描仪。
在扫描软件中设置以下关键参数:
扫描后的图像常带有噪点,需使用OpenCV进行灰度化和二值化处理。以下代码可直接运行:
```python
import cv2
import os
def preprocess_image(input_path, output_path):
读取图像
image = cv2.imread(input_path)
转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
二值化处理,阈值设为0,使用OTSU自动计算最佳阈值
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
保存处理后的图像
cv2.imwrite(output_path, binary)
批量处理示例
input_folder = "scans/"
output_folder = "processed/"
for filename in os.listdir(input_folder):
if filename.endswith(".tif"):
preprocess_image(os.path.join(input_folder, filename), os.path.join(output_folder, filename))
```
将图像转化为文字后,需利用正则表达式精准提取关键字段。
编写Python脚本调用Tesseract。注意必须指定tesseract_cmd路径,否则程序会报错。
```python
import pytesseract
import re
指定Tesseract安装路径,请根据实际安装位置修改
pytesseract.pytesseract.tesseract_cmd = r'C:\Tesseract-OCR\tesseract.exe'
def extract_license_info(image_path):
读取图片并识别,lang='chi_sim'指定简体中文库
text = pytesseract.image_to_string(image_path, lang='chi_sim')
data = {}
提取单位名称(通常在"单位名称"或"名称"字段后)
name_pattern = re.compile(r'(单位名称|名称)[::]\s(.?)\n')
name_match = name_pattern.search(text)
data['unit_name'] = name_match.group(2).strip() if name_match else "未识别"
提取许可证号(格式如:新出印证字第XXXX号)
license_pattern = re.compile(r'(新出印证字第[0-9]+号)')
license_match = license_pattern.search(text)
data['license_no'] = license_match.group(1) if license_match else "未识别"
提取有效期(格式如:2023年01月01日至2028年01月01日)
date_pattern = re.compile(r'(\d{4}年\d{2}月\d{2}日.\d{4}年\d{2}月\d{2}日)')
date_match = date_pattern.search(text)
data['validity_period'] = date_match.group(1) if date_match else "未识别"
return data
```
OCR识别结果常包含空格和换行符干扰。在提取后需执行清洗操作:
string.replace(" ", "")。使用SQLite作为本地数据库,无需配置服务器,单文件存储,适合中小微企业档案管理。

创建数据库表结构,包含所有关键字段及校验状态。
```python
import sqlite3
def init_db():
conn = sqlite3.connect('license_archive.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS licenses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
unit_name TEXT NOT NULL,
license_no TEXT UNIQUE,
validity_period TEXT,
file_path TEXT,
status TEXT DEFAULT 'active'
)
''')
conn.commit()
conn.close()
```
将提取的结构化数据写入数据库,并处理重复数据异常。
```python
def save_to_db(data, file_path):
conn = sqlite3.connect('license_archive.db')
cursor = conn.cursor()
try:
cursor.execute("""
INSERT INTO licenses (unit_name, license_no, validity_period, file_path)
VALUES (?, ?, ?, ?)
""", (data['unit_name'], data['license_no'], data['validity_period'], file_path))
conn.commit()
print(f"成功入库:{data['unit_name']}")
except sqlite3.IntegrityError:
print(f"数据重复,跳过:{data['license_no']}")
finally:
conn.close()
```
将上述环节串联,形成一键式处理流程。
创建main.py,整合扫描、识别、存储步骤。
```python
if __name__ == "__main__":
初始化数据库
init_db()
指定处理后的图片文件夹
source_dir = "processed/"
for filename in os.listdir(source_dir):
full_path = os.path.join(source_dir, filename)
if filename.endswith(".tif"):
1. 提取信息
info = extract_license_info(full_path)
2. 简单校验
if "未识别" in info.values():
print(f"警告:文件 {filename} 识别不完整,请人工复核。")
3. 存入数据库
save_to_db(info, full_path)
```
在终端执行python main.py。程序会自动遍历文件夹,完成所有许可证的数字化入库。完成后,使用SQLite工具如DB Browser for SQLite打开license_archive.db,执行SELECT FROM licenses;查看结果。若出现乱码,请检查Tesseract版本是否与语言包匹配,或重新下载chi_sim.traineddata文件放入tessdata目录。
档案数字化,政府档案保密要求高怎么办?别慌,这有“通关秘籍”