type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth
基于GarmentCode的参数化和组件化服装版片生成
Github传送门:基于面向GarmentCode的参数化和组件化服装版片生成

1.设计背景
1.1绪论
人工智能技术在服装版片生成领域的应用,展现了计算机科学与服装设计交叉融合的无限潜力。这一领域不仅仅是技术的展示,更是艺术与工程的结合,它要求研究者具备多学科的知识和创新能力。目前,国内外的研究者在这一领域已经取得了显著的进展,他们的工作主要集中在以下几个方面:
- 基于神经符号模型的服装版片生成:代表性的研究如GarmentCode: Programming Parametric Sewing Patterns[9],提出了一种创新的方法,通过编程生成参数化的服装版片。这种方法不仅考虑了服装的几何形状、物理特性和拼接要求,还能够根据设计师的需求动态调整版片参数,从而实现高度定制化的设计。
- 基于图像的服装版片生成:如Image-Based Garment Pattern Generation[3],研究者开发了一种能够从单张或多张服装图片中提取版片的技术。这种方法利用先进的计算机视觉技术,保留了服装的原始形状、细节和风格,使得设计师能够快速复制和修改现有设计。
- 基于三维模型的服装版片生成:3D Garment Pattern Generation from 3D Body Scans[4]的研究则利用三维人体扫描数据来生成版片。这种方法不仅能够精确地捕捉人体的尺寸和姿态,还能够确保服装的拟合度和舒适度,为定制化服装提供了强有力的技术支持。
- 基于3D点云的服装生成:NeuralTailor: Reconstructing Sewing Pattern Structures from 3D Point Clouds of Garments[8]的研究则探索了一种全新的方法,它能够从3D点云数据中重建缝纫版片。这项技术采用了点级注意力机制和集合回归方法,能够处理各种复杂的服装拓扑结构,其泛化能力强,即使是在训练过程中未曾见过的版片类型也能够成功重建。
除了上述研究方向,人工智能技术在服装版片生成中的应用还包括了深度学习算法的优化、大数据分析以及云计算等技术的结合使用。这些技术的融合不仅提高了版片生成的效率和准确性,还为服装设计的个性化和智能化提供了新的可能性。随着技术的不断进步,未来的服装设计将更加注重消费者的个性化需求,服装版片生成的智能化水平也将达到新的高度。这一领域的发展不仅将推动服装行业的数字化转型,还将为消费者带来更加丰富多样和高度定制化的服装选择。这是一个充满创新和挑战的时代,人工智能技术将在其中扮演着越来越重要的角色。
1.2选题意义
在当前的数字化时代,服装设计领域正经历着一场由人工智能技术驱动的变革。本设计主题深入探讨了面向对象程序设计(OOP)原则在服装设计中的应用,特别是如何通过参数化和组件化的方法,实现连衣裙设计过程的高度定制化和自动化。这种创新的设计方法不仅提高了设计的灵活性和效率,而且为人工智能在服装设计领域的深入应用奠定了坚实的基础。
通过参数化设计,设计师可以定义一系列可调整的设计参数,如裙长、腰围、领口样式等,这些参数可以根据用户的具体需求或预设的规则进行动态调整。这种方法的应用,使得每一件服装都能够精确地符合穿着者的个人尺寸和风格偏好,从而提升了服装的个性化水平和用户的满意度。
组件化设计进一步增强了这种个性化体验。它允许用户将连衣裙分解为独立的部分,如袖子、领口、裙摆等,每个部分都可以独立设计和修改。这种模块化的方法不仅加快了设计的迭代过程,也便于在生产过程中进行定制化调整,从而实现快速响应市场变化和消费者需求的能力。
此外,本设计主题还强调了构建庞大的学习数据库对于AI生成版片项目的重要性。通过收集和分析大量的设计数据,人工智能可以学习到复杂的设计规则和用户偏好,从而能够自动生成满足特定要求的服装版片。这不仅可以减少设计师的工作负担,还可以推动服装设计的个性化和智能化发展。
随着人工智能技术的不断进步和优化,AI不仅能够复制现有的设计风格,还能够创造出全新的设计理念。这将推动服装设计的创新,使得设计不再受限于传统的设计方法和流程,而是能够更加灵活地适应快速变化的市场和消费者的多样化需求。
综上所述,本设计主题不仅具有深远的理论意义,也具有显著的实践价值。它不仅能够推动服装设计行业的技术进步,还能够引领行业走向更加个性化、智能化和可持续化的未来。在这个充满挑战和机遇的新时代,我们期待着人工智能技术在服装设计领域发挥更大的作用,为全球消费者带来更加丰富多彩和高度定制化的服装选择。
2.方案构思
2.1设计创新点及设计源点
这项设计在服装设计领域的创新点主要体现在“参数化”、“组件化”以及”兼容性“这三个方面。
首先,“参数化”设计是这项设计的一个重要创新点。通过将设计元素如裙长、腰围、领口样式等转化为可调整的参数,使得服装设计过程更加灵活和精确。这种方法允许设计师或用户根据具体需求快速调整这些参数,从而生成符合个人尺寸和风格偏好的服装版片。参数化设计的应用大大提高了服装定制的效率,同时也降低了设计修改的复杂度。
其次,“组件化”设计是这项设计的另一个创新点。通过将连衣裙等服装分解为袖子、领口、裙摆等独立的部件,每个部件都可以单独设计、修改和测试。这种模块化的方法不仅加快了设计的迭代过程,也使得服装的各个部分可以被重用和重新组合,创造出新的设计。组件化设计支持了更高层次的创新和个性化,为服装设计带来了更多的可能性。
最后,这项设计的产出能够与主流的服装建模软件接轨。这意味着利用该程序生产的服装板片可以直接应用于现有的工业流程中,与市场上广泛使用的软件工具如Style 3D、Clo3D、Marvelous Designer等无缝对接。这种兼容性不仅为设计师提供了一个熟悉的工作环境,还确保了设计的实用性和可行性,使得设计成果可以更容易地转化为实际生产的服装。
综上所述,这项设计通过结合参数化和组件化设计,并确保与主流软件的兼容性,展示了在服装设计领域的深刻洞察和创新能力。这些创新点不仅提升了设计的灵活性和效率,也为服装行业的数字化转型和未来发展奠定了坚实的基础。
2.2设计概念草案
设计一个图形用户界面(GUI)允许设计师通过一个直观的界面与预先定义好的服装版片模板进行交互。设计师可以在GUI中选择不同的服装部件,并根据模板中定义的参数范围进行调整。
表2.1 功能描述
功能 | 描述 |
模板读取 | 从预先定义好的yaml模板文件中读取服装结构、可调参数及其范围 |
部件选择 | 设计师可以在GUI中选择模板定义的服装部件,将其组合成一件完整的服装 |
参数调整 | 设计师可以使用下拉菜单、滑动条、复选框等控件修改各类参数 |
实时预览 | 设计师在调整参数时,GUI将提供实时预览,展示当前的设计效果 |
设计导出 | 一旦设计完成,设计师可以将调整后的参数导出,以便进一步的生产或存档 |
用户界面分为四个区域:部件选择区、参数调控区、预览窗口、文件保存区。部件选择区域和参数调整控件区域的紧密结合,使得设计师能够轻松地进行部件选择和参数调整。实时预览窗口则为设计师提供了即时反馈,确保设计的准确性。文件保存区提供设计文件保存的功能。
表2.2 用户界面设计
界面分区 | 功能 |
部件选择区 | 允许设计师浏览和选择所有可用的服装部件,相当于导航栏,当点击部件选项卡后,右侧界面展示该部件对应的参数面板 |
参数调控区 | 提供滑动条、下拉菜单、复选框三种类型的控件,分别用于精确调整整数、浮点数、枚举和布尔值四种类型的设计参数 |
实时预览窗口 | 位于界面中央,提供2D服装版片平铺的实时预览,在设计师调节参数时,可以即时查看服装版片的形状变化 |
文件保存区 | 包含文件路径输入框、“浏览”按钮和“保存”按钮,用于管理设计文件的输出路径,提供储存设计文件的功能 |
2.3用户画像
该应用程序的主要用户可以分成两类:服装设计师和算法工程师。
设计师主要利用直观的图形用户界面(GUI)进行连衣裙的参数化和组件化设计。他们通常具备深厚的时尚和服装设计知识,熟练操作设计软件,并能够根据市场趋势和客户需求创造出新款式。设计师的主要需求是一个功能全面且易于使用的GUI面板,这样他们就可以快速选择和调整服装部件及其参数,并通过实时预览功能即时查看他们的设计更改。他们面临的挑战是减少重复性任务和提高设计方案的迭代速度。
与此同时,算法工程师则专注于后端的技术细节,他们通过命令行工具批量生成服装版片文件,为AI模型的学习和进步提供数据支持。这些工程师通常精通编程,了解机器学习算法,并能够有效地处理和分析大量数据。他们需要的是一个强大的命令行工具,以便于自动化地生成高质量的数据集,并支持数据的快速迭代和优化。他们的挑战在于简化数据准备流程,并寻找提高AI学习效率和准确性的方法。
3.初步设计
3.1用户需求
服装设计师和算法工程师作为两类主要用户群体,他们的需求体现了服装设计行业中创意与技术的结合。设计师追求的是能够将他们的创意快速准确地转化为可视化的设计。他们需要一个直观的图形用户界面(GUI),通过这个界面,他们可以轻松地选择和调整服装的各个部件及其参数,如裙长、腰围、领口样式等。实时预览功能对于他们来说至关重要,因为它可以即时展示设计调整的效果,帮助他们做出决策并优化设计。此外,设计师还需要能够方便地保存和导出他们的设计参数,以便于后续的生产和分析。
另一方面,算法工程师的需求则更偏向于技术和数据处理。他们的主要任务是使用命令行工具批量生成服装版片文件,用于训练AI模型。因此,他们需要的是一个功能强大且可靠的命令行界面,它能够支持批量的服装版片文件生成。算法工程师还需要确保生成的数据集具有高质量,以便AI模型可以从中学习并提高其预测的准确性。他们追求的是优化AI学习过程的工具和方法,以提高整体设计流程的智能化和自动化水平。
3.2用户旅程图
设计师的旅程从打开图形用户界面(GUI)开始。他们首先会遇到一个部件选择区域,这里列出了所有可用的服装部件。设计师根据需要选择部件,系统随即展示相应的参数面板。在参数调整控件区域,设计师通过滑动条和下拉菜单调整各种设计参数,如裙长、腰围和领口样式。他们可以实时预览2D板片平铺的效果,确保设计符合预期。最后,设计师通过文件保存区域的“浏览”和“保存”按钮,将设计参数导出,完成设计旅程。
算法工程师的旅程则更偏向技术操作。
算法工程师使用预先编写的代码来指定服装的各个部分的组件类型。例如,他们会指定上衣为无袖衬衫(Shirt),不包含腰带(Wb.FALSE),以及下半身为铅笔裙(PencilSkirt)。
接下来,算法工程师定义一系列可变字段,这些字段将用于生成不同的设计变体。这些字段包括上衣长度(u_length)、上衣宽度(u_width)、袖子长度(s_length)等。
最后,算法工程师通过命令行输入以下命令,批量生成数据集。在此过程中,算法工程师通过命令行界面设置配置参数,如人体尺寸文件类型(-b)、输出文件路径(-o)和生成服装件数的上限(-p)。
这个过程生成了大量的设计参数文件,供AI模型学习使用。算法工程师的旅程以确保数据集的质量和多样性为目标,以支持AI在服装设计中的应用。
图3.1 服装设计师的用户旅程图
步骤 | 用户体验 | 用户期望 | 设计要点 |
选择部件 | 一个清晰的导航栏展示了所有可用的服装部件,使得选择过程既直观又高效。 | 设计师期望能够轻松地找到想要调控的部件。 | 根据部件对应的身体位置排列导航栏标签顺序,允许快速切换和比较不同部件。 |
调控参数 | 在调整设计参数时,设计师通过滑动条、下拉菜单和复选框等控件进行操作。 | 设计师期望控件能够精确反映出他们的调整,并且这些调整能够即时影响到设计。 | 确保控件的响应速度快,操作手感良好。 |
实时预览 | 实时预览是设计师的核心体验之一,他们能够立即看到每一个调整带来的变化。 | 设计师期望预览功能能够贴近主流设计软件中的表现,帮助他们做出更好的决策。 | 实现无延迟的实时预览功能,让设计师能够立即看到他们的更改。 |
导出文件 | 在最后一步,设计师能够轻松地保存和导出他们的设计成果文件。 | 设计师期望能够快速且准确地保存他们的设计参数,并兼容于主流服装设计软件。 | 确保文件格式兼容性,以便于后续的修改。提供明确的反馈,确认设计师的文件已经成功保存。 |
图3.2 算法工程师的用户旅程图
步骤 | 用户体验 | 用户期望 | 设计要点 |
配置元数据 | 算法工程师体验到的是代码的可读性和易用性。他们通过预先编写的代码来指定服装的各个部分。 | 算法工程师期望代码能够简洁明了,可读性高。 | 服装部件的命名采用统一的命名风格,如全小写、单词之间用“_”分隔。 |
指定可变字段 | 在定义可变字段时,算法工程师需要一个清晰的结构来组织和管理这些字段。 | 算法工程师希望能够轻松地定义字段列表,以生成不同的设计变体。 | 提供一个ReadMe文档,罗列出所有的可变字段和含义,供算法工程师查阅。 |
导出设置 | 在设置导出参数时,算法工程师在一个简单且强大的命令行界面配置导出参数。 | 算法工程师期望命令行工具提供灵活性,允许他们自定义输出和生成的数据集。 | 命令行参数应有明确的说明,帮用户理解每个选项的作用。每个参数应当设置默认值以减少配置错误。 |
运行脚本 | 在运行脚本生成数据集的最后步骤中,算法工程师体验到一个顺畅且无误的执行过程。 | 算法工程师希望脚本运行稳定,能够快速生成大量数据,且尽量不会出现错误或中断。 | 应提供清晰的进度指示和完成通知。在出现错误时,脚本应提供清晰的错误消息。 |
3.3信息架构
GUI部分的用户输入是整个设计流程的起点,服装模板部分是将创意转化为具体设计的核心,而兼容性处理部分则是确保设计成果具有广泛适用性的关键。这样的设计架构不仅提高了工作效率,也提升了设计的灵活性和可用性,使得最终的产品能够满足不同用户和平台的需求。
本程序设计的信息架构可以分成GUI部分、服装模板部分、兼容处理部分三大部分。
服装模板部分是程序的设计核心,它是基于GarmentCode: Programming Parametric Sewing Patterns[9]的组件设计架构,使用template.yaml文件预定义了服装设计的模板。这些模板包含了服装设计的参数和结构,允许用户或程序根据需要生成特定的服装设计。这部分的作用是提供一个标准化的起点,使得服装设计的过程更加高效和规范化。
兼容性处理部分确保程序输出的JSON设计文件能够与主流的服装设计软件(如Style 3D)兼容。它涉及到格式转换、数据结构适配和确保文件符合行业标准。兼容性处理的目的是让设计文件能够在不同的软件平台上被无缝使用,从而提高设计文件的通用性和可用性。
在本程序中,GUIPattern类负责定义GUI的外观和风格,包括颜色、布局和控件样式等。它提供了一种标准化的方法来应用设计元素,确保不同的界面部分能够协调工作。
而GUIState类则专注于跟踪用户与界面的交互过程中的动态变化。它记录用户的每次点击、输入和选择,确保这些交互能够正确地更新应用程序的状态。这个类的存在使得用户的操作能够得到及时的响应,并且在需要时,能够保存和恢复用户的会话状态。


