# 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 ### 获取目标区域并将样本图和真值图映射(大部分已解决) - 扫描的整体有旋转、放缩、位移 - 手绘制图在整图相对位置变化比较大 - 如何将手绘区域在真值图上找到目标区域 - 映射到后,如何进行比对获取差异 ### 使用鲁棒的算法获取细节的差异(未完全解决) 如下图,虚线错画为实线,如何鲁棒的检测这种错误 ![img_4.png](img_4.png) ### 获取错误的特征(未解决) 在比对出差异后,有两个问题 - 如何区分是错误的差异还是正确的 - 如何对差异进行归类,是缺少线、线形态还是整体型态画错。如果对特征进行识别,可能工作量较大 例子 - 下图1,中间点画线过长,但是是正确的结果。 ![img_1.png](img_1.png) - 下图2,红色是真值图、黑色是手绘图。二者间点画线差异较大,但是专家评判此答案为正确 注:专家答案偏向主观,如:允许不关键的地方有偏差,图像检测算法的结果难于处理这种主观的问题。 ![img_5.png](img_5.png) ### 如何对螺纹剖面线进行检测(未解决) ![img_6.png](img_6.png) ## Main proposal ### 方案一(已demo) 使用opencv视觉库进行图像学的处理。 ![img.png](img.png) ### 方案二(待研究) 方案一结合CNN识别特征,如线的类型、形态 ### 方案三(待研究) 使用方案将图像叠加后,调用大模型处理 ## 过程 ### dwg文件导出为图像 ![gt.png](data/gt.png) ### 真值图边缘检测 ![dxf_result.png](data/dxf_result.png) ### 样本图关键点检测 ![fff1.png](data/fff1.png) ### 计算仿射矩阵后将真值图和样本图边框对齐 ![img_7.png](img_7.png) ### 读取dxf文件获取图像分割节点 获取真值图每个区域的对角点 ![coordinate.png](data/coordinate.png) 使用仿射矩阵获取样本图每个区域对角点 ![point.png](data/point.png) ### 获取样本图像的手绘区域切分出来 处理前: ![region_original.png](data/region_original.png) 处理后: ![img_9.png](img_9.png) ### 将手绘图和样本图叠加,并进行形态学运算,求出差异 ![img_12.png](img_12.png) ![img_13.png](img_13.png) #### 安装教程 #### 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 #### 环境配置 ``` ```