Add payment line parser and fix OCR override from payment_line
- Add MachineCodeParser for Swedish invoice payment line parsing - Fix OCR Reference extraction by normalizing account number spaces - Add cross-validation tests for pipeline and field_extractor - Update UI layout for compact upload and full-width results Key changes: - machine_code_parser.py: Handle spaces in Bankgiro numbers (e.g. "78 2 1 713") - pipeline.py: OCR and Amount override from payment_line, BG/PG comparison only - field_extractor.py: Improved invoice number normalization - app.py: Responsive UI layout changes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
60
README.md
60
README.md
@@ -1,6 +1,36 @@
|
||||
# Invoice Master POC v2
|
||||
|
||||
自动账单信息提取系统 - 使用 YOLOv11 + PaddleOCR 从瑞典 PDF 发票中提取结构化数据。
|
||||
自动发票字段提取系统 - 使用 YOLOv11 + PaddleOCR 从瑞典 PDF 发票中提取结构化数据。
|
||||
|
||||
## 项目概述
|
||||
|
||||
本项目实现了一个完整的发票字段自动提取流程:
|
||||
|
||||
1. **自动标注**: 利用已有 CSV 结构化数据 + OCR 自动生成 YOLO 训练标注
|
||||
2. **模型训练**: 使用 YOLOv11 训练字段检测模型
|
||||
3. **推理提取**: 检测字段区域 → OCR 提取文本 → 字段规范化
|
||||
|
||||
### 当前进度
|
||||
|
||||
| 指标 | 数值 |
|
||||
|------|------|
|
||||
| **已标注文档** | 9,738 (9,709 成功) |
|
||||
| **总体字段匹配率** | 94.8% (82,604/87,121) |
|
||||
|
||||
**各字段匹配率:**
|
||||
|
||||
| 字段 | 匹配率 | 说明 |
|
||||
|------|--------|------|
|
||||
| supplier_accounts(Bankgiro) | 100.0% | 供应商 Bankgiro |
|
||||
| supplier_accounts(Plusgiro) | 100.0% | 供应商 Plusgiro |
|
||||
| Plusgiro | 99.4% | 支付 Plusgiro |
|
||||
| OCR | 99.1% | OCR 参考号 |
|
||||
| Bankgiro | 99.0% | 支付 Bankgiro |
|
||||
| InvoiceNumber | 98.9% | 发票号码 |
|
||||
| InvoiceDueDate | 95.9% | 到期日期 |
|
||||
| InvoiceDate | 95.5% | 发票日期 |
|
||||
| Amount | 91.3% | 金额 |
|
||||
| supplier_organisation_number | 78.2% | 供应商组织号 (CSV 数据质量问题) |
|
||||
|
||||
## 运行环境
|
||||
|
||||
@@ -20,10 +50,10 @@
|
||||
|
||||
- **双模式 PDF 处理**: 支持文本层 PDF 和扫描图 PDF
|
||||
- **自动标注**: 利用已有 CSV 结构化数据自动生成 YOLO 训练数据
|
||||
- **多池处理架构**: CPU 池处理文本 PDF,GPU 池处理扫描 PDF
|
||||
- **数据库存储**: 标注结果存储在 PostgreSQL,支持增量处理
|
||||
- **多策略字段匹配**: 精确匹配、子串匹配、规范化匹配
|
||||
- **数据库存储**: 标注结果存储在 PostgreSQL,支持增量处理和断点续传
|
||||
- **YOLO 检测**: 使用 YOLOv11 检测发票字段区域
|
||||
- **OCR 识别**: 使用 PaddleOCR 3.x 提取检测区域的文本
|
||||
- **OCR 识别**: 使用 PaddleOCR v5 提取检测区域的文本
|
||||
- **Web 应用**: 提供 REST API 和可视化界面
|
||||
- **增量训练**: 支持在已训练模型基础上继续训练
|
||||
|
||||
@@ -38,6 +68,7 @@
|
||||
| 4 | bankgiro | Bankgiro 号码 |
|
||||
| 5 | plusgiro | Plusgiro 号码 |
|
||||
| 6 | amount | 金额 |
|
||||
| 7 | supplier_organisation_number | 供应商组织号 |
|
||||
|
||||
## 安装
|
||||
|
||||
@@ -205,7 +236,7 @@ Options:
|
||||
|
||||
### 训练结果示例
|
||||
|
||||
使用 15,571 张训练图片,100 epochs 后的结果:
|
||||
使用约 10,000 张训练图片,100 epochs 后的结果:
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
@@ -214,6 +245,8 @@ Options:
|
||||
| **Precision** | 97.5% |
|
||||
| **Recall** | 95.5% |
|
||||
|
||||
> 注:目前仍在持续标注更多数据,预计最终将有 25,000+ 张标注图片用于训练。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
@@ -403,16 +436,29 @@ print(result.to_json()) # JSON 格式输出
|
||||
|
||||
- [x] 文本层 PDF 自动标注
|
||||
- [x] 扫描图 OCR 自动标注
|
||||
- [x] 多池处理架构 (CPU + GPU)
|
||||
- [x] PostgreSQL 数据库存储
|
||||
- [x] 多策略字段匹配 (精确/子串/规范化)
|
||||
- [x] PostgreSQL 数据库存储 (断点续传)
|
||||
- [x] 信号处理和超时保护
|
||||
- [x] YOLO 训练 (98.7% mAP@0.5)
|
||||
- [x] 推理管道
|
||||
- [x] 字段规范化和验证
|
||||
- [x] Web 应用 (FastAPI + 前端 UI)
|
||||
- [x] 增量训练支持
|
||||
- [ ] 完成全部 25,000+ 文档标注
|
||||
- [ ] 表格 items 处理
|
||||
- [ ] 模型量化部署
|
||||
|
||||
## 技术栈
|
||||
|
||||
| 组件 | 技术 |
|
||||
|------|------|
|
||||
| **目标检测** | YOLOv11 (Ultralytics) |
|
||||
| **OCR 引擎** | PaddleOCR v5 (PP-OCRv5) |
|
||||
| **PDF 处理** | PyMuPDF (fitz) |
|
||||
| **数据库** | PostgreSQL + psycopg2 |
|
||||
| **Web 框架** | FastAPI + Uvicorn |
|
||||
| **深度学习** | PyTorch + CUDA |
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT License
|
||||
|
||||
Reference in New Issue
Block a user