服装模板的信息架构是一个复杂的参数化系统,它允许用户通过选择不同的值来定制服装设计。每个部分都包含了多个属性,这些属性定义了服装的不同特征,如尺寸、形状和样式。
这个模板通过提供一系列可选的值和类型,使得用户能够灵活地定制服装。每个属性都有一个当前值(v)和一个值的范围(range),用户可以在这个范围内选择合适的值来定制服装。此外,每个属性还定义了它的类型(type),如布尔值(bool)、浮点数(float)、整数(int)或可选择的值(select)。这种参数化的设计使得服装模板非常灵活,能够适应各种不同的设计需求。
为了将特定格式的YAML文件转换为主流服装建模软件(如Style 3D)能够识别的版片JSON文件,需要一个处理兼容性的功能模块。它涉及到几何计算、坐标转换和数据格式化等操作。

3.4技术可行性分析
在技术可行性分析方面,利用OOP原则可以构建一个灵活且可扩展的服装设计系统,该系统能够处理大量的用户输入参数,并生成相应的版片设计。AI算法需要足够的训练数据来学习设计规则和用户偏好。此外,生成的版片设计应能够与主流的服装建模软件兼容,如Style 3D、Clo3D和Marvelous Designer,确保无缝集成。硬件要求也是一个考虑因素,用户的设备需要有足够的处理能力来运行设计软件,对于高级功能,可能需要专业的图形处理硬件。最后,市场适应性也是一个重要的考虑点,需要评估市场对于高度定制化和自动化服装设计的需求,以及不同市场的技术接受度和用户习惯。
在服装设计领域,参数化设计的核心在于将设计元素转化为可调整的参数,这些参数包括但不限于裙长、腰围、领口样式等。这种方法的可用性体现在其为设计师和用户提供了前所未有的灵活性。设计师可以通过简单的参数调整来迅速改变设计,满足不同客户的需求。例如,通过调整裙长参数,可以轻松地为不同身高的用户设计出合适的连衣裙。同样,腰围参数的调整可以适应不同体型的用户,而领口样式的变化则可以满足不同场合的着装要求。参数化设计的这种灵活性不仅提高了设计的效率,也极大地增强了服装的可定制性。
组件化设计则将连衣裙等服装分解为独立的部件,如袖子、领口、裙摆等。每个部件都可以单独设计、修改和测试,然后再组合成完整的服装。这种设计方法的可用性在于它支持了快速迭代和优化。设计师可以专注于单一部件的设计,提高设计质量,同时也可以通过组合不同的部件创造出多样化的服装款式。此外,组件化设计还支持了服装的可重用性,设计师可以将已有的部件设计应用于新的服装中,节省时间和资源。
为了实现参数化和组件化设计的高度可行性,需要强大的技术支持。这包括但不限于用户界面(UI)的设计、后端数据处理能力、以及与其他软件工具的兼容性。用户界面需要简洁直观,使设计师和用户能够轻松地输入和调整参数。后端系统则需要能够快速准确地处理这些参数,并生成相应的版片设计。同时,为了确保设计的实用性和生产的可行性,生成的版片设计需要能够与市场上广泛使用的服装建模软件如Style 3D、Clo3D、Marvelous Designer等无缝对接。
3.5可用性研究
在现代服装设计领域,将面向对象程序设计(OOP)的原则应用于连衣裙设计,通过参数化和组件化的方法,不仅提高了设计的灵活性和效率,还为AI在服装设计领域的应用奠定了基础。参数化设计允许设计师定义一系列可调整的设计参数,如裙长、腰围、领口样式等,这些参数可以根据用户的输入或预设规则动态调整。而组件化设计则使得连衣裙可以分解为独立的部分,如袖子、领口、裙摆等,每个部分都可以独立设计和修改,再组合成完整的连衣裙。这种模块化的方法不仅使设计师能够快速迭代和优化设计,也便于在生产过程中进行定制化调整。
此外,构建庞大的学习数据库对于AI在服装设计领域的应用至关重要。通过收集和分析大量的设计数据,AI可以学习到复杂的设计规则和用户偏好,从而能够自动生成满足特定要求的服装版片。这不仅减少了设计师的工作负担,还推动了个性化和智能化服装设计的发展。随着AI技术的不断学习和优化,它能够不仅复制现有的设计风格,还能创造出全新的设计,推动服装设计的创新,使设计不再受限于传统的设计方法和流程。
4.方案实现
4.1技术架构
该应用程序的技术架构主要由核心库pygarment、装备程序garment_programs和图形模块GUI组成。核心库pygarment负责处理服装设计的基本逻辑和算法,而garment_programs则提供了一系列预定义的服装模型和设计脚本。图形模块GUI为用户提供了一个直观的界面,用于创建和修改服装设计。
其中,pygarment是GarmentCode: Programming Parametric Sewing Patterns[9]的核心库,包含了基本类型(如Edge, Panel, Component, Interface等),还包括了一组工具函数,用于处理服装设计中的常见计算和转换,如尺寸调整、形状变换和结构优化。
表4.1.1 pygarment技术架构
子模块 | 功能 |
base | 定义了缝纫图案设计中使用的基本数据类型 |
component | 包含定义服装组件的类,如袖子、领口等 |
connector | 提供了连接不同服装组件的逻辑 |
edge_factory | 包含用于生成边缘类型的工厂类 |
edge | 定义了缝纫图案中边缘的数据结构 |
flags | 包含用于标记不同状态和属性的标志 |
generic_utils | 提供了通用的工具函数,用于各种操作和计算 |
interface | 定义了组件之间交互的接口 |
operators | 包含用于操作和变换服装组件的运算符 |
panel | 定义了服装版片的数据结构 |
params | 包含参数化设计中使用的参数和配置 |
garment_programs是GarmentCode: Programming Parametric Sewing Patterns[9]架构中的装备程序集合,提供了一系列预定义的服装设计模板和构造函数。它包含了各种服装类型的基本框架,如裙子、上衣、裤子等,以及相应的设计参数和规则。通过这些程序,用户可以快速生成标准的服装版型,或者在此基础上进行定制和创新。此外,它还提供了与核心库pygarment的接口,允许用户将基本类型和操作符应用于具体的设计项目中,从而实现从概念到成品的完整服装设计流程。
garment_programs包含多个子模块:meta_garment、bands、bodices、circle_skirt、collars、godet、pants、shapes、skirt_levels、skirt_paneled、sleeves和tee;meta_garment类定义了服装的元数据,其他的类表示各种服装部件,提供接口给meta_garment类,以指定不同部件的组合。
表4.1.2 meta_garment模块功能
类/方法 | 功能 |
MetaGarment | 这个类代表一个元服装组件,它可以包含上衣、腰带和下装。构造函数接收名称、身体尺寸和设计参数。在这个类中,首先检查设计参数中是否指定了上衣,如果指定了,则创建一个上衣实例。然后,检查是否指定了腰带,如果指定了,则创建一个腰带实例,并将其放置在上衣下方。接着,检查是否指定了下装,如果指定了,则创建一个下装实例,并将其放置在上衣或腰带下方。最后,定义了缝合规则以连接各个组件。 |
表4.1.3 bands模块功能
类/方法 | 功能 |
BandPanel | 基础类,代表一个有四条边的版片,通过顶点定义并环绕形成一个封闭的形状。 |
WB | 由两个 BandPanel 实例组成的组件,代表腰带的前面和后面。 |
CuffBand | 用于创建袖口的类,表示方形袖口。 |
CuffSkirt | 用于创建袖口的类,表示喇叭形袖口。 |
CuffBandSkirt | 用于创建袖口的类,表示由长方形袖口和喇叭形袖口拼接而成的袖口。 |
表4.1.4 bodice模块功能
类/方法 | 功能 |
BodiceFrontHalf | 这个类代表上衣的前半部分,继承自pyg.Panel,表示它是一个版片。构造函数接收名称、身体尺寸、设计参数以及两个省道深度参数。在这个类中,首先计算了上胸围、腰围、最大长度、胸点距离等基本尺寸。然后,根据这些尺寸计算出前片的宽度、腰部宽度、肩部倾斜等。此外,还定义了省道的深度和宽度,并通过pyg.ops.cut_into_edge方法在边缘上创建省道。最后,定义了几个接口,用于连接不同的版片部分。 |
BodiceBackHalf | 这个类代表上衣的后半部分,的结构与前片类似,但是有一些差异,比如后片的宽度计算方式不同,以及底边省道的处理。 |
BodiceHalf | 组合了前片和后片,创建了一个完整的上衣半身,还包括了袖子和领子的处理。如果设计指定为无袖无领,则调用make_strapless方法进行调整。否则,会添加袖子和领子,并设置相应的接口和缝合规则。 |
Shirt | 这个类代表一件完整的衬衫,组合了两个BodiceHalf,一个用于右半身,另一个用于左半身。它处理了不对称设计的情况,并设置了缝合规则以连接不同的接口。 |
FittedShirt | 这是Shirt的派生类,专门用于创建合身的衬衫,的处理过程与Shirt类似,但是设计参数化有显著差异,因此单独作为一个类。 |
表4.1.5 circle_skirt模块功能
类/方法 | 功能 |
CircleArcPanel | 这个类代表单片圆弧裙板,继承自pyg.Panel,表示它是一个版片。构造函数接收名称、顶部半径、长度和角度。在这个类中,首先计算了上圆弧和下圆弧的宽度,以及垂直于两圆弧切线的长度。然后,定义了顶部和底部的圆弧边缘,并通过self.edges.close_loop()方法让边循环,形成一个封闭的圆弧。此外,还定义了四个接口,分别对应顶部、底部、左侧和右侧。 |
SkirtCircle | 这个类代表一个简单的圆形裙,继承自pyg.Component,表示它是一个组件。构造函数接收身体尺寸和设计参数。在这个类中,首先根据身体尺寸和设计参数计算了腰围、裙长、圆弧角度和圆弧半径。然后,创建了前后两个CircleArcPanel实例,分别代表裙子的前后部分,并通过translate_by方法进行位置调整。如果设计参数指定了裁剪,则调用add_cut方法在裙板上添加裁剪。最后,定义了缝合规则和接口,用于连接前后裙板。 |
表4.1.6 collars模块功能
类/方法 | 功能 |
VNeckHalf | 这个类代表单片圆弧裙板,继承自pyg.Panel,表示它是一个版片。构造函数接收名称、顶部半径、长度和角度。在这个类中,首先计算了上圆弧和下圆弧的宽度,以及垂直于两圆弧切线的长度。然后,定义了顶部和底部的圆弧边缘,并通过self.edges.close_loop()方法让边循环,形成一个封闭的圆弧。此外,还定义了四个接口,分别对应顶部、底部、左侧和右侧。 |
SquareNeckHalf | 这个方法生成一个方形领口,同样接受领口深度和宽度作为参数,并返回一个由三个点定义的边缘序列,形成一个方形。 |
TrapezoidNeckHalf | 这个方法创建一个梯形领口。除了深度和宽度,还可以接受一个角度参数。如果角度接近0或180度,它会退化成一个V形领口。 |
CurvyNeckHalf | 这个方法用于创建一个带有S形曲线的领口,使用贝塞尔曲线控制点来定义曲线的形状。 |
CircleArcNeckHalf | 这个方法生成一个由圆弧边表示的领口,可以接受一个角度参数来定义圆弧的大小。 |
CircleNeckHalf | 这个函数方法创建一个完美的圆弧领口,使用三个点来确定圆弧,并将完整的圆弧分成两半。 |
NoPanelsCollar | 这个类创建一个只形成投影形状的领口,使用前面定义的领口函数来创建前后领口的形状,并将它们存储在接口中。 |
Turtle | 这个类创建一个方形领,强制使用CircleNeckHalf函数来创建前后领口,并根据身体尺寸和设计参数调整领口的深度。 |
SimpleLapelPanel | 这个类为简单的翻领前部分创建一个版片,使用贝塞尔曲线来定义翻领的形状。 |
SimpleLapel | 这个类创建一个简单的翻领,可以使用任何形状的领口来创建前领口,并强制使用CircleNeckHalf函数来创建后领口,还根据设计参数调整翻领的站立性。 |
表4.1.7 godet模块功能
类/方法 | 功能 |
Insert | 这个类代表一个插入片,它是一个三角形的版片,用于插入到裙子的下摆中以增加裙摆的宽度和波动性。构造函数接收一个标识符、宽度和深度。在这个类中,首先定义了一个由三个点组成的闭合边缘序列,形成一个等腰三角形。然后,定义了一个接口,用于将插入片连接到裙子上。inserts方法负责创建插入片,将它们添加到裙子版片中,并将创建的插入片与裙子连接起来。它使用勾股定理来计算切口的尺寸,并确保切口能够与插入片匹配。 |
GodetSkirt | 这个类代表一个鱼尾裙组件。它继承自pyg.Component,表示它是一个组件。构造函数接收身体尺寸和设计参数。在这个类中,首先根据设计参数创建了基础裙子。然后,根据裙子的类型和设计参数调整插入片的深度。接着,对于裙子底部的每个边缘和版片,调用inserts方法来添加插入片。最后,定义了顶部接口。 |
表4.1.8 pants模块功能
类/方法 | 功能 |
PantPanel | 这个类代表基础裤板,可以选择在腰部区域进行合身(使用省道)或褶皱处理。构造函数接收名称、身体尺寸和设计参数。在这个类中,首先计算裤子的宽度、下摆宽度、长度、腰围、臀部深度、省道位置和省道深度。然后,根据设计参数评估裤子的形状,并在腰部分配额外的面料。接着,定义了裤子的右侧、顶部、裆部和左侧边缘,并将它们连接成一个闭环。最后,定义了外部接口,并在顶部添加了一个省道。 |
PantsHalf | 这个类代表裤子的一半。构造函数接收标签、身体尺寸和设计参数。在这个类中,首先创建前后的PantPanel实例,并进行位置调整。然后,定义了缝合规则,并根据设计参数添加袖口。最后,定义了接口。 |
Pants | 这个类代表整条裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建左右两个PantsHalf实例,并将左侧实例进行镜像处理。然后,定义了缝合规则,并将接口组合起来。 |
WBPants | 这个类代表带有腰带的裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建一个Pants实例,然后创建一个腰带实例,并进行位置调整。最后,定义了缝合规则。 |
表4.1.9 skirt_levels模块功能
类/方法 | 功能 |
SkirtLevels | 这个类代表一个由多个缝合在一起的裙子层组成的裙子。构造函数接收身体尺寸和设计参数。在这个类中,首先根据设计参数创建基础裙子类的实例。然后,根据设计参数中指定的层数和每层的褶皱度,循环创建每一层的裙子。对于每一层裙子,计算上一层裙子底部接口的宽度,并乘以褶皱度以确定新层的顶部宽度;调整身体尺寸的waist属性以欺骗裙子类,使其产生正确的宽度;创建新层的裙子实例,并根据需要进行旋转以适应基础裙子的不对称性;将新层放置在上一层的底部接口下方,并定义缝合规则以连接各层;最后,定义了顶部接口,它是第一层裙子的顶部接口。 |
表4.1.10 skirt_paneled模块功能
类/方法 | 功能 |
PantPanel | 这个类代表基础裤板,可以选择在腰部区域进行合身(使用省道)或褶皱处理。构造函数接收名称、身体尺寸和设计参数。在这个类中,首先计算裤子的宽度、下摆宽度、长度、腰围、臀部深度、省道位置和省道深度。然后,根据设计参数评估裤子的形状,并在腰部分配额外的面料。接着,定义了裤子的右侧、顶部、裆部和左侧边缘,并将它们连接成一个闭环。最后,定义了外部接口,并在顶部添加了一个省道。 |
PantsHalf | 这个类代表裤子的一半。构造函数接收标签、身体尺寸和设计参数。在这个类中,首先创建前后的PantPanel实例,并进行位置调整。然后,定义了缝合规则,并根据设计参数添加袖口。最后,定义了接口。 |
Pants | 这个类代表整条裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建左右两个PantsHalf实例,并将左侧实例进行镜像处理。然后,定义了缝合规则,并将接口组合起来。 |
WBPants | 这个类代表带有腰带的裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建一个Pants实例,然后创建一个腰带实例,并进行位置调整。最后,定义了缝合规则。 |
表4.1.11 sleeves模块功能
类/方法 | 功能 |
PantPanel | 这个类代表基础裤板,可以选择在腰部区域进行合身(使用省道)或褶皱处理。构造函数接收名称、身体尺寸和设计参数。在这个类中,首先计算裤子的宽度、下摆宽度、长度、腰围、臀部深度、省道位置和省道深度。然后,根据设计参数评估裤子的形状,并在腰部分配额外的面料。接着,定义了裤子的右侧、顶部、裆部和左侧边缘,并将它们连接成一个闭环。最后,定义了外部接口,并在顶部添加了一个省道。 |
PantsHalf | 这个类代表裤子的一半。构造函数接收标签、身体尺寸和设计参数。在这个类中,首先创建前后的PantPanel实例,并进行位置调整。然后,定义了缝合规则,并根据设计参数添加袖口。最后,定义了接口。 |
Pants | 这个类代表整条裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建左右两个PantsHalf实例,并将左侧实例进行镜像处理。然后,定义了缝合规则,并将接口组合起来。 |
WBPants | 这个类代表带有腰带的裤子。构造函数接收身体尺寸和设计参数。在这个类中,首先创建一个Pants实例,然后创建一个腰带实例,并进行位置调整。最后,定义了缝合规则。 |
表4.1.12 godet模块功能
类/方法 | 功能 |
Insert | 这个类代表一个插入片,它是一个三角形的版片,用于插入到裙子的下摆中以增加裙摆的宽度和波动性。构造函数接收一个标识符、宽度和深度。在这个类中,首先定义了一个由三个点组成的闭合边缘序列,形成一个等腰三角形。然后,定义了一个接口,用于将插入片连接到裙子上。inserts方法负责创建插入片,将它们添加到裙子版片中,并将创建的插入片与裙子连接起来。它使用勾股定理来计算切口的尺寸,并确保切口能够与插入片匹配。 |
GodetSkirt | 这个类代表一个鱼尾裙组件。它继承自pyg.Component,表示它是一个组件。构造函数接收身体尺寸和设计参数。在这个类中,首先根据设计参数创建了基础裙子。然后,根据裙子的类型和设计参数调整插入片的深度。接着,对于裙子底部的每个边缘和版片,调用inserts方法来添加插入片。最后,定义了顶部接口。 |
表4.1.13 tee模块功能
类/方法 | 功能 |
TorsoFrontHalfPanel | 这个类定义了上衣的前半部分。它根据身体的胸围尺寸和设计参数来确定版片的宽度和长度。版片的长度会根据肩部倾斜度进行调整,以确保袖子的正确贴合。此外,它还定义了几个接口,用于连接版片的外侧、内侧、肩部和底部,以及用于袖子和领口投影的参考点。 |
TorsoBackHalfPanel | 这个类定义了上衣的后半部分。它的工作原理与前半部分类似,但没有考虑前半部分特有的调整。它也定义了连接版片各部分的接口,以及用于袖子和领口投影的参考点。 |
本应用程序在GarmentCode: Programming Parametric Sewing Patterns[9]构建的组件设计框架基础上,对“连衣裙”这一服装品类的组件源码进行拓展和优化,形成一套新的可调配参数空间。
其一,归一化设计参数。通过将所有的尺寸参数从绝对尺寸(如厘米、英尺)按人体参数的比例缩放到一个标准范围内(如0到1之间)。例如,使用腿长的百分比来指定裙长。目的是为了创建一个统一的标准,使得设计参数之间可以相互比较和转换。它允许设计师在不同尺寸和款式之间迅速调整,可以更容易地控制和预测最终产品的尺寸效果,从而确保设计的一致性和可重复性,
其二,调试并限定设计参数的范围。即确定参数的最大和最小值,以确保设计的可行性和实用性。在服装设计中,这有助于防止不切实际的尺寸和形状的产生,同时也保证了服装的舒适度和美观度。例如,对于连衣裙的腰围参数,需要根据身体参数来设定一个合理的范围,以适应不同身材的穿着者。
其三,新增必要的设计参数。本应用程序在GarmentCode[9]构建的参数空间基础上,新增了“裙后片省道深度”(front_dart、back_dart)、领口贝塞尔曲线控制点(f_bezier_controlpoints_x)等必要的设计参数,从而实现更专业化、更精细化、更符合服装工业生产逻辑的参数空间。

