# IAS-DAS 工业外观结构分辨分析系统
**Repository Path**: CppcOwn/IAS-DAS
## Basic Information
- **Project Name**: IAS-DAS 工业外观结构分辨分析系统
- **Description**: IAS-DAS 是面向工业外观与结构质检的开源中间件。系统将工件抽象为空间结构拓扑图,通过外观通道与结构通道分别分析,经融合策略给出判决;结构匹配基于 Hungarian 算法,并输出可解释的代价分解。默认视觉链路基于 OpenCV,可在常规 CPU 环境运行。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2026-10-13
- **Last Updated**: 2026-10-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

IAS-DAS 工业外观结构分辨分析系统
Industrial Appearance–Structure Discrimination Analysis System
中文 · English
https://gitee.com/withthesea/IAS-DAS
Apache-2.0 · 引用 / 二次分发请使用上述 Gitee 地址作为主入口
---
IAS-DAS 是面向工业外观与结构质检的开源**质量中间件**(Apache-2.0)。工件建模为结构拓扑图:外观通道(自研轻量 CNN → ONNX,可回退 OpenCV)与结构通道(Hungarian 匹配)解耦,再融合为 **OK / 外观 NG / 结构 NG / 复合 NG**,并输出缺失·多余·偏移·边长等代价分解。
> **一句话**:可复现的产线旁路质检中间件——结构差分可解释,外观可插拔,金样即可演示。
### 工程基线(可核对,不靠口号)
| 项 | 事实 |
|:---|:---|
| 代码 | `app/` ≈ 1.5 万行 Python;算法套件 `app/algo/` ≈ 6k 行 |
| 插件 | `app/plugins/`:外观 NN / OpenCV 外观·结构 / 双通道融合,可替换注册 |
| 测试 | `tests/` 48+ 用例;`scripts/run_tests.bat` 一键跑 |
| 演示集评测 | 12 条合成样本 **12/12** 可复现——**不是产线大盘准确率** |
| 交付物 | Docker Compose · 演示视频 · 中英 README · Release `v2.3.0` |
| 诚实边界 | 详见 [`docs/EVALUATION.md`](docs/EVALUATION.md) · [`docs/ROADMAP.md`](docs/ROADMAP.md) |
| 常见做法 | 本系统 |
|:---|:---|
| 只画表面缺陷框 | 结构差分(缺件 / 多孔 / 孔距)+ 代价分解 |
| 一个黑盒分数 | 四类判决 + 通道分数 + 返修要点 |
| 换模型改核心 | Appearance / Structure / Fusion 插件热切换 |
适用:钣金与塑料件抽检、装配完整性复核、孔距筛查、二次开发替换检测插件。
**30 秒体验**:`scripts\快速启动.bat` · `admin` / `admin123`(仅本地)· 顶栏 **A→B→C→D**。
**自荐 / 仓库设置**:[`docs/gitee-自荐文案.md`](docs/gitee-自荐文案.md) · [`docs/gitee-仓库设置.md`](docs/gitee-仓库设置.md)。
---
## 界面预览
| 登录 | 运行总览(能力图谱 · 自研外观网) |
|:---:|:---:|
|  |  |
| **单件判决剧场** | **三维工作室** |
|  |  |
完整演示视频见下方。
---
## 技术栈
| 层 | 技术 |
|:---|:---|
| 后端 | Python 3.10+ · FastAPI · Pydantic · SQLAlchemy |
| 视觉 / 算法 | OpenCV · NumPy · SciPy · **自研外观 CNN → ONNX Runtime** · Hungarian |
| 前端 | Jinja2 · 原生 JS · Three.js WebGL |
| 数据 | SQLite(默认)· 可选 PostgreSQL / MySQL · Redis(集群) |
| 部署 | 一键脚本 · Docker Compose · Kubernetes 清单 |
---
## 能力图谱
```text
┌──────────────┐ ┌──────────────────┐ ┌────────────────┐
│ 自研外观 NN │ │ 结构图 + Hungarian│ │ 双通道融合 V2 │
│ appearance_ │ → │ 缺件/多孔/孔距 │ → │ 四类判决+返修 │
│ nn_v1 ONNX │ │ 代价可解释 │ │ bullets/hints │
└──────────────┘ └──────────────────┘ └────────────────┘
│ │ │
└──────────┬─────────┴──────────┬───────────┘
▼ ▼
金样版本管理 看板·批次·问答·三维
```
| 能力 | 默认实现 | 说明 |
|:---|:---|:---|
| 外观 | `appearance_nn_v1` | 自研轻量 CNN(ok/划痕/污渍)· ONNX CPU · 回退 `opencv_v3` |
| 结构 | `opencv_graph_v2` | 多线索孔/螺丝/槽 + Hungarian 匹配 |
| 融合 | `dual_channel_v2` | 通道解耦判决 + 要点 / 返修建议 |
| 三维 | 照片四路 / CAD | STEP·DXF·STL…;可选单目深度 |
| 问答 | 规则 + 图谱 | 结构化答案卡 |
训练自研网:`pip install -r requirements-nn.txt && python scripts/train_appearance_nn.py`
---
## 演示视频
完整产品演示(登录 → 总览 → 单件分辨 → 实时/批量 → 问答 → 实物库 → 三维重建 → 金样 → 系统管理,约 11 分钟):
▶ 观看 IAS-DAS 演示视频
Gitee 在线打开 · 本地文件 docs/video/IAS-DAS-demo.mp4
**现场答辩推荐路径**:登录后使用顶栏四场景键 — **A 外观 NG → B 结构 NG → C 三维 → D 问答**(约 60 秒讲清实用差异)。
---
## 系统架构
**算法与模型**在 `app/algo/`(公式与优化问题的可执行实现);`app/services/` 只做业务编排与 I/O;`app/plugins/` 为可插拔适配器。
```text
app/
algo/ 算法与模型套件
recognition/ 形态学 · 圆度/NMS · 外观/结构模型 · Hungarian · 融合
reconstruct3d/ 照片四路 · CAD 直出 · 前景 · 可选单目深度 · MeshBuilder
knowledge/ 实体词典 · 构图 · 查询打分 · KnowledgeGraphModel
services/ 业务编排 / 门面(调用 algo)
plugins/ Appearance / Structure / Fusion 插件
core/ 配置 · 数据库(SQLite / 可选 PG·MySQL)· 日志
middleware/ API 限流等
```
详见 [`app/algo/README.md`](app/algo/README.md)(含三大算法逐步流程图)。
```mermaid
flowchart TB
IMG[工件图像] --> APP[外观通道]
IMG --> STR[结构通道]
STR --> HUN[Hungarian]
APP --> FUS[融合判决]
HUN --> FUS
FUS --> OUT[看板 · 批次 · 报表 · 问答 · 三维 · 系统管理]
```
---
## 算法与模型
主干是**可计算的数学模型**(NumPy / SciPy / OpenCV),默认零 GPU。详细公式与逐步逻辑见 [`app/algo/README.md`](app/algo/README.md)。下方为三大重点算法流程图。
### 1. 识别模型(双通道分辨)
```mermaid
flowchart TB
IMG[工件图像] --> APP[外观模型 AppearanceModelV2]
IMG --> STR[结构图模型 StructureGraphModelV2]
GOLD[金样 StructureGraph] --> HUN
APP --> SA["外观分 sa + 缺陷集"]
STR --> GP[探针 StructureGraph]
GP --> HUN[Hungarian 匹配]
HUN --> SS["结构分 ss + 代价分解"]
SA --> FUS[双通道融合 DualChannelFusionModel]
SS --> FUS
FUS --> V{判决}
V --> OK[OK]
V --> ANG[外观 NG]
V --> SNG[结构 NG]
V --> CNG[复合 NG]
```
| 模型 | 数学要点 | 实现类 |
|------|----------|--------|
| 外观 \(s_a\) | \(P=\sum s_i\sqrt{w_i h_i}/\sqrt{WH}\),\(s_a=\max(0,1-\min(1,6.5P))\) | `AppearanceModelV2` |
| 结构图 | 圆度 \(C=4\pi A/P^2\) + NMS → 孔/钉/槽图;芯环对比分类;尺度自适应 | `StructureGraphModelV2` |
| Hungarian | \(C_{ij}=\|(s_x x_i^P,s_y y_i^P)-(x_j^R,y_j^R)\|_2\),\(\min_\pi\sum C\) | `HungarianStructureMatcher` |
| 融合 | \(\tau_a,\tau_s\) + missing/extra → 四类判决 | `DualChannelFusionModel` |
**外观通道实现逻辑**
```mermaid
flowchart LR
A[BGR] --> B[Otsu 板面 ROI]
B --> C[结构件掩膜]
C --> D[多向 Top-Hat / Black-Hat]
D --> E[自适应噪声阈值]
E --> F[划痕 / 污渍连通域]
F --> G["惩罚 P → 分数 sa"]
```
**结构通道 + 匹配实现逻辑**
```mermaid
flowchart TB
I[灰度 / CLAHE] --> B[Blob]
I --> C[轮廓圆度]
I --> H[Hough 圆]
B --> NMS[圆心 NMS 融合]
C --> NMS
H --> NMS
NMS --> T[孔 / 螺丝分类 + 槽]
T --> G[建边 → StructureGraph]
G --> M[按类型分块代价矩阵]
M --> U["linear_sum_assignment"]
U --> R[匹配对 / 缺失 / 多余 / 偏移 / 孔距]
R --> S["结构分 ss"]
```
**融合判决表**
| 外观 NG | 结构 NG | 判决 |
|:---:|:---:|:---|
| 否 | 否 | OK |
| 是 | 否 | 外观 NG |
| 否 | 是 | 结构 NG |
| 是 | 是 | 复合 NG |
结构问答为多模型编排:企业记忆 → 结构规则 → 知识图谱 → 可选 LLM(见第 3 节与 `qa_orchestrator`)。
---
### 2. 三维重建(照片四路 · CAD 直出 · 可选单目深度)
```mermaid
flowchart TB
subgraph photo [照片路径]
P[多视角照片] --> DS[上传自动缩图 ≤960]
DS --> FG[前景分割]
FG --> CLS[part_classifier]
CLS -->|screw| SM[参数化螺丝]
CLS -->|axisym| LT[保真回转 lathe]
CLS -->|extrude| EX[俯视 CAD 轮廓挤出]
CLS -->|hull| VH[软视觉外壳]
end
subgraph cad [CAD 直出路径]
CF[STEP / IGES / DXF / STL / OBJ…] --> CI[cad_import]
CI -->|BREP| CC[cascadio 网格化]
CI -->|DXF| DX[封闭轮廓挤出]
CI -->|Mesh| TM[trimesh 加载]
end
SM --> M[投影色 + 微位移 / 金属预览]
LT --> M
EX --> M
VH --> M
CC --> M
DX --> M
TM --> M
MD[可选单目深度 ONNX] -.-> M
M --> O[OBJ / PLY / 网页预览]
O --> Q{反馈重跑?}
Q -->|是·照片路径| R[路径纠正 / Δθ / 平滑]
R --> CLS
```
| 步骤 | 逻辑 | 模块 |
|------|------|------|
| 输入保护 | 视角最长边 ≤960、JPG 落盘;GrabCut 默认关 | `reconstruct` · `foreground` |
| 分割 | 边框极性 + Otsu/自适应;反光小孔填充 | `foreground` |
| 分类 | `screw` / `axisym` / `extrude` / `hull` | `part_classifier` |
| 螺丝 | 高置信紧固件 → 参数化内六角;反馈可退出 | `estimate_screw_params` |
| 轴/夹头 | 侧视保真回转(`preserve=True`) | `estimate_revolution_profile` · lathe |
| 板件照片 | `cad_contour`:Delaunay 顶底盖 + 直立孔/槽壁 + 螺丝凸台 | `extrude_top_silhouette_mesh` |
| 不规则 | 软视觉外壳;强制外壳不再回退车削 | `space_carve` |
| **CAD 直出** | STEP/IGES→网格;DXF→板件挤出;STL/OBJ/PLY/GLB→加载 | `cad_import` |
| 表面细节 | 明暗线索;可选 Depth-Anything-V2-Small ONNX | `depth_cues` · `mono_depth` |
**照片重建 API**:`POST /api/recon/{id}/build`(`template=general|socket_cap|pan`,可 `async_mode=1`)。
**CAD 直出 API**:
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/recon/cad/formats` | 支持格式与引擎能力 |
| POST | `/api/recon/cad` | 上传 CAD(`file` + 可选 `thickness`)→ 三维任务 |
| POST | `/api/recon/cad/demo` | 一键演示(`kind=dxf_plate\|stl_bracket`) |
单目深度:`GET/POST /api/recon/mono-depth`(需登录);健康检查 `GET /api/health` 含 `mono_depth` 字段。
网页三维台左侧有 **CAD 直出三维** 上传区与 DXF/STL 演示按钮。
**启用可选单目深度(增强表面凹凸,非整段 AI 建模):**
```bash
pip install -r requirements-recon.txt # onnxruntime
python scripts/fetch_mono_depth.py # ≈95MB → data/models/
# 或网页三维台点「下载/启用深度模型」
# IASDAS_MONO_DEPTH=auto|1|0 默认 auto(有权重才用)
```
无权重或未装 ORT 时自动回退明暗线索,重建仍可用。CAD 直出依赖已写入主 `requirements.txt`(`trimesh` · `ezdxf` · `cascadio`)。
---
### 3. 知识图谱模型(轻量 IE + 检索)
```mermaid
flowchart TB
subgraph 构图
D[知识库文档] --> EX[实体模式抽取]
EX --> V[节点 V 权重累计]
D --> REL[触发词 + 共现]
REL --> E[边 E 权重累计]
V --> G["G=(V,E) → graph.json"]
E --> G
end
subgraph 查询
Q[用户问题] --> SC[节点打分 Top-K]
G --> SC
SC --> SUB[子图 + 叙述草稿]
SUB --> QA[问答编排融合]
end
```
```mermaid
flowchart LR
Q2[问题] --> M1[企业记忆命中?]
M1 -->|是| A1[直接回答]
M1 -->|否| M2[结构规则 / StructureReport]
M2 -->|计量问| A2[规则答案]
M2 -->|否| M3[知识图谱子图]
M3 --> M4[可选 LLM 润色]
M4 --> A3[综合答案]
```
| 环节 | 数学 / 规则 | 实现 |
|------|-------------|------|
| 构图 | 模式命中 \(w_v{+}{=}1\);触发词共现 \(w_e{+}{=}1\) | `graph_builder` |
| 查询 | \(\mathrm{score}(v)=5\cdot\mathbf{1}[\mathrm{label}\subseteq q]+\cdots\) | `graph_query` |
| 持久化 | `graph.json` | `KnowledgeGraphModel` |
与检测用的**单件结构图**相互独立:结构图描述孔钉几何;知识图谱描述企业文档关系。
公式与逐步伪代码见 [`app/algo/README.md`](app/algo/README.md)。
---
## 主要功能
| 模块 | 说明 |
|------|------|
| 双通道分辨 | 外观与结构分开判决 |
| Hungarian 匹配 | 同型对齐与代价分解 |
| 金样管理 | 多型号上传、激活、配置持久化 |
| 单件 / 批量 / 实时 | 上传、演示集、摄像头抓帧 |
| 结构问答 | 结构差分 + 规则;可选本机/云端语言模型 |
| 原料批次 · 实物库 | 计数、良品率、CSV;实物入库与分析 |
| 三维重建 | 照片四路 · **CAD 直出三维**(STEP/IGES/DXF/STL…)· 可选单目深度 · OBJ/PLY |
| 系统管理 | 用户、角色、部门、字典、参数、通知、日志 |
---
## 运行说明(已处理)
| 项 | 现状 |
|----|------|
| 路由体积 | `app/main.py` 薄入口;业务在 `app/routes/`,共享状态 `app/runtime.py` |
| OpenCV | 官方依赖 `opencv-python-headless`(CPU);`/api/health` 的 `opencv` 字段可探测现场是否自带 CUDA |
| 三维内存 | 上传最长边 ≤960;默认 `grid=80`(上限 96);GrabCut **默认关闭**(需时设 `IASDAS_GRABCUT=1`);OOM→507 |
| CAD 直出 | 依赖已写入 `requirements.txt`;三维台上传 STEP/DXF/STL 或演示按钮 |
| 单目深度(可选) | `pip install -r requirements-recon.txt` → 界面点「下载/启用深度模型」或 `python scripts/fetch_mono_depth.py`;`IASDAS_MONO_DEPTH=auto\|1\|0` |
| 结构问答 | **无需 Ollama**;内置规则引擎为一等路径;有 Ollama/云端时自动增强 |
---
## 快速启动
### Windows
1. 安装 [Python 3.10+](https://www.python.org/downloads/),勾选 Add to PATH
2. 运行 `scripts\快速启动.bat`
浏览器访问 http://127.0.0.1:8000
### Linux / macOS
```bash
chmod +x scripts/quick_start.sh && ./scripts/quick_start.sh
```
### Docker
```bash
# 单机演示(ROLE=all)
docker compose up --build
# 集群:nginx LB + API 多副本 + Worker + Postgres + Redis(共享 ./data)
docker compose --profile prod up -d --build \
--scale ias-das-api=2 --scale ias-das-worker=1
# 浏览器访问 http://127.0.0.1:8000 (经 ias-das-lb)
# K8s:kubectl apply -f deploy/kubernetes/ias-das.yaml
```
### 手动安装
```bash
cd ias-das
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
python scripts/generate_demo_data.py
python scripts/generate_real_demo.py
python scripts/seed_test_data.py
python scripts/run_benchmark.py
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
```
依赖已就绪时可用 `scripts/start.bat`。
| 账号 | 密码 | 角色 |
|------|------|------|
| `admin` | `admin123` | 管理员 |
| `operator` | `op123` | 操作员 |
| `viewer` | `view123` | 访客(只读与问答) |
---
## 结构问答与语言模型
默认走结构图差分与规则引擎。若本机已启动 Ollama 等兼容服务,启动时可自动注册:
| 项目 | 值 |
|------|------|
| 注册名 | `iasdas-qa` |
| 显示名 | IAS-DAS 结构问答 |
模板目录:`models/iasdas-qa/`。手动注册:`python scripts/setup_default_model.py`。跳过:`IASDAS_SKIP_MODEL_BOOTSTRAP=1`。
```powershell
$env:IASDAS_AI_PROVIDER = "openai"
$env:IASDAS_AI_API_KEY = "sk-你的密钥"
$env:IASDAS_AI_BASE_URL = "https://api.openai.com/v1"
$env:IASDAS_AI_MODEL = "gpt-4o-mini"
```
详见 [结构问答模型部署](docs/结构问答模型部署.md)。
---
## 插件扩展
实现并注册 `AppearancePlugin.analyze`、`StructurePlugin.extract` / `compare`、`FusionPolicy.fuse`(见 `app/plugins/base.py`)。
检测配置:`data/config.json` 或界面「金样与设置」。API 文档:启动后访问 `/docs`。
```bash
# Windows 推荐:scripts\run_tests.bat(自动用 .venv 并同步 requirements)
.venv\Scripts\python -m pytest -q
python scripts/run_benchmark.py
```
---
## 生产化与集群部署(已支持)
| 模式 | 说明 |
|------|------|
| **单机演示** | `IASDAS_ROLE=all` + SQLite,一条命令起全功能 |
| **集群 / 水平扩展** | 同一镜像拆成 **API×N + Worker×M**,经 nginx/K8s Service 负载均衡;**Redis** 负责任务队列与跨副本状态;**共享 data 卷**;可选 **PostgreSQL / MySQL** |
推荐集群拓扑(见 `.env.example`):
| 能力 | 启用 |
|------|------|
| 进程角色 | `IASDAS_ROLE=api\|worker\|all` |
| PostgreSQL / MySQL | `IASDAS_DATABASE_URL` |
| Redis(限流 / 队列 / 任务状态) | `IASDAS_REDIS_URL` · `IASDAS_REQUIRE_REDIS=1` |
| API 限流 | `IASDAS_RATE_LIMIT` · `IASDAS_RATE_LIMIT_PER_MIN` |
| 健康 / 就绪 | `GET /api/health` · `GET /api/ready` |
| Prometheus | `GET /metrics`(`IASDAS_METRICS=1`) |
| JSON 日志 | `IASDAS_JSON_LOGS=1` |
| 异步重建 | `POST /api/recon/{id}/build` + `async_mode=1` → `GET /api/tasks/{id}` |
| Compose 集群 | nginx LB + `ias-das-api`/`worker`:`--profile prod --scale ias-das-api=2` |
| Kubernetes | `deploy/kubernetes/ias-das.yaml`(api + worker Deployment + PVC) |
**三维重建**两条入口:① 多视角照片经 `part_classifier` 四路建模(螺丝参数化 · 轴/夹头保真回转 · 板件 `cad_contour` 挤出 · 不规则软外壳);② **CAD 直出**(STEP/IGES/DXF/STL/OBJ…→网格,见 `/api/recon/cad`)。表面微位移可融合可选单目深度。上传自动缩图,GrabCut 默认关闭。
生产必须修改 `IASDAS_SECRET`,并建议开启 `IASDAS_REJECT_DEFAULT_SECRET=1`。集群外可按需补齐:库多 AZ 与备份、证书、合规加密与集中审计。说明见 [系统说明文档 §5 / §7.9](docs/系统说明文档.md)。
---
## 文档
| 文档 | 说明 |
|------|------|
| [系统说明文档](docs/系统说明文档.md) | 架构、部署、功能、FAQ |
| [结构问答模型部署](docs/结构问答模型部署.md) | 本机与云端语言模型 |
| [项目简介](docs/项目简介.md) | 背景、架构与能力概览 |
| [贡献指南](CONTRIBUTING.md) | 参与开发与反馈 |
| [贡献者](CONTRIBUTORS.md) | mu Shan、[qinfendeyuyu](https://gitee.com/qinfendeyuyu)、[魏敏](https://gitee.com/wei-mini) |
| [安全披露](SECURITY.md) | 安全问题报告 |
界面截图可用 `python scripts/capture_docs_screenshots.py` 在本机服务启动后生成。
---
## 许可与知识产权声明
本项目采用 **Apache License 2.0**,全文见 [`LICENSE`](LICENSE),补充说明见 [`NOTICE`](NOTICE)。
1. 本软件永久免费,允许商业使用(须遵守 Apache-2.0)。
2. 作者已拥有本软件相关的知识产权。
3. 任何个人与集体不可擅自申请本软件内的技术与代码的知识产权(包括但不限于另行申报专利、软件著作权等)。
衍生作品须保留版权与许可声明,并对显著修改予以说明。软件按现状提供,不附带明示或默示担保。