AI源码
AI源码AI 精选 · 优质源码 · 助力学习

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

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

评分:4.8/5.0
销量:27
发布:2026/5/20
难度:L2 进阶级
💬 联系咨询观看视频介绍
永久使用权限
免费更新维护
技术支持服务

项目封面

截图 1

项目说明

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

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 未装场景)
勘校事件写入 correctionsPOST .../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);参数 limitonly_segmented
标注数据导出管理员 GET /api/v1/admin/annotations/export(JSONL)

2.9 管理员能力

能力说明
模型效果评估POST /api/v1/admin/eval/runGET .../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、本地目录userstasksannotation_sampleseval_report

数据库升级:SQLite 无自动迁移脚本;app/__init__.py 对旧库 补列(如 user_idpreprocessed_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;limitonly_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 一键自测(仓库根目录)

bash scripts/run_all_tests.sh

7.2 分模块

# 仅后端(约 23 项,mock OCR/句读,不依赖 Paddle)
cd modu-backend && bash scripts/run_tests.sh

# 仅前端 E2E(8 项,自动起临时后端 + Vite)
cd modu-frontend && CI=1 npm run 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.mdwindows/项目部署手册_Windows.md环境安装与启动
mac/必须执行__模型文件下载步骤.mdwindows/…克隆后下载句读权重与 Paddle 缓存
mac/手动微调执行步骤.mdwindows/…离线微调逐步命令

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 脚本为准。

技术分类

包含内容

完整源码
项目说明文档
演示材料

适用人群

学习参考与二次开发

关于 AI源码

AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。

QQ: 861077046
邮箱: 861077046@qq.com
已服务 27+ 位用户
立即咨询

相关推荐

查看全部 →
城市交通流量预测与拥堵成因分析系统
Python
进阶

城市交通流量预测与拥堵成因分析系统

是一个面向城市交通拥堵分析的 monorepo,覆盖计算机设计课题中的主要能力链路:

PythonHTMLSQLite
4.820
电商用户行为漏斗与CRO转化率优化分析
Python
NEW
进阶

电商用户行为漏斗与CRO转化率优化分析

电商用户行为漏斗与CRO转化率优化分析(E-Commerce Funnel CRO)是一套面向电商运营的数据分析平台,覆盖从用户访问到最终购买的完整漏斗链路,提供多维诊断、统计检验、PIE 优先级矩阵与 XGBoost 购买预测等能力,帮助运营团队精准定位转化瓶颈并制定优化策略。

PythonHTMLSQLite
4.866
多组学癌症预后预测分析系统
Python
进阶

多组学癌症预后预测分析系统

基于 Flask 的 Web 应用,用于上传 TCGA 风格合并表、做特征与标签概览、Cox 预后风险评分与生存相关可视化。模型在本地训练后以 形式加载,不提供旧版演示数据或假模型兜底。

PythonHTMLSQLite
4.834
基于 Apriori 算法的中药配伍审查系统
Python
NEW
进阶

基于 Apriori 算法的中药配伍审查系统

本系统是一个基于经典 Apriori 关联规则挖掘算法的中药配伍审查平台,使用真实中医药处方数据集(PTM-TKDE2018),实现药材频繁项集挖掘、关联规则生成与配伍禁忌审查。

PythonHTMLSQLite
4.840
基于 Python 的城市共享单车骑行需求时空分析系统
Python
NEW
进阶

基于 Python 的城市共享单车骑行需求时空分析系统

本系统是一个基于 Python Flask 框架的城市共享单车骑行需求时空分析平台,使用 Oslo City Bike(奥斯陆城市自行车)开放数据,提供系统总览、时间维度分析、空间维度分析、站点运营分析、OD 起讫流动分析、骑行需求预测、综合分析报告等功能模块,适用于城市共享单车运营调度与骑行需求研究场景。

PythonHTMLSQLite
4.857
基于 Python 的短视频用户行为分析系统
Python
NEW
进阶

基于 Python 的短视频用户行为分析系统

基于快手 KuaiRec / KuaiRand 数据集的短视频推荐分析平台,提供用户行为分析、推荐偏差检测、内容运营洞察、图神经网络推荐等完整分析链路。

PythonHTMLSQLite
4.875