4.2前端开发
本应用程序的前端是通过GUI模块实现是整个程序与用户交互的,模块中有GUIPattern和GUIState两个类。
GUIPattern类是一个图形用户界面(GUI)的后端实现,它负责管理用户界面的状态和与之相关的数据。
表4.2.1 GUIPattern类的功能
功能 | 实现 |
初始化和路径管理 | 1. _init_方法初始化类的属性,创建日志和临时文件夹来存储数据。
2. save_path用于存储日志文件,而 tmp_path 用于存储临时文件。 |
状态检查 | 1. isReady 方法检查是否已经加载了身体参数文件和设计参数文件,这是进行服装设计和保存前的必要条件。 |
文件和参数管理 | 1. new_body_file 和 new_design_file 方法用于加载新的身体参数文件和设计参数文件。
2. set_design_param 方法允许动态地更新设计参数,并根据需要重新加载服装模型。 |
服装模型重载 | 1. reload_garment 方法使用当前的身体参数和设计参数重新生成服装模型。
2. sync_left 方法用于同步左右侧的设计参数,以支持对称的设计。 |
视图序列化和文件保存 | 1. _view_serialize 方法将服装模型的视觉表示保存为 SVG/PNG 文件,以便在用户界面中显示。
2. clear_tmp 方法清理临时文件夹,以便为新的模型视图腾出空间。
3. save 方法将当前的服装设计保存为 JSON 文件,并打印成功消息。 |
GUIState将用户界面的各个部分联系起来,确保用户的输入能够正确地反映在应用程序的状态中,并且用户界面能够根据这些状态变化进行更新。它是 PySimpleGUI 应用程序中用户交互逻辑的核心。
表4.2.1 GUIState类的功能
功能 | 实现 |
画布和视觉更新 | 1. upd_canvas_size:如有必要,调整画布大小以适应新的视觉元素。
2. upd_pattern_visual:在画布上更新服装图案的视觉表示,根据需要与身体轮廓对齐并调整边距。 |
字段更新 | 1. upd_fields_body:使用从文件加载的当前身体参数更新输入字段。
2. upd_fields_design:与身体字段类似,它使用从文件加载的值更新设计参数字段。 |
事件处理 | 1. event_loop:主事件循环,处理所有用户交互,包括文件选择、参数更新和切换身体轮廓的显示。 |
UI | 1. input_text_on_enter:修改文本输入元素,只有在按下 Enter 键时才触发事件。
2. prettify_sliders:调整滑块旋钮的外观,使其平坦且小巧,增强界面的视觉吸引力。 |
实用函数 | 1. get_keys_by_instance 和 get_keys_by_instance_tag:帮助函数,根据实例类型或标签检索小部件键,便于管理 UI 元素。 |
错误处理 | 1. 应用程序包括错误处理功能,以捕获和显示异常,确保用户被告知交互过程中发生的任何问题。 |
按照方案构思中的2.2 设计概念草案所述,用户界面分为四个区域:部件选择区、参数调控区、预览窗口、文件保存区。最终呈现效果如下:

