# Intelligent-BOM-Generation-System **Repository Path**: jacobzp/intelligent-bom-generation-system ## Basic Information - **Project Name**: Intelligent-BOM-Generation-System - **Description**: “BOM表格智能生成系统”是一套面向制造业场景的 BOM 信息管理系统,针对企业在图纸流转、物料清单整理和版本变更管理中普遍存在的人工录入效率低、数据格式不统一、版本追溯困难、变更比对依赖人工等问题,构建了从 PDF 图纸入库、智能采集、人工校核、版本确认、变更分析到导出归档的完整业务闭环。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-12 - **Last Updated**: 2026-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BOM 表格智能生成系统 从 PDF 图纸/清单中识别表格区域,解析为标准 BOM(成本预估表),支持在线预览编辑与多格式导出。 **国赛定位:** 面向制造业的 BOM 信息管理系统。系统以 PDF 图纸智能识别为信息采集入口,实现项目、图纸、BOM 版本、变更对比、权限审计的全流程管理。 **主流程:** 登录 → 项目立项 → 图纸入库 → 自动采集 BOM → 人工校核 → 版本确认 → 版本变更分析 → 导出归档 → 操作审计 > 各模块的详细能力边界与已知限制见 [CAPABILITIES.md](./CAPABILITIES.md)。 > 国赛答辩主线与 PPT 建议见 [docs/project-advancement/国赛演示脚本.md](./docs/project-advancement/%E5%9B%BD%E8%B5%9B%E6%BC%94%E7%A4%BA%E8%84%9A%E6%9C%AC.md)。 ## 快速启动 ### 环境要求 - Python **3.10** - Node.js(前端开发) - Docker Desktop(本机 Redis,智能识别异步队列依赖) - 项目根目录需同时保留 `backend/` 与 `tools/`(识别依赖 `tools/` 中的模型与 pdf-extract-kit) ### 启动 Redis 智能识别的异步任务状态、排队与去重缓存依赖 Redis。Windows 本机推荐用 Docker 跑 Redis: ```powershell docker run -d --name bom-redis -p 6379:6379 -v ${PWD}\redis-data:/data redis:8 redis-server --appendonly yes ``` 若容器已创建,后续只需: ```powershell docker start bom-redis ``` 验证 Redis: ```powershell docker exec -it bom-redis redis-cli ping ``` 返回 `PONG` 即可。 ### 启动后端 **方式一:venv / conda 本地环境** ```bash cd backend python -m venv .venv # 或 conda create -n BOM-Intelligent-System python=3.10 -y # Windows: .\.venv\Scripts\activate # macOS/Linux: source .venv/bin/activate pip install -r requirements.txt python run.py ``` 后端地址:`http://localhost:5000` ### 启动识别 Worker 智能识别模型由独立 Worker 消费 Redis 队列执行。启动 Flask 后,需要再开一个终端: ```bash cd backend # Windows: .\.venv\Scripts\activate # macOS/Linux: source .venv/bin/activate python run_recognition_worker.py ``` > 如果 Redis 未启动,异步识别接口会明确报错;如果 Worker 未启动,任务会停留在排队状态。普通登录、项目管理、PDF 上传等基础接口不依赖 Worker。 仅开发非识别相关功能时,可跳过模型预热以加快启动: ```bash # Windows PowerShell $env:PEK_SKIP_MODEL_WARMUP="1"; python run.py # macOS / Linux PEK_SKIP_MODEL_WARMUP=1 python run.py ``` Worker 也可跳过启动预热(适合排查空队列或 CI): ```bash python run_recognition_worker.py --skip-warmup ``` ### 启动前端 新开一个终端: ```bash cd pdfBom npm install npm run dev ``` 浏览器访问 `http://localhost:5173`。 ## 项目功能 ### 核心功能 | 功能模块 | 说明 | | -------- | ---- | | **项目管理** | 创建/归档项目,按项目隔离 PDF 与识别记录 | | **PDF 上传** | 上传 PDF 到服务端,支持预览、下载、删除 | | **智能识别** | 异步版面检测(YOLO DocLayout)+ 表格解析(TableSLANet),生成 BOM | | **BOM 预览** | 可视化展示 BOM,支持表头/明细/加工成本在线编辑与校验 | | **BOM 导出** | 导出 Excel / CSV / XML;支持 BOM + 图纸 PDF 完整包 | | **版本变更分析** | 从两条 BOM 版本记录做差异分析(前端计算),展示新增、缺失、金额变化与总成本波动 | | **BOM 版本记录** | 按用户/项目记录 BOM 草稿、待审核、已通过版本与图纸入库记录,支持批量导出 | **识别策略(Web 主流程当前固定):** - 版面:YOLO(`doclayout_yolo_ft.pt`) - 表格:TableSLANet - 页码:第 1 页 - 区域:整页留 10% 边距的固定矩形(**非**交互框选) 后端另支持 LayoutLMv3、TableMaster 等后端键,可通过 API 指定,前端暂未暴露切换入口。 ### 用户与社区 | 功能模块 | 说明 | | -------- | ---- | | **注册/登录** | SQLite 持久化;内置演示账号 `admin/admin`、`xiaoxiao/xiaoxiao` | | **用户管理** | 管理员可管理用户、审批找回密码 | | **用户社区** | 公开讨论、经验分享、好友私信 | | **AI 助手** | 后端代理 OpenAI 兼容接口;**需用户在浮窗自行配置 API Key 与模型**,系统不提供内置模型 | ### 其他 | 功能模块 | 说明 | | -------- | ---- | | **使用统计** | 活动热力图、文件类型分布等 | | **个性化设置** | 主题、密度、导出偏好(本地存储) | | **快捷工具箱** | 部分工具可用;「快速识别」等入口尚未完全接线 | | **帮助中心** | 静态 FAQ | ## 技术架构 - **后端**:Python Flask + SQLite + pdf-extract-kit(`tools/`) - **异步任务**:Docker Redis + 独立识别 Worker(任务状态、队列、去重缓存) - **前端**:Vue 3 + Vite + Element Plus + Pinia + Vue Router - **识别模型**:YOLO DocLayout(版面,默认)+ TableSLANet(表格,默认);可选 LayoutLMv3、TableMaster - **算力**:默认 CPU(`tools/requirements-cpu.txt`);GPU 环境可换 `tools/requirements.txt` ## 主要 API(Web 主流程) | 方法 | 路径 | 说明 | | ---- | ---- | ---- | | POST | `/api/permission/getMenu` | 登录 | | GET/POST | `/api/projects` | 项目管理 | | POST | `/api/pdf/upload` | PDF 上传 | | POST | `/api/layout/detect-region-async` | 异步版面+表格识别 | | GET | `/api/layout/detect-region-status/:jobId` | 识别任务轮询 | | POST | `/api/bom/from-table-htmls` | 表格 HTML → BOM | | POST | `/api/bom/export?format=xlsx\|csv\|xml` | BOM 导出 | | GET/POST | `/api/recognition-history/*` | BOM 版本记录 | | POST | `/api/ai/chat/stream` | AI 助手流式代理 | 更多已实现但未接入 Web 主流程的接口(如 `/api/extract` 目录批量提取)见 [CAPABILITIES.md](./CAPABILITIES.md#4-后端-api-与前端接线情况)。 ## 项目结构 ``` ├── backend/ # Flask 后端 ├── pdfBom/ # Vue 3 前端 ├── tools/ # pdf-extract-kit、版面/表格模型与脚本 ├── assets/json/ # BOM JSON 示例结构 ├── outputs/json/ # 识别结果 JSON 输出 ├── CAPABILITIES.md # 能力边界说明(详细) └── README.md ``` ## 生产部署 **Web 模式:** ```bash cd pdfBom && npm run build cd ../backend # 先启动 Docker Redis,再分别启动 Flask 与 Worker # Windows: $env:BOM_PRODUCTION="1"; python run.py # macOS/Linux: BOM_PRODUCTION=1 python run.py python run_recognition_worker.py ``` **桌面 Electron(实验性):** ```bash cd pdfBom npm run electron:dev # 开发 npm run dist:dir # Windows 目录打包 ``` ## 注意事项 - 完整 PDF 识别需要 `tools/models/` 权重齐全;缺失时基础 API 仍可用,识别会失败 - 识别日志:`logs/bom_extract.log`、`logs/model_runtime.log` - Redis 任务输入、识别缓存与生成的 JSON/中间产物在 `outputs/`,可按需清理 - GPU 环境请将 `tools/requirements-cpu.txt` 换为 `tools/requirements.txt`(含 `paddlepaddle-gpu` 等) - 复杂/非标准表格、扫描件、跨页表格等识别质量有限,需在 BOM 预览页人工校对