☰
基于机器学习的古籍文字识别与断句校正系统
2026/11/5 5:32:47 网站建设 项目流程

基于机器学习的古籍文字识别与断句校正系统

1. 项目定位

本仓库实现一套面向古籍页面图像的端到端可复现流水线:从上传图卷、版面归一与预处理、深度学习文字识别(OCR)、文本整理、勘校与异体处理、句读标注(深度学习模型与规则后处理),到多格式导出与微调 / 标注数据闭环。系统以任务(卷宗)为粒度管理全流程状态;登录用户仅能访问本人任务(管理员可查看全部),便于课题演示、文章实验与多用户隔离。

模型与调优原则(本课题约定)

  • 不自研 backbone 网络:识文、句读均依托第三方开源/预训练模型(PaddleOCR、HuggingFace 上的 BERT 类 TokenClassification 等)做推理。
  • 线上系统:默认只做加载权重 + 前向推理;不在 Web 内嵌 GPU 训练作业。
  • 后期调优:句读支持离线手动微调——由接口导出业务数据或管理员标注 JSONL,在独立 Python 环境中用仓库脚本继续训练,产出新目录后通过MODU_SEGMENT_MODEL_DIR切换部署。

技术形态:Vue 3 单页应用调用Flask REST API(JWT 鉴权),数据落SQLite与本地uploads//outputs/;PaddleOCR、句读 Transformers 等按依赖与权重可选启用,缺失时走明确降级(例如无 Paddle 时可手改勘校正文继续后续步骤)。


2. 功能总览

2.1 用户与权限

能力说明
注册 / 登录POST /api/v1/auth/register、/login;返回 JWT(Bearer)
当前用户GET /api/v1/auth/me;前端启动时刷新is_admin等字段
任务隔离普通用户仅见、仅改user_id为本人的任务
内置管理员启动时写入 SQLite:默认admin/admin(可用MODU_ADMIN_*覆盖);已存在则不重置密码
账号设置PUT /api/v1/auth/me:修改自己的用户名、密码
管理员可访问全部任务;用户管理(授予/取消is_admin)、模型评估、数据集标注、微调导出

2.2 任务与资源管理

能力说明
新建任务multipart上传 JPG/PNG;服务端压缩大图、图像预处理、预览与元数据落库
任务列表卷宗页浏览;按status显示进度文案
任务详情GET /api/v1/tasks/:id;含preprocessed_text、勘校/句读元数据等
断点续作卷宗「继续」按状态跳转对应步骤;刷新后通过sessionStorage+ 详情接口恢复
任务删除删除记录及关联原图、预览文件
简易统计GET /api/v1/tasks/:id/stats:字数、行数、低置信字格等

任务状态(status)与续作路径

status含义续作默认进入
done/pending已上传,待识文识别文字
ocr_done已识文,待整理整理文本
preprocessed已整理,待改正改正文字
corrected已改正,待加标点加标点
segment_done可加标点或导出导出

2.3 图像与版面(传统视觉)

能力说明
上传压缩过长边缩放、PNG 大图可转 JPEG,减小体积(upload_compress元数据写入预处理记录)
图像增强灰度、去噪、二值化、倾斜校正等
版式主向估计粗判横排 / 竖排;竖排时旋转到统一处理空间
行级 / 字级分割行带与单字条带(投影法;粘连字块为粗分割,文章中需说明局限)
预处理元数据行带、字框、预览文件等;导出 JSON 时一并携带

2.4 文字识别(机器学习)

能力说明
深度学习 OCRPaddleOCR(依赖paddlepaddle 2.6.2+ paddleocr 2.7.3);未安装时paddle_ready: false,可手改勘校
置信度与存疑字格级置信度;前端低置信高亮
行级坐标line_results含每行box与字符信息
识文后整理识文成功且 Paddle 就绪时,可自动触发一次文本预处理

2.5 文本整理(预处理)

能力说明
自动整理POST .../preprocess-text:Unicode 规范化、空白/换行规整等(TextPreprocessService)
人工修订PUT .../preprocess-text保存preprocessed_text
勘校输入优先级自动勘校优先使用preprocessed_text,其次raw_text

2.6 文本勘校(纠错子系统)

能力说明
自动勘校异体/混淆映射;可选 OpenCC 繁转简
人工勘校PUT .../corrections;无识文结果也可手输全文(适配 Paddle 未装场景)
勘校事件写入corrections;POST .../feedbacks合并用户反馈

2.7 句读(机器学习 + 规则)

能力说明
深度句读模型本地 HuggingFace 格式权重(默认models_weights/sikubert-segment);否则降级并提示
规则后处理标点校验与修正;环境变量控制后处理、七言节奏、标点风格等
自动 / 人工句读POST/PUT .../segmentation;手改非空时status置为segment_done
句读元数据segment_meta:校验警告、模型是否加载等