4.3API集成
本应用程序参考了GarmentCode[8]的基础架构,采用面向对象的编程原则,通过继承机制实现了服装设计的模块化和参数化,提供了一种新的方式来设计和构建服装图案。它利用面向对象编程的原则,允许设计者形式定义服装的各个部分,从而实现高度定制化和参数化的设计。程序通过几种基本的元素来描述服装图案,包括边(Edge)、边序列(EdgeSequence)、组件(Component)、版片(Panel)和接口(Interface)。
所有表示服装版片的类都继承自 Panel 类。此外,Component 类和 Panel 类都是从 BaseComponent 类派生出来的。这种结构可以创建可重用和可扩展的服装组件。
基本构建块由组件(Component)、版片(Panel)、边(Edge)和边序列(EdgeSequence)构成:
- 组件(Component)是一个抽象类,提供了描述复合服装或服装元素的框架,并包含一些组件处理方法(序列化、旋转、平移、镜像等)。每个组件应包含以下属性:1、子组件集合;2、缝合线(Stitches),描述如何连接子组件;3、接口对象集合(Interface objects),描述其他组件如何连接到此组件。除了这些属性,组件构建过程还包含修改子组件的指令,例如,将一个组件的接口(从子组件的版片中选择的边缘集合)投影到另一个组件上,实现复制。
- 版片(Panel)是具有特殊结构的“叶子”组件,既可以作为子组件,也可以指定版片几何形状。定义版片为封闭的逐段平滑曲线,表示为有序的边缘循环,以及 6D 放置参数(旋转和平移)。这些属性定义了版片组件,除了标准组件属性,即接口和缝合线。注意,版片可能包含其自身边缘之间的缝合线,如省道。
- 边缘(Edges) 边缘是缝纫图案中版片的基本构建块。每个边缘描述一个定向曲线段,支持直线段、圆弧以及二次和三次贝塞尔样条作为边缘。边缘由其起点和终点顶点作为属性表示(顶点坐标在 2D 中定义)。贝塞尔曲线还包含其控制点的坐标,而圆弧存储弧的中点到连接起点和终点的直线的有符号距离。
- 边缘序列(Edge sequences) 边缘序列指定了边缘的有序列表。在版片定义中使用的边缘序列必须将所有边缘一个接一个地链接成一个循环,但在其他上下文中可能使用其他类型的边缘序列,例如,在接口中边缘可能不会链接在一起或形成循环。
如何表示缝合线是实现模块化组件构建的关键元素之一。应当是将缝合线从个别组件的内部结构中抽象出来,反映高级组件之间的语义连接。这允许在连接中用具有相同语义意义的另一个组件替换一个组件,尽管底层几何形状不同,从而实现可互换性属性。
接口(Interface) 接口描述了特定组件可以如何以及在哪里连接。接口包含一组可以在抽象缝合线中连接到另一个组件的面板边缘。接口可以直接构建为面板边缘的子集(通常在面板组件中),或者通过重用或组合子组件的接口来构建。
缝合规则(Stitching rule) 在我们的实现中,抽象缝合线简单地指定为一对接口,包装在缝合规则对象中。包装器封装了在缝合声明时执行的缝合线展平处理。
展平缝合线表示(Flattening stitch representation) 虽然抽象缝合线对于建模很方便,但下游处理任务(如模拟)通常需要将缝合线作为边缘到边缘连接指令的平面表示。
序列化(Serialization)指的是将上述层次结构组件转换为平面缝纫图案表示,然后可以传递给下游任务,如布料模拟。可利用嵌套键值对的性质,递归地将所有参与组件构建的面板转换为文本表示,然后将它们与展平的缝合指令一起收集到一个文件中。
参数化(Parameterization)通过简单的参数调整来快速更新设计,从而节省时间和提高生产效率。参数化格式分为身体参数和设计参数,身体参数包含当前化身的测量值,设计参数不仅指定特定值,还指定每个参数的可能值范围和类型(数值、布尔或枚举),以允许设计采样。
4.4测试部署
确保系统已安装Python 3.9和以下依赖库:numpy、scipy、pyyaml >= 6.0、svgwrite、psutil、matplotlib、svgpathtools、cairoSVG、PySimpleGUI (仅限Windows)、wmi (仅限Windows)。若未安装,可使用命令行工具在conda虚拟环境中安装:
打开虚拟环境,进入工程文件夹,可使用命令行工具打开GUI界面进行设计。例如:
点击“Save”按钮,保存当前的服装版片设计文件到文件输出路径,可以在控制台查看保存结果。若保存成功,控制台显示如下:
也可使用命令行工具直接进行批量生产服装版片,并通过控制台查看生成进度。命令行可用的配置参数:
- 使用到的人体尺寸文件,默认为
“thin”:-b type=str, choices=['avg', 'thin', 'full-bodied', 'man'], default='thin'
- 输出路径,默认为工程文件下的Logs文件夹:
-o type=str, default='./Logs', help="Output file path.
- 3、最多生成服装的件数,默认为10:
-p type=int, default=10, help='how many pieces you want to generate, to limit the number of pieces’
示例:
在输出路径文件夹(这里为./Log)中可以看到批量的生产服装版片。


参数化建模可以将模型转化为可重复使用的构件,提高了设计的可重用性,并且通过组合不同的设计参数创造出多种组合来创建多样化的服装版片,从而实现批量生产。以下是一个通过部件重组形成新的服装样本的案例。

若指定的部件类型相同,可以看到这些服装版片变体仅在形状上有所差别。

5.展示设计
5.1毕设展板

5.2视频简介
Youtube传送门:基于面向对象程序设计的参数化组件化服装版片生成
6.结论
在本研究中,我们探讨了人工智能技术在服装版片生成领域的应用,以及这一技术如何推动服装设计与制造的现代化。通过深入分析基于神经符号模型、图像处理、三维模型和3D点云的服装版片生成方法,我们展示了AI技术在理解服装设计复杂性、提高定制化水平以及优化设计流程方面的巨大潜力。
本研究证实了面向对象程序设计(OOP)原则在服装设计中的有效性,特别是在参数化和组件化设计方面。这些方法不仅提高了设计的灵活性和效率,还为服装设计领域的AI应用奠定了坚实的基础。通过构建庞大的学习数据库,AI能够学习和模拟复杂的设计规则和用户偏好,进而自动生成满足特定要求的服装版片。这种技术的进步不仅减轻了设计师的工作负担,还为个性化和智能化服装设计的未来发展开辟了新的道路。
研究还突出了定制化服装版片生成中的创新点,包括参数化设计的灵活性、组件化设计的模块性以及与主流服装建模软件的兼容性。这些创新点不仅提升了设计的灵活性和效率,也为服装行业的数字化转型和未来发展奠定了坚实的基础。
展望未来,我们预计服装设计将更加注重消费者的个性化需求,服装版片生成的智能化水平也将达到新的高度。随着技术的不断进步,AI将能够提供更加精准和多样化的设计方案,满足不同消费者的独特需求。这一领域的发展将推动服装行业的数字化转型,为消费者带来更加丰富多样和高度定制化的服装选择。在这个充满创新和挑战的时代,人工智能技术将扮演着越来越重要的角色。
总之,本论文的研究成果不仅具有理论意义,也具有实践价值。它不仅能够推动服装设计行业的技术进步,还能够引领行业走向更加个性化、智能化和可持续化的未来。随着AI技术的不断成熟和创新,未来的服装设计将不仅仅是满足基本的穿着需求,更将成为展现个人身份和风格的重要方式。我们相信,AI和服装设计的深度融合将开启服装行业新的篇章,带来前所未有的设计理念和生产模式。
参考文献
- Zhou, X. (2011). Recognition of dress pattern images and automatic generation of templates. Research on garment pattern extraction and its pattern recognition. CNKI.
- Wang, J., Zhang, D., & Yang, Y. (2012). Made-to-measure pattern development based on 3D whole body scans. International Journal of Clothing Science and Technology, 20(1), 15-28.
- Shen, Y., Liang, J., & Lin, M. C. (2020). GAN-based Garment Generation Using Sewing Pattern Images. In European Conference on Computer Vision (ECCV 2020).
- Korosteleva, M., & Lee, S. H. (2021). Generating Datasets of 3D Garments with Sewing Patterns. In Proceedings of the Neural Information Processing Systems Track on Datasets and Benchmarks (NeurIPS Datasets and Benchmarks 2021).
- Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv preprint arXiv:2106.09685.
- Jin, Y., Li, J., & Zhang, D. (2022). ToyAssembler: Sewing Patterns into a 3D Toy by Automatic Pre-Positioning. Computer-Aided Design, 103356.
- Korosteleva, M., & Lee, S.-H. (2022). NeuralTailor: Reconstructing Sewing Pattern Structures from 3D Point Clouds of Garments. ACM Transactions on Graphics, 41(4), Article No. 99. doi:10.1145/3528223.3530179.
- Korosteleva, M., & Sorkine-Hornung, O. (2023). GarmentCode: Programming Parametric Sewing Patterns. In Computer Graphics Forum.
- Sarafianos, N., Stuyck, T., Xiang, X., Li, Y., Popovic, J., & Ranjan, R. (2024).Garment3DGen: 3D Garment Stylization and Texture Generation. arXiv preprint arXiv:2403.18816.
- Author:Yuki
- URL:http://shirakoko.xyz/article/grad-prj
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!