# CADDetect
**Repository Path**: zhangzhangzf/caddetect
## Basic Information
- **Project Name**: CADDetect
- **Description**: 根据CAD的dwg格式的答案,判别手绘工程制图的错误。
- **Primary Language**: Python
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-17
- **Last Updated**: 2025-07-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CADDetect
Author: yihengzhang(@zhangzhangzf)
flowchart TB
A[学生制图作业] --> B[前端视觉中枢
(OpenCV)]
B --> C[显性特征提取
差异检测]
C --> D[结构化差异数据]
D --> E[后端认知大脑
(DeepSeek大模型)]
E --> F[错误归类与逻辑推理]
F --> G[生成评价报告
定位-依据-建议]
G --> H[教学优化分析
知识热力图]
## Abstract
使用opencv,根据CAD dwg格式的答案,判别手绘工程制图的错误。识别错误的区域及错误的类型。已有工作可以完成形态的比对,但是一些场景不能覆盖,需要探索新的技术方案。
| 已覆盖场景 | 未覆盖场景 |
|-------------|--------------|
| 样本图像纠偏 | 错误的类型判别 |
| 样本图像与真值图像的映射 | 点画线精确检测 |
| 真值图绘图区切分 | 剖面线精确检测 |
| 真值图与样本图各绘图区的映射 | 形态差异的精准检测 |
| 样本图手绘部分截取| 部分手绘区专家判别为正确,但是不能完全与真值对应 |
| 手绘部分与真值图叠放| |
| 手绘部分与真值图获取差异||
## Concept
样本(Sample):指学生手绘答案
真值(Ground Truth GT):指CAD中的dwg中参考答案
## Scope
In-scope:
- (P0)判别样本图像错误区域
- (P0)样本图像错误类型(特征检测)
Out-of-scope:
- 检测标注内容
- 检测表格内容
## Challenge
### 获取目标区域并将样本图和真值图映射(大部分已解决)
- 扫描的整体有旋转、放缩、位移
- 手绘制图在整图相对位置变化比较大
- 如何将手绘区域在真值图上找到目标区域
- 映射到后,如何进行比对获取差异
### 使用鲁棒的算法获取细节的差异(未完全解决)
如下图,虚线错画为实线,如何鲁棒的检测这种错误

### 获取错误的特征(未解决)
在比对出差异后,有两个问题
- 如何区分是错误的差异还是正确的
- 如何对差异进行归类,是缺少线、线形态还是整体型态画错。如果对特征进行识别,可能工作量较大
例子
- 下图1,中间点画线过长,但是是正确的结果。

- 下图2,红色是真值图、黑色是手绘图。二者间点画线差异较大,但是专家评判此答案为正确
注:专家答案偏向主观,如:允许不关键的地方有偏差,图像检测算法的结果难于处理这种主观的问题。

### 如何对螺纹剖面线进行检测(未解决)

## Main proposal
### 方案一(已demo)
使用opencv视觉库进行图像学的处理。

### 方案二(待研究)
方案一结合CNN识别特征,如线的类型、形态
### 方案三(待研究)
使用方案将图像叠加后,调用大模型处理
## 过程
### dwg文件导出为图像

### 真值图边缘检测

### 样本图关键点检测

### 计算仿射矩阵后将真值图和样本图边框对齐

### 读取dxf文件获取图像分割节点
获取真值图每个区域的对角点

使用仿射矩阵获取样本图每个区域对角点

### 获取样本图像的手绘区域切分出来
处理前:

处理后:

### 将手绘图和样本图叠加,并进行形态学运算,求出差异


#### 安装教程
####
python 读取dxf文件使用package ezdxf
链接:https://ezdxf.mozman.at/docs/introduction.html
#### 使用说明
#### 参与贡献
demo代码,不建分支,统一往master合入代码。
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
#### 快捷操作
更新requirements.txt
```bash
pipreqs G:\cad-match\code\caddetect --force
```
# 使用手册
## 下载ODAFileConverter
- 下载目的:将CAD dwg文件转换为dxf文件
- 下载网站:https://www.opendesign.com/guestfiles/oda_file_converter
- 下载到目标地址:C:\\Program Files\\ODA\\ODAFileConverter\\ODAFileConverter.exe
#### 环境配置
```
```