GME-Qwen2-VL-2B-Instruct创新应用:基于SolidWorks工程图的智能零部件检索系统
GME-Qwen2-VL-2B-Instruct创新应用基于SolidWorks工程图的智能零部件检索系统你是不是也遇到过这种情况面对电脑里成百上千个SolidWorks工程图文件想找一个之前设计过的“带沉头孔的M8法兰连接件”或者“那个用了304不锈钢的支架”结果只能靠记忆模糊地翻文件夹或者打开一个个文件去核对一两个小时就这么过去了。对于机械设计工程师来说这简直是家常便饭。设计重用是提升效率的关键但前提是你能快速找到它。传统的文件管理靠文件名和文件夹分类在项目多、零件杂的时候基本就失灵了。一个零件可能在不同项目里被叫成不同的名字光靠“搜索”根本找不到。现在情况有点不一样了。我们最近尝试用GME-Qwen2-VL-2B-Instruct这个多模态模型搭建了一套针对SolidWorks工程图的智能检索系统。简单来说就是让AI“看懂”图纸然后你用说话的方式就能把图纸找出来。听起来有点科幻其实背后的逻辑很直接用下来效果也确实让人惊喜。1. 当AI“看懂”了你的工程图传统的图纸检索无论是用PDM系统还是Windows搜索核心都是基于文本文件名、属性卡里的几个关键词。但一张工程图所包含的信息90%都在图形和标注里——零件的形状、尺寸、公差、材料技术要求、粗糙度符号等等。这些信息以前的系统是“看不见”的。GME-Qwen2-VL-2B-Instruct这类视觉语言模型的出现改变了游戏规则。它经过训练能够同时理解图像和文本。对我们来说SolidWorks导出的二维工程图通常是PDF或图片格式就是它要理解的“图像”而我们日常描述零件的自然语言比如“一个中心有通孔、四周带四个安装孔的方形板”就是它要理解的“文本”。这套系统的核心思路是这样的预处理与解析把沉睡在文件夹里的工程图批量处理让AI先“学习”一遍。特征提取与索引AI不是简单地存储图片而是像经验丰富的老师傅一样提取出图纸中的关键视觉和文本特征比如轮廓形状、典型结构孔、槽、法兰、标注的尺寸范围、材料牌号等并把这些特征转化成可搜索的索引。自然语言检索你需要找零件时不用再纠结文件名直接像跟同事交流一样描述它。系统将你的描述与索引库进行匹配把最相关的图纸推到你面前。这相当于给你的图纸库配了一个24小时在线的、看得懂图的资深助理。2. 从想法到实现搭建智能检索系统听起来概念不错具体怎么落地呢我们搭建了一个原型系统流程可以概括为以下几个关键步骤。2.1 第一步让图纸“数字化”与“可读化”首先得把工程图准备好。SolidWorks可以很方便地导出高分辨率的PDF或PNG格式图纸。我们建议导出为PNG格式因为对于视觉模型来说图像格式处理起来更直接。接下来需要一个简单的脚本批量遍历你的图纸库文件夹把每一张图纸都送到GME-Qwen2-VL-2B-Instruct模型面前让它进行“解读”。这里的关键是设计好“提问”的模板引导模型提取出我们关心的信息。我们编写了一个预处理脚本核心任务是为每张图纸生成一份“结构化描述”。下面是一个简化的示例import os from PIL import Image # 假设已安装并导入了GME-Qwen2-VL-2B-Instruct的相关推理库 # 此处为伪代码示意流程 from my_vl_model import VLModel model VLModel() # 初始化模型 def extract_drawing_info(image_path): 提取单张工程图的关键信息 image Image.open(image_path) # 构建一个引导模型观察的提示词Prompt # 这个提示词很重要它告诉模型需要关注图纸的哪些方面 prompt 你是一份机械工程图分析助手。请详细描述这张图纸 1. 主要描绘了什么零件或装配体例如齿轮箱盖板、轴套、焊接支架 2. 它的主要形状特征是什么例如板状、圆柱状、带有法兰、有无开口 3. 图纸上标注了哪些关键尺寸例如总长、总宽、孔径、厚度 4. 技术要求或标题栏中提到了哪些关键信息例如材料45钢表面处理镀锌 请用一段连贯的文字总结以上信息。 # 将图片和提示词输入模型 response model.query(imageimage, questionprompt) # 假设response是模型返回的文本描述 drawing_description response.text # 同时我们也可以让模型提取一些关键标签 tag_prompt 请用几个关键词概括这张图纸中的零件如法兰、带孔、钣金、轴类、不锈钢。 tag_response model.query(imageimage, questiontag_prompt) tags [tag.strip() for tag in tag_response.text.split(、) if tag.strip()] return { file_path: image_path, description: drawing_description, tags: tags, # 还可以存储原始图片的嵌入向量embedding用于相似度搜索 embedding: model.get_image_embedding(image) } # 批量处理目录 drawing_library ./my_drawings/ all_drawing_data [] for root, dirs, files in os.walk(drawing_library): for file in files: if file.endswith((.png, .jpg, .jpeg)): img_path os.path.join(root, file) try: data extract_drawing_info(img_path) all_drawing_data.append(data) print(f已处理: {file}) except Exception as e: print(f处理 {file} 时出错: {e})这个过程就像是给每一张图纸建立了一份包含“视觉特征”和“文本摘要”的数字化档案。2.2 第二步构建“能理解人话”的检索核心有了所有图纸的“档案”下一步就是构建检索系统。当用户输入“找一个内径20mm外径40mm的轴承套”时系统需要理解这个查询。我们利用GME-Qwen2-VL-2B-Instruct的双重能力文本编码将用户的自然语言查询转换成一段数学向量称为查询向量。向量相似度匹配将这段查询向量与之前为每张图纸存储的“描述文本向量”和“图片嵌入向量”进行相似度计算比如使用余弦相似度。简单理解就是把文字和图片都变成同一套“语言”向量然后在向量空间里找和用户问题意思最接近的那些图纸。# 伪代码检索过程示意 import numpy as np from sentence_transformers import SentenceTransformer # 用于文本向量化 text_encoder SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) def search_drawings(query_text, drawing_data_list, top_k5): 根据文本查询检索相关图纸 # 1. 将用户查询转化为向量 query_vector text_encoder.encode(query_text) similarities [] for data in drawing_data_list: # 2. 计算与图纸描述向量的相似度假设已预先计算并存储 desc_sim cosine_similarity(query_vector, data[description_vector]) # 3. 也可以结合图片向量如果查询更偏形状如“找一个L形的板” # img_sim cosine_similarity(query_vector, data[embedding]) # 综合相似度 total_sim desc_sim # 这里简化实际可加权融合 similarities.append((total_sim, data)) # 4. 按相似度排序返回最相关的几个结果 similarities.sort(keylambda x: x[0], reverseTrue) return [data for _, data in similarities[:top_k]] # 示例查询 user_query 我需要一个厚度10mm上面有4个均布M6螺纹孔的方形安装板 results search_drawings(user_query, all_drawing_data) print(f为您找到 {len(results)} 个可能相关的图纸) for i, res in enumerate(results): print(f{i1}. 文件: {os.path.basename(res[file_path])}) print(f 描述摘要: {res[description][:100]}...) # 显示前100字符 print(f 标签: {, .join(res[tags])}) print(- * 30)2.3 第三步更直观的“以图搜图”除了用语言描述有时候直接画个草图更快。我们的系统也支持简单的草图检索。用户可以在画板上勾勒出零件的大致轮廓比如一个带键槽的轴截面系统将这张草图作为图像输入给模型提取其视觉特征向量然后直接与图纸库中的图片特征向量进行匹配找出形状相似的零件图纸。# 伪代码草图检索示意 def search_by_sketch(sketch_image, drawing_data_list, top_k5): 根据草图检索形状相似的图纸 # 1. 提取草图的视觉特征向量 sketch_vector model.get_image_embedding(sketch_image) similarities [] for data in drawing_data_list: # 2. 计算与库中图纸视觉向量的相似度 img_sim cosine_similarity(sketch_vector, data[embedding]) similarities.append((img_sim, data)) # 3. 排序返回 similarities.sort(keylambda x: x[0], reverseTrue) return [data for _, data in similarities[:top_k]]3. 实际效果真的能帮上忙吗我们用一个大约有500张各类零件图包括轴类、盘盖类、箱体类、支架类的小型内部图库做了测试。场景一模糊记忆的精确查找一位同事记得去年某个项目用过一种“一端有法兰中间有减重孔”的电机座但忘了文件名和具体位置。他用这句话查询系统返回的前三个结果中第二个就是他想要的图纸而那个图纸的文件名是“MOTOR_MOUNT_ASM_Rev3.dwg”光靠文件名搜索是不可能找到的。场景二基于功能的相似件查找新设计一个连接板需要参考类似功能的旧设计。查询“用于管道连接的、带密封槽的法兰”系统返回了几种不同口径和压力的法兰图纸为新材料选型和标准确认提供了快速参考。场景三草图辅助概念设计在概念设计阶段工程师随手画了一个“带加强筋的U形槽”草图进行搜索系统找到了几个结构相似的钣金件和铸件图纸虽然不完全一样但为其结构设计和工艺选择提供了有价值的借鉴。带来的改变是实实在在的查找时间从“小时级”降到“分钟级”尤其是对于非标件、特征复杂的零件优势极其明显。促进了设计重用很多“沉睡”在旧项目中的合理设计被重新发现避免了重复造轮子也保证了设计经验的一致性。降低了新人门槛新员工不熟悉公司庞大的图库通过自然语言描述就能快速找到参考案例加速上手过程。当然它也不是万能的。对于极其复杂的大型装配体工程图模型的细节理解能力会面临挑战对于一些标注极其密集或扫描质量不佳的图纸识别准确率也会下降。但这已经为我们打开了一扇新的大门。4. 总结与展望回过头来看用GME-Qwen2-VL-2B-Instruct来做SolidWorks工程图检索本质上是一次将AI的“视觉理解”和“语言理解”能力与工程领域具体痛点相结合的尝试。它不需要改变工程师现有的设计工具SolidWorks和习惯出二维图只是为海量的设计成果增加了一个智能化的“检索层”。实现过程比想象中要平滑核心在于设计好引导模型的“提示词”以及构建一个高效的向量索引和检索流程。对于中小型团队完全可以在本地部署保护设计数据隐私。未来这个方向还有很多可以深挖的地方。比如结合三维模型的轻量化文件进行检索体验会更直接或者与PDM/PLM系统深度集成让智能检索成为标准功能再进一步模型甚至可以在检索的基础上给出简单的修改建议或衍生设计。如果你也在受困于图纸管理效率不妨试试这个思路。从一个小的、定义清晰的图纸库开始用几行代码让AI先学起来你可能会发现那些曾经杂乱无章的设计资产正在变得前所未有的“好找”和“好用”。技术最终的价值就是让人的工作更简单、更高效。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。