一、开发环境与核心依赖库安装
在进行拉萨档案数字化处理时,我们需要构建一个基于Python的高效处理环境。该环境需要支持图像处理、OCR识别(藏汉双语)以及数据存储功能。请严格按照以下步骤配置基础环境。
1. 安装Python及基础库
确保系统已安装Python 3.8或更高版本。推荐使用Conda创建虚拟环境以隔离依赖。打开终端执行以下命令:
```bash
conda create -n lhasa_archive python=3.9
conda activate lhasa_archive
```
接下来,安装图像处理与OCR核心库。这里我们使用OpenCV进行图像预处理,Pillow处理图像格式,pytesseract调用OCR引擎:
```bash
pip install opencv-python pillow pytesseract numpy sqlalchemy
```
2. 安装Tesseract OCR引擎
Tesseract是OCR识别的核心引擎。针对拉萨档案,需要同时配置中文和藏文的语言包。
Windows系统安装:
访问Tesseract官方GitHub发布页下载安装包:https://github.com/UB-Mannheim/tesseract/wiki
下载后安装,务必记住安装路径(默认为 C:\Program Files\Tesseract-OCR\tesseract.exe)。
Linux系统安装:
```bash
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-tibetan
```
下载藏文语言数据:
如果Linux源中没有藏文包,需手动下载traineddata语言文件。访问以下地址下载 tib.traineddata:
https://github.com/tesseract-ocr/tessdata/raw/main/tib.traineddata

下载后,将该文件复制到Tesseract的tessdata目录中:
```bash
sudo mv tib.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
```
二、档案图像采集与预处理模块
档案数字化第一步是获取高质量图像。本节提供代码实现自动扫描或读取文件夹图片,并进行去噪、二值化处理,提升OCR识别率。
1. 图像预处理核心代码
创建文件 preprocessor.py。该模块包含灰度化、二值化和去噪功能。针对老旧档案可能存在的霉斑或折痕,我们使用高斯模糊与阈值处理结合。
```python
import cv2
import numpy as np
import os
class ImagePreprocessor:
def __init__(self, output_dir='./processed_images'):
self.output_dir = output_dir
if not os.path.exists(self.output_dir):
os.makedirs(self.output_dir)
def process_image(self, 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.bilateralFilter(gray, 9, 75, 75)
3. 二值化处理 (使用Otsu算法自动计算阈值)
_, binary = cv2.threshold(denoised, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
4. 保存处理后的图像
filename = os.path.basename(image_path)
save_path = os.path.join(self.output_dir, f"proc_{filename}")
cv2.imwrite(save_path, binary)
return save_path
def batch_process(self, input_dir):
processed_files = []
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff')):
full_path = os.path.join(input_dir, filename)
result = self.process_image(full_path)
if result:
processed_files.append(result)
return processed_files
```
三、藏汉双语OCR识别技术实现
拉萨档案的特殊性在于包含大量藏文。Tesseract支持多语言组合识别。我们需要配置识别引擎,指定藏文和中文的语言参数。
1. 配置OCR识别器
创建文件 ocr_engine.py。请注意,Windows用户需手动指定 tesseract_cmd 路径。
```python
import pytesseract
from PIL import Image
import os
如果是Windows系统,取消下面注释并修改路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
class LhasaOCR:
def __init__(self):
配置参数:--psm 6 表示假设为单块文本,适合文档页
lang='chi_sim+tib' 指定简体中文和藏文
self.custom_config = r'--psm 6 --oem 3'
self.lang = 'chi_sim+tib'
def extract_text(self, image_path):
try:
打开图像
img = Image.open(image_path)
执行OCR识别
text = pytesseract.image_to_string(img, lang=self.lang, config=self.custom_config)
return text.strip()
except Exception as e:
print(f"识别 {image_path} 失败: {e}")
return ""
def batch_extract(self, image_list):
results = []
for img_path in image_list:
content = self.extract_text(img_path)
results.append({
'file_path': img_path,
'content': content,
'status': 'success' if content else 'empty'
})
return results
```
四、档案元数据存储与归档方案
识别后的文本需要结构化存储。为了实现零门槛落地,我们使用SQLite作为本地数据库,无需安装数据库服务。设计表结构存储文件名、路径、识别文本和归档时间。
1. 数据库模型与操作
创建文件 database.py。此模块负责数据库初始化及数据插入。
```python
import sqlite3
import datetime
class ArchiveDB:
def __init__(self, db_name='lhasa_archive.db'):
self.conn = sqlite3.connect(db_name)
self.create_table()
def create_table(self):
cursor = self.conn.cursor()
创建档案表
cursor.execute('''
CREATE TABLE IF NOT EXISTS archives (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_name TEXT NOT NULL,
file_path TEXT NOT NULL,
ocr_content TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
self.conn.commit()
def insert_record(self, file_name, file_path, ocr_content):
cursor = self.conn.cursor()
cursor.execute('''
INSERT INTO archives (file_name, file_path, ocr_content, create_time)
VALUES (?, ?, ?, ?)
''', (file_name, file_path, ocr_content, datetime.datetime.now()))
self.conn.commit()
print(f"已归档: {file_name}")
def close(self):
self.conn.close()
```
五、全流程自动化脚本整合
我们将上述模块整合为一个主执行脚本 main.py。该脚本将自动扫描指定文件夹下的原始档案,完成预处理、OCR识别并入库。
1. 主程序入口
请确保当前目录下有一个名为 raw_archives 的文件夹,并将待处理的档案图片放入其中。
```python
import os
from preprocessor import ImagePreprocessor
from ocr_engine import LhasaOCR
from database import ArchiveDB
def main():
配置路径
raw_input_dir = './raw_archives' 原始档案存放目录
processed_dir = './processed_images' 处理后图片存放目录
print(">>> 拉萨档案数字化系统启动 <<<")
1. 初始化数据库
db = ArchiveDB()
2. 初始化预处理器
processor = ImagePreprocessor(output_dir=processed_dir)
3. 初始化OCR引擎
ocr = LhasaOCR()
检查输入目录
if not os.path.exists(raw_input_dir):
print(f"错误:未找到输入目录 {raw_input_dir},请创建并放入图片。")
return
print(f"正在扫描目录: {raw_input_dir} ...")
4. 批量预处理图像
processed_images = processor.batch_process(raw_input_dir)
print(f"预处理完成,共处理 {len(processed_images)} 张图片。")
5. 批量OCR识别
print("正在进行藏汉双语OCR识别...")
ocr_results = ocr.batch_extract(processed_images)
6. 数据入库
print("正在将数据归档至数据库...")
count = 0
for item in ocr_results:
if item['status'] == 'success':
file_name = os.path.basename(item['file_path'])
db.insert_record(file_name, item['file_path'], item['content'])
count += 1
print(f">>> 处理完成。成功归档 {count} 条档案数据。数据库文件: lhasa_archive.db <<<")
db.close()
if __name__ == "__main__":
main()
```
2. 查询与验证
运行完成后,可以使用SQLite命令行工具查看结果:
```bash
sqlite3 lhasa_archive.db "SELECT file_name, substr(ocr_content, 1, 50) as preview FROM archives LIMIT 5;"
```
该命令将列出前5条归档记录的文件名和文本预览,验证数字化内容是否准确。通过以上步骤,您已成功在本地搭建了一套完整的拉萨档案数字化处理系统,涵盖了从图像优化到藏汉双语识别及数据归档的全过程。