2.8 导出与数据闭环

能力说明
多格式导出TXT(句读稿优先)、DOCX、JSON(含preprocessed_text、坐标与元数据);须带 JWT,前端 blob 下载
用户反馈POST .../feedbacks
微调数据导出管理员GET /api/v1/datasets/finetune(NDJSON);参数limit、only_segmented
标注数据导出管理员GET /api/v1/admin/annotations/export(JSONL)

2.9 管理员能力

能力说明
模型效果评估POST /api/v1/admin/eval/run、GET .../eval/latest;结合data/eval_gold.jsonl与任务快照计算指标
断句数据集标注样本 CRUD、POST .../annotations/from-task/:id从任务导入、筛选与导出 JSONL
导航入口顶栏「模型评估」「数据集标注」(仅is_admin)

2.10 前端交互(六步流水线)

步骤路由说明
① 上传图片/upload拖拽/选择 JPG、PNG
② 识别文字/recognizePaddle OCR;低置信可视化
③ 整理文本/preprocess需已有识文结果(或测试种子数据)
④ 改正文字/correct自动/人工勘校
⑤ 加标点/segment自动句读 + 人工修订
⑥ 导出/exportTXT / Word / JSON;管理员另可见「全部任务汇总」

另:卷宗/tasks、登录/注册、侧栏步骤导航(StepSidebar)。界面文案为简体中文;古籍正文可为繁体。

2.11 刻意不纳入当前版本(可作文章展望)

  • Web 内一键 GPU 训练 / 自动调度微调(句读见scripts/finetune_token_classification.py)
  • OCR 领域重训练(使用飞桨官方工具链,再改app/ml/ocr_model.py加载逻辑)
  • 外置标注平台(如 Label Studio);本系统采用内置 Vue 标注页
  • 分语体多模型路由、与 Paddle 并行的 TrOCR 管线等

3. 技术栈与架构要点

层级技术职责
前端Vue 3、Vite、Pinia、Vue Router、Element Plus、Axios六步流水线、JWT 拦截器、卷宗与管理员页
后端Flask 3、SQLAlchemy、Flask-CORS、PyJWT/api/v1、任务与用户 ORM、推理编排
图像OpenCV、Pillow预处理、上传压缩
OCRPaddleOCR(可选)行级文本与 box
句读PyTorch、Transformers(可选)TokenClassification
勘校OpenCC、映射表繁简与异体/混淆
评估scikit-learn 等EvalService指标
存储SQLite、本地目录users、tasks、annotation_samples、eval_report等

数据库升级:SQLite 无自动迁移脚本;app/__init__.py对旧库补列(如user_id、preprocessed_text)。结构大改时可删除modu.db后由create_all()重建。旧任务若user_id为空,仅管理员可访问。


4. 目录结构

python-gushici-corrective/ ├── 项目说明.md # 本文档 ├── 项目设计方案.md ├── scripts/ │ └── run_all_tests.sh # 一键:后端 pytest + 前端 E2E ├── mac/、windows/ # 部署手册、setup_and_run、模型下载步骤 ├── modu-backend/ │ ├── app.py # 启动入口(须在本目录执行) │ ├── requirements.txt │ ├── requirements-dev.txt # pytest 等 │ ├── tests/ # pytest;说明见 tests/README.md │ ├── scripts/ │ │ ├── run_tests.sh │ │ ├── e2e_server.sh # Playwright 临时后端 │ │ ├── README_FINETUNE.md │ │ ├── build_segment_train_jsonl.py │ │ └── finetune_token_classification.py │ ├── app/ │ │ ├── auth/ # JWT 签发与装饰器 │ │ ├── api/v1/ │ │ │ ├── auth.py │ │ │ ├── tasks.py │ │ │ ├── datasets.py │ │ │ ├── admin_eval.py │ │ │ └── admin_annotations.py │ │ ├── services/ # 导出、勘校、预处理、评估、压缩等 │ │ └── ml/ # OCR、句读模型封装 │ ├── data/eval_gold.jsonl │ ├── models_weights/ # 句读权重(不进 Git,见下载步骤 md) │ ├── uploads/、outputs/ │ └── modu.db └── modu-frontend/ ├── e2e/ # Playwright 用例 ├── src/views/ # 各流水线页 + 登录 + 管理员页 └── package.json # test:e2e

5. HTTP API 契约(摘要)

统一前缀/api/v1;除注册/登录外,业务接口需请求头Authorization: Bearer <token>。

5.1 认证

方法路径说明
POST/auth/register注册(普通用户;不可占用admin用户名)
POST/auth/login登录
GET/auth/me当前用户(需 JWT)
PUT/auth/me修改自己的用户名 / 密码

5.2 任务(须 JWT;任务按用户隔离)

方法路径说明
GET/POST/tasks列表 / 创建(multipart 上传)
GET/DELETE/tasks/:id详情 / 删除
GET/tasks/:id/stats统计
POST/tasks/:id/ocr识文
POST/PUT/tasks/:id/preprocess-text自动/人工文本整理
POST/tasks/:id/corrections/auto自动勘校
PUT/tasks/:id/corrections人工勘校
POST/PUT/tasks/:id/segmentation自动/人工句读
GET/tasks/:id/export?format=txt|docx|json导出附件
POST/tasks/:id/feedbacks用户反馈

5.3 数据集与管理员(须 JWT + 管理员)

方法路径说明
GET/datasets/finetune任务快照 NDJSON;limit、only_segmented
POST/admin/eval/run执行评估;body 可选scope: all|mine
GET/admin/eval/latest最近一次评估报告
GET/POST/admin/annotations列表 / 新建样本
POST/admin/annotations/from-task/:task_id从任务导入
GET/PUT/DELETE/admin/annotations/:id单条 CRUD
GET/admin/annotations/export标注 JSONL
GET/admin/users用户列表
PUT/admin/users/:id设置is_admin(内置 admin 不可降权)

5.4 静态资源

  • GET /uploads/<path>:预处理预览图等。

字段与请求体细节以《项目设计方案》及app/api/v1/*.py源码为准。


6. 配置与环境变量(后端)

变量作用
MODU_PORTHTTP 端口(默认与前端代理一致,如 8800)
MODU_SECRET_KEYFlask 密钥(生产务必覆盖)
MODU_JWT_SECRETJWT 签名密钥(默认同SECRET_KEY)
MODU_JWT_EXPIRE_HOURSToken 有效期(默认 168 小时)
MODU_ADMIN_USERNAME内置管理员用户名(默认admin)
MODU_ADMIN_PASSWORD内置管理员初始密码(仅首次创建账号时写入)
MODU_DATABASE_URLSQLAlchemy 连接串
MODU_SEGMENT_MODEL_DIR句读模型目录
MODU_FINETUNE_EXPORT_MAX微调导出单次上限(默认 5000)
MODU_UPLOAD_MAX_EDGE上传压缩最长边像素
MODU_UPLOAD_JPEG_QUALITYJPEG 质量
MODU_SEGMENT_POSTPROCESS句读后处理开关
MODU_POETRY_7_SPLIT七言节奏(如2_5)
MODU_SEGMENT_PUNCT_MODE句读标点风格(如A)
MODU_EVAL_GOLD_PATH评估 gold 文件路径

前端:VITE_BACKEND_URL(如.env.development)指向后端基址。


7. 自动化测试

业务功能以pytest(API/服务)与Playwright(浏览器 E2E)覆盖;不替代Paddle 识文准确率与离线微调脚本的现场验证。

7.1 一键自测(仓库根目录)

bashscripts/run_all_tests.sh

7.2 分模块

# 仅后端(约 23 项,mock OCR/句读,不依赖 Paddle)cdmodu-backend&&bashscripts/run_tests.sh# 仅前端 E2E(8 项,自动起临时后端 + Vite)cdmodu-frontend&&CI=1npmrun test:e2e

7.3 覆盖范围说明

类别已覆盖(摘要)
后端注册/登录/鉴权、任务 CRUD/统计/反馈、全流程 API(mock ML)、导出三格式、管理员评估与标注、微调 NDJSON
前端注册登录、六步页与导出、卷宗删除、管理员页与权限拦截
未自动化Paddle 识文效果、20MB 超限/坏图、压测、finetune_*脚本执行

详细用例索引见modu-backend/tests/README.md。
TESTING=True时存在内部接口POST /tasks/:id/__test/seed(仅 pytest/E2E 后端),生产TESTING=False不注册。


8. 相关文档与操作指引

文档或入口用途
项目设计方案.mdAPI 表、路由、数据模型
modu-backend/tests/README.md测试命令与功能对照表
modu-backend/scripts/README_FINETUNE.md句读微调数据格式与训练命令
mac/项目部署手册_macOS.md、windows/项目部署手册_Windows.md环境安装与启动
mac/必须执行__模型文件下载步骤.md、windows/…克隆后下载句读权重与 Paddle 缓存
mac/手动微调执行步骤.md、windows/…离线微调逐步命令

8.1 环境与安装提示(摘要)

  • 推荐Python 3.12创建modu-backend/.venv,安装requirements.txt;Windows 安装时勾选Add Python to PATH。
  • 句读权重与 Paddle 按各平台「必须执行__模型文件下载步骤」操作;权重目录默认modu-backend/models_weights/sikubert-segment。
  • 前端:cd modu-frontend && npm install;开发时npm run dev,代理/api与/uploads至后端。
  • 句读微调建议在独立 venv 使用requirements-train.txt,避免与 Paddle 包冲突。

本文档不展开逐条日常 shell 教程;命令级步骤以各平台部署手册与setup_and_run脚本为准。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询