一、环境搭建与核心工具安装
在进行档案数字化之前,必须先构建一个稳定且支持中文识别的本地环境。本文采用Python作为开发语言,配合Tesseract OCR引擎实现离线文字识别。请严格按照以下步骤操作,不要跳过任何环节。
1. 安装Python环境
访问Python官网下载Windows安装包。下载地址:https://www.python.org/downloads/。下载最新版(3.10以上)安装包,运行安装程序。在安装向导的第一屏,务必勾选底部的"Add Python to PATH"选项,然后点击"Install Now"直至完成。
2. 安装Tesseract OCR引擎
Tesseract是OCR的核心引擎。对于Windows用户,不要使用默认的pip安装,必须下载独立的安装包以获取依赖库。
下载地址:https://github.com/UB-Mannheim/tesseract/wiki。点击"tesseract-ocr-w64-setup-5.x.x.exe"下载。安装时,路径建议保持默认(C:\Program Files\Tesseract-OCR),或者在后续代码中修改为你指定的路径。安装过程中,在"Choose Components"界面,务必展开"Additional language data",勾选Chinese (Simplified)和English,否则无法识别中文。
3. 安装Python依赖库
打开CMD(命令提示符)或PowerShell,依次执行以下命令安装所需库:
```bash
pip install pytesseract pillow opencv-python
```
- pytesseract:Python的Tesseract封装包。
- pillow:用于图像处理(打开、保存、转换格式)。
- opencv-python:用于高级图像预处理(去噪、二值化)。
4. 配置中文语言包
如果在安装Tesseract时漏选了中文,或者需要更新语言包,需手动下载chi_sim.traineddata文件。

下载地址:https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata。下载后,将该文件放入Tesseract的安装目录下的tessdata文件夹中(通常路径为:C:\Program Files\Tesseract-OCR\tessdata)。
二、图像预处理标准化流程
扫描件或拍照的档案往往存在噪点、倾斜或光照不均,直接识别准确率极低。必须通过代码进行标准化处理。新建一个文件preprocess.py,输入以下代码:
```python
import cv2
import numpy as np
def preprocess_image(image_path):
读取图像
img = cv2.imread(image_path)
if img is None:
print(f"错误:无法读取图像 {image_path}")
return None
1. 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
2. 去噪(双边滤波在保持边缘的同时去噪)
denoised = cv2.fastNlMeansDenoising(gray, h=10)
3. 二值化处理(自适应阈值,比固定阈值更适应光照变化)
这里使用OTSU自动寻找最佳阈值,或者使用自适应阈值
binary = cv2.adaptiveThreshold(
denoised, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2
)
return binary
```
操作细节说明:上述代码使用了自适应阈值处理,这对于不同光照条件下拍摄的纸质档案至关重要。它能将文字部分转化为纯黑,背景转化为纯白,极大提升OCR识别率。
三、OCR文字识别核心逻辑
接下来编写识别模块。我们需要指定Tesseract的路径(如果是Windows)并配置识别参数。新建ocr_engine.py:
```python
import pytesseract
from PIL import Image
import os
如果是Windows系统,必须手动指定tesseract.exe路径
请根据你的实际安装路径修改,注意路径前的r表示原始字符串,避免转义
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def extract_text_from_image(image_object):
try:
配置识别参数:--psm 6 表示假设图像为统一的文本块
lang='chi_sim+eng' 表示同时识别中文简体和英文
custom_config = r'--psm 6 --oem 3'
text = pytesseract.image_to_string(image_object, lang='chi_sim+eng', config=custom_config)
return text
except Exception as e:
return f"识别失败: {str(e)}"
```
参数详解:--psm 6是页面分割模式,6代表"假设是一个统一的文本块",适合处理已经裁剪好的单页档案。--oem 3表示使用默认的LSTM神经网络引擎,这是目前准确率最高的模式。
四、结构化数据存储与归档
识别出的文字不能仅停留在控制台输出,必须保存为结构化数据以便检索。我们将结果保存为JSON格式,包含文件名、识别时间和文本内容。
```python
import json
from datetime import datetime
def save_to_json(data_dict, output_file="digital_archive.json"):
检查文件是否存在,存在则读取,不存在则创建新列表
if os.path.exists(output_file):
with open(output_file, 'r', encoding='utf-8') as f:
try:
archives = json.load(f)
except json.JSONDecodeError:
archives = []
else:
archives = []
添加新数据
archives.append(data_dict)
写入文件
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(archives, f, ensure_ascii=False, indent=4)
print(f"数据已归档至: {output_file}")
```
五、全流程自动化批量处理脚本
将上述模块整合,编写一个主程序main.py,实现拖入文件夹即可自动完成所有图片的数字化。请确保preprocess.py、ocr_engine.py和本文件在同一目录下。
```python
import os
import cv2
import glob
导入之前编写的模块(假设在同一目录下,或者将代码合并)
为了方便复制,这里将核心逻辑合并在一个完整脚本中直接运行
import pytesseract
import json
from datetime import datetime
from PIL import Image
================= 配置区域 =================
设置Tesseract路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
输入文件夹:请将你的档案图片放在此文件夹中
INPUT_FOLDER = r'./scan_files'
输出结果文件
OUTPUT_JSON = r'./archive_result.json'
===========================================
def process_single_image(img_path):
1. 读取与预处理
img = cv2.imread(img_path)
if img is None:
return None
灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
2. 转换为PIL Image对象供Tesseract使用
pil_img = Image.fromarray(binary)
3. OCR识别
try:
--psm 3 为默认自动分页模式,适合全页识别
text = pytesseract.image_to_string(pil_img, lang='chi_sim+eng', config='--psm 3')
except Exception as e:
text = f"Error: {e}"
return text.strip()
def main():
检查输入文件夹是否存在,不存在则创建
if not os.path.exists(INPUT_FOLDER):
os.makedirs(INPUT_FOLDER)
print(f"已创建输入文件夹: {INPUT_FOLDER},请将图片放入其中后重新运行。")
return
支持的图片格式
extensions = ['.png', '.jpg', '.jpeg', '.bmp', '.tiff']
files_grabbed = []
for ext in extensions:
files_grabbed.extend(glob.glob(os.path.join(INPUT_FOLDER, ext)))
if not files_grabbed:
print(f"在 {INPUT_FOLDER} 中未找到图片文件。")
return
existing_data = []
if os.path.exists(OUTPUT_JSON):
with open(OUTPUT_JSON, 'r', encoding='utf-8') as f:
try:
existing_data = json.load(f)
except:
existing_data = []
print(f"开始处理,共发现 {len(files_grabbed)} 个文件...")
for img_path in files_grabbed:
filename = os.path.basename(img_path)
print(f"正在处理: {filename} ...")
content = process_single_image(img_path)
构建数据条目
record = {
"source_file": filename,
"scan_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"content": content
}
existing_data.append(record)
保存结果
with open(OUTPUT_JSON, 'w', encoding='utf-8') as f:
json.dump(existing_data, f, ensure_ascii=False, indent=4)
print(f"处理完成!所有数据已保存至 {os.path.abspath(OUTPUT_JSON)}")
if __name__ == "__main__":
main()
```
六、操作落地执行步骤
- 创建目录:在电脑D盘或任意位置新建一个文件夹,命名为
DigitalArchive。
- 保存代码:在文件夹内新建文本文档,将上述“五、全流程自动化批量处理脚本”中的代码完整复制进去,保存并将文件名重命名为
run.py。
- 准备素材:在
DigitalArchive文件夹内新建一个子文件夹,命名为scan_files。将你需要数字化的档案图片(jpg或png格式)全部复制粘贴到这个scan_files文件夹中。
- 修改路径(可选):如果你的Tesseract没有安装在默认路径,请用记事本打开
run.py,找到第12行,修改引号内的路径为你实际的tesseract.exe路径。
- 运行程序:在
DigitalArchive文件夹的空白处按住Shift键并右键,选择“在此处打开PowerShell窗口”。输入命令:python run.py并回车。
- 查看结果:程序运行完毕后,文件夹内会生成
archive_result.json文件。使用记事本或VS Code打开,即可看到所有图片已转换为可检索的文本数据。