Files

785 lines
24 KiB
Python
Raw Permalink Normal View History

2025-07-03 17:03:00 +08:00
import os
import uuid
import json
import yaml
import random
import numpy as np
from collections import OrderedDict
# from predict_garmentcode_picture import predict
CONNECT_TAG = '__'
all_text_dict={
"meta__upper": [
"meta__upper__FittedShirt",
"meta__upper__Shirt",
"meta__upper__None"
],
"meta__wb": [
"meta__wb__StraightWB",
"meta__wb__FittedWB",
"meta__wb__None"
],
"meta__bottom": [
"meta__bottom__SkirtCircle",
"meta__bottom__AsymmSkirtCircle",
"meta__bottom__GodetSkirt",
"meta__bottom__Pants",
"meta__bottom__Skirt2",
"meta__bottom__SkirtManyPanels",
"meta__bottom__PencilSkirt",
"meta__bottom__SkirtLevels",
"meta__bottom__None"
],
"meta__connected": [
"meta__connected__True",
"meta__connected__False"
],
"waistband__waist": [
"waistband__waist__fitted",
"waistband__waist__slightly-loose",
"waistband__waist__loose"
],
"waistband__width": [
"waistband__width__narrow",
"waistband__width__medium",
"waistband__width__wide"
],
"fitted_shirt__strapless": [
"fitted_shirt__strapless__True",
"fitted_shirt__strapless__False"
],
"shirt__length": [
"shirt__length__super-cropped",
"shirt__length__regular",
"shirt__length__long"
],
"shirt__width": [
"shirt__width__normal",
"shirt__width__relaxed"
],
"shirt__flare": [
"shirt__flare__tight",
"shirt__flare__straight",
"shirt__flare__flared",
"shirt__flare__very-flared"
],
"collar__f_collar": [
"collar__f_collar__CircleNeckHalf",
"collar__f_collar__CurvyNeckHalf",
"collar__f_collar__VNeckHalf",
"collar__f_collar__SquareNeckHalf",
"collar__f_collar__TrapezoidNeckHalf",
"collar__f_collar__CircleArcNeckHalf",
"collar__f_collar__Bezier2NeckHalf"
],
"collar__b_collar": [
"collar__b_collar__CircleNeckHalf",
"collar__b_collar__CurvyNeckHalf",
"collar__b_collar__VNeckHalf",
"collar__b_collar__SquareNeckHalf",
"collar__b_collar__TrapezoidNeckHalf",
"collar__b_collar__CircleArcNeckHalf",
"collar__b_collar__Bezier2NeckHalf"
],
"collar__width": [
"collar__width__very-narrow",
"collar__width__medium",
"collar__width__wide"
],
"collar__fc_depth": [
"collar__fc_depth__shallow",
"collar__fc_depth__medium",
"collar__fc_depth__deep"
],
"collar__bc_depth": [
"collar__bc_depth__shallow",
"collar__bc_depth__medium",
"collar__bc_depth__deep"
],
"collar__fc_angle": [
"collar__fc_angle__acute",
"collar__fc_angle__standard",
"collar__fc_angle__obtuse"
],
"collar__bc_angle": [
"collar__bc_angle__acute",
"collar__bc_angle__standard",
"collar__bc_angle__obtuse"
],
"collar__f_bezier_x": [
"collar__f_bezier_x__left",
"collar__f_bezier_x__center",
"collar__f_bezier_x__right"
],
"collar__f_bezier_y": [
"collar__f_bezier_y__top",
"collar__f_bezier_y__center",
"collar__f_bezier_y__bottom"
],
"collar__b_bezier_x": [
"collar__b_bezier_x__left",
"collar__b_bezier_x__center",
"collar__b_bezier_x__right"
],
"collar__b_bezier_y": [
"collar__b_bezier_y__top",
"collar__b_bezier_y__center",
"collar__b_bezier_y__bottom"
],
"collar__f_flip_curve": [
"collar__f_flip_curve__True",
"collar__f_flip_curve__False"
],
"collar__b_flip_curve": [
"collar__b_flip_curve__True",
"collar__b_flip_curve__False"
],
"collar__component__style": [
"collar__component__style__Turtle",
"collar__component__style__SimpleLapel",
"collar__component__style__Hood2Panels",
"collar__component__style__None"
],
"collar__component__depth": [
"collar__component__depth__shallow",
"collar__component__depth__medium",
"collar__component__depth__deep"
],
"collar__component__lapel_standing": [
"collar__component__lapel_standing__True",
"collar__component__lapel_standing__False"
],
"collar__component__hood_depth": [
"collar__component__hood_depth__shallow",
"collar__component__hood_depth__medium",
"collar__component__hood_depth__deep"
],
"collar__component__hood_length": [
"collar__component__hood_length__short",
"collar__component__hood_length__medium",
"collar__component__hood_length__long"
],
"sleeve__sleeveless": [
"sleeve__sleeveless__True",
"sleeve__sleeveless__False"
],
"sleeve__armhole_shape": [
"sleeve__armhole_shape__ArmholeSquare",
"sleeve__armhole_shape__ArmholeAngle",
"sleeve__armhole_shape__ArmholeCurve"
],
"sleeve__length": [
"sleeve__length__short",
"sleeve__length__half",
"sleeve__length__three-quarter",
"sleeve__length__long",
"sleeve__length__full"
],
"sleeve__connecting_width": [
"sleeve__connecting_width__narrow",
"sleeve__connecting_width__medium",
"sleeve__connecting_width__loose",
"sleeve__connecting_width__very-loose"
],
"sleeve__end_width": [
"sleeve__end_width__closing",
"sleeve__end_width__straight",
"sleeve__end_width__opening"
],
"sleeve__sleeve_angle": [
"sleeve__sleeve_angle__small",
"sleeve__sleeve_angle__medium",
"sleeve__sleeve_angle__large"
],
"sleeve__opening_dir_mix": [
"sleeve__opening_dir_mix__negative-twist",
"sleeve__opening_dir_mix__standard",
"sleeve__opening_dir_mix__positive-twist"
],
"sleeve__standing_shoulder": [
"sleeve__standing_shoulder__True",
"sleeve__standing_shoulder__False"
],
"sleeve__standing_shoulder_len": [
"sleeve__standing_shoulder_len__short",
"sleeve__standing_shoulder_len__medium",
"sleeve__standing_shoulder_len__long"
],
"sleeve__connect_ruffle": [
"sleeve__connect_ruffle__none",
"sleeve__connect_ruffle__some",
"sleeve__connect_ruffle__obvious"
],
"sleeve__smoothing_coeff": [
"sleeve__smoothing_coeff__very-smooth",
"sleeve__smoothing_coeff__moderate",
"sleeve__smoothing_coeff__less-smooth"
],
"sleeve__cuff__type": [
"sleeve__cuff__type__CuffBand",
"sleeve__cuff__type__CuffSkirt",
"sleeve__cuff__type__CuffBandSkirt",
"sleeve__cuff__type__None"
],
"sleeve__cuff__top_ruffle": [
"sleeve__cuff__top_ruffle__straight",
"sleeve__cuff__top_ruffle__tapered",
"sleeve__cuff__top_ruffle__very_tapered"
],
"sleeve__cuff__cuff_len": [
"sleeve__cuff__cuff_len__short",
"sleeve__cuff__cuff_len__medium",
"sleeve__cuff__cuff_len__long"
],
"sleeve__cuff__skirt_fraction": [
"sleeve__cuff__skirt_fraction__small",
"sleeve__cuff__skirt_fraction__medium",
"sleeve__cuff__skirt_fraction__large"
],
"sleeve__cuff__skirt_flare": [
"sleeve__cuff__skirt_flare__slight",
"sleeve__cuff__skirt_flare__moderate",
"sleeve__cuff__skirt_flare__significant"
],
"sleeve__cuff__skirt_ruffle": [
"sleeve__cuff__skirt_ruffle__none",
"sleeve__cuff__skirt_ruffle__some"
],
"left__enable_asym": [
"left__enable_asym__True",
"left__enable_asym__False"
],
"left__fitted_shirt__strapless": [
"left__fitted_shirt__strapless__True",
"left__fitted_shirt__strapless__False"
],
"left__shirt__width": [
"left__shirt__width__normal",
"left__shirt__width__relaxed"
],
"left__shirt__flare": [
"left__shirt__flare__tight",
"left__shirt__flare__straight",
"left__shirt__flare__flared",
"left__shirt__flare__very-flared"
],
"left__collar__f_collar": [
"left__collar__f_collar__CircleNeckHalf",
"left__collar__f_collar__CurvyNeckHalf",
"left__collar__f_collar__VNeckHalf",
"left__collar__f_collar__SquareNeckHalf",
"left__collar__f_collar__TrapezoidNeckHalf",
"left__collar__f_collar__CircleArcNeckHalf",
"left__collar__f_collar__Bezier2NeckHalf"
],
"left__collar__b_collar": [
"left__collar__b_collar__CircleNeckHalf",
"left__collar__b_collar__CurvyNeckHalf",
"left__collar__b_collar__VNeckHalf",
"left__collar__b_collar__SquareNeckHalf",
"left__collar__b_collar__TrapezoidNeckHalf",
"left__collar__b_collar__CircleArcNeckHalf",
"left__collar__b_collar__Bezier2NeckHalf"
],
"left__collar__width": [
"left__collar__width__narrow",
"left__collar__width__medium",
"left__collar__width__wide"
],
"left__collar__fc_angle": [
"left__collar__fc_angle__acute",
"left__collar__fc_angle__standard",
"left__collar__fc_angle__obtuse"
],
"left__collar__bc_angle": [
"left__collar__bc_angle__acute",
"left__collar__bc_angle__standard",
"left__collar__bc_angle__obtuse"
],
"left__collar__f_bezier_x": [
"left__collar__f_bezier_x__left",
"left__collar__f_bezier_x__center",
"left__collar__f_bezier_x__right"
],
"left__collar__f_bezier_y": [
"left__collar__f_bezier_y__top",
"left__collar__f_bezier_y__center",
"left__collar__f_bezier_y__bottom"
],
"left__collar__b_bezier_x": [
"left__collar__b_bezier_x__left",
"left__collar__b_bezier_x__center",
"left__collar__b_bezier_x__right"
],
"left__collar__b_bezier_y": [
"left__collar__b_bezier_y__top",
"left__collar__b_bezier_y__center",
"left__collar__b_bezier_y__bottom"
],
"left__collar__f_flip_curve": [
"left__collar__f_flip_curve__True",
"left__collar__f_flip_curve__False"
],
"left__collar__b_flip_curve": [
"left__collar__b_flip_curve__True",
"left__collar__b_flip_curve__False"
],
"left__sleeve__sleeveless": [
"left__sleeve__sleeveless__True",
"left__sleeve__sleeveless__False"
],
"left__sleeve__armhole_shape": [
"left__sleeve__armhole_shape__ArmholeSquare",
"left__sleeve__armhole_shape__ArmholeAngle",
"left__sleeve__armhole_shape__ArmholeCurve"
],
"left__sleeve__length": [
"left__sleeve__length__short",
"left__sleeve__length__half",
"left__sleeve__length__three-quarter",
"left__sleeve__length__long",
"left__sleeve__length__full"
],
"left__sleeve__connecting_width": [
"left__sleeve__connecting_width__narrow",
"left__sleeve__connecting_width__medium",
"left__sleeve__connecting_width__loose",
"left__sleeve__connecting_width__very-loose"
],
"left__sleeve__end_width": [
"left__sleeve__end_width__closing",
"left__sleeve__end_width__straight",
"left__sleeve__end_width__opening"
],
"left__sleeve__sleeve_angle": [
"left__sleeve__sleeve_angle__small",
"left__sleeve__sleeve_angle__medium",
"left__sleeve__sleeve_angle__large"
],
"left__sleeve__opening_dir_mix": [
"left__sleeve__opening_dir_mix__negative-twist",
"left__sleeve__opening_dir_mix__standard",
"left__sleeve__opening_dir_mix__positive-twist"
],
"left__sleeve__standing_shoulder": [
"left__sleeve__standing_shoulder__True",
"left__sleeve__standing_shoulder__False"
],
"left__sleeve__standing_shoulder_len": [
"left__sleeve__standing_shoulder_len__short",
"left__sleeve__standing_shoulder_len__medium",
"left__sleeve__standing_shoulder_len__long"
],
"left__sleeve__connect_ruffle": [
"left__sleeve__connect_ruffle__none",
"left__sleeve__connect_ruffle__some",
"left__sleeve__connect_ruffle__obvious"
],
"left__sleeve__smoothing_coeff": [
"left__sleeve__smoothing_coeff__very-smooth",
"left__sleeve__smoothing_coeff__moderate",
"left__sleeve__smoothing_coeff__less-smooth"
],
"left__sleeve__cuff__type": [
"left__sleeve__cuff__type__CuffBand",
"left__sleeve__cuff__type__CuffSkirt",
"left__sleeve__cuff__type__CuffBandSkirt",
"left__sleeve__cuff__type__None"
],
"left__sleeve__cuff__top_ruffle": [
"left__sleeve__cuff__top_ruffle__none",
"left__sleeve__cuff__top_ruffle__moderate",
"left__sleeve__cuff__top_ruffle__obvious"
],
"left__sleeve__cuff__cuff_len": [
"left__sleeve__cuff__cuff_len__short",
"left__sleeve__cuff__cuff_len__medium",
"left__sleeve__cuff__cuff_len__long"
],
"left__sleeve__cuff__skirt_fraction": [
"left__sleeve__cuff__skirt_fraction__small",
"left__sleeve__cuff__skirt_fraction__medium",
"left__sleeve__cuff__skirt_fraction__large"
],
"left__sleeve__cuff__skirt_flare": [
"left__sleeve__cuff__skirt_flare__slight",
"left__sleeve__cuff__skirt_flare__moderate",
"left__sleeve__cuff__skirt_flare__significant"
],
"left__sleeve__cuff__skirt_ruffle": [
"left__sleeve__cuff__skirt_ruffle__none",
"left__sleeve__cuff__skirt_ruffle__some"
],
"skirt__length": [
"skirt__length__micro",
"skirt__length__mini",
"skirt__length__above-knee",
"skirt__length__knee-length",
"skirt__length__midi",
"skirt__length__floor-length"
],
"skirt__rise": [
"skirt__rise__low",
"skirt__rise__mid",
"skirt__rise__high"
],
"skirt__ruffle": [
"skirt__ruffle__none",
"skirt__ruffle__moderate",
"skirt__ruffle__rich"
],
"skirt__bottom_cut": [
"skirt__bottom_cut__none",
"skirt__bottom_cut__shallow",
"skirt__bottom_cut__deep"
],
"skirt__flare": [
"skirt__flare__small",
"skirt__flare__medium",
"skirt__flare__large"
],
"flare-skirt__length": [
"flare-skirt__length__micro",
"flare-skirt__length__mini",
"flare-skirt__length__above-knee",
"flare-skirt__length__knee-length",
"flare-skirt__length__midi",
"flare-skirt__length__floor-length"
],
"flare-skirt__rise": [
"flare-skirt__rise__low",
"flare-skirt__rise__mid",
"flare-skirt__rise__high"
],
"flare-skirt__suns": [
"flare-skirt__suns__slight",
"flare-skirt__suns__moderate",
"flare-skirt__suns__significant"
],
"flare-skirt__skirt-many-panels__n_panels": [
"flare-skirt__skirt-many-panels__n_panels__few",
"flare-skirt__skirt-many-panels__n_panels__medium",
"flare-skirt__skirt-many-panels__n_panels__many"
],
"flare-skirt__skirt-many-panels__panel_curve": [
"flare-skirt__skirt-many-panels__panel_curve__inward",
"flare-skirt__skirt-many-panels__panel_curve__straight",
"flare-skirt__skirt-many-panels__panel_curve__outward"
],
"flare-skirt__asymm__front_length": [
"flare-skirt__asymm__front_length__highly-asymmetric",
"flare-skirt__asymm__front_length__strongly-asymmetric",
"flare-skirt__asymm__front_length__moderately-asymmetric",
"flare-skirt__asymm__front_length__slightly-asymmetric",
"flare-skirt__asymm__front_length__symmetric"
],
"flare-skirt__cut__add": [
"flare-skirt__cut__add__True",
"flare-skirt__cut__add__False"
],
"flare-skirt__cut__depth": [
"flare-skirt__cut__depth__shallow",
"flare-skirt__cut__depth__medium",
"flare-skirt__cut__depth__deep"
],
"flare-skirt__cut__width": [
"flare-skirt__cut__width__narrow",
"flare-skirt__cut__width__medium",
"flare-skirt__cut__width__wide"
],
"flare-skirt__cut__place": [
"flare-skirt__cut__place__back_left",
"flare-skirt__cut__place__back_center",
"flare-skirt__cut__place__back_right",
"flare-skirt__cut__place__front_left",
"flare-skirt__cut__place__front_center",
"flare-skirt__cut__place__front_right",
],
"godet-skirt__base": [
"godet-skirt__base__Skirt2",
"godet-skirt__base__PencilSkirt"
],
"godet-skirt__insert_w": [
"godet-skirt__insert_w__narrow",
"godet-skirt__insert_w__medium",
"godet-skirt__insert_w__wide"
],
"godet-skirt__insert_depth": [
"godet-skirt__insert_depth__shallow",
"godet-skirt__insert_depth__medium",
"godet-skirt__insert_depth__deep"
],
"godet-skirt__num_inserts": [
"godet-skirt__num_inserts__4",
"godet-skirt__num_inserts__6",
"godet-skirt__num_inserts__8",
"godet-skirt__num_inserts__10",
"godet-skirt__num_inserts__12"
],
"godet-skirt__cuts_distance": [
"godet-skirt__cuts_distance__close",
"godet-skirt__cuts_distance__medium",
"godet-skirt__cuts_distance__far"
],
"pencil-skirt__length": [
"pencil-skirt__length__micro",
"pencil-skirt__length__mini",
"pencil-skirt__length__above-knee",
"pencil-skirt__length__knee-length",
"pencil-skirt__length__midi",
"pencil-skirt__length__floor-length"
],
"pencil-skirt__rise": [
"pencil-skirt__rise__low",
"pencil-skirt__rise__mid",
"pencil-skirt__rise__high"
],
"pencil-skirt__flare": [
"pencil-skirt__flare__tight",
"pencil-skirt__flare__straight",
"pencil-skirt__flare__slight-flare"
],
"pencil-skirt__low_angle": [
"pencil-skirt__low_angle__inward",
"pencil-skirt__low_angle__straight",
"pencil-skirt__low_angle__outward"
],
"pencil-skirt__front_slit": [
"pencil-skirt__front_slit__none",
"pencil-skirt__front_slit__shallow",
"pencil-skirt__front_slit__deep"
],
"pencil-skirt__back_slit": [
"pencil-skirt__back_slit__none",
"pencil-skirt__back_slit__shallow",
"pencil-skirt__back_slit__deep"
],
"pencil-skirt__left_slit": [
"pencil-skirt__left_slit__none",
"pencil-skirt__left_slit__shallow",
"pencil-skirt__left_slit__deep"
],
"pencil-skirt__right_slit": [
"pencil-skirt__right_slit__none",
"pencil-skirt__right_slit__shallow",
"pencil-skirt__right_slit__deep"
],
"pencil-skirt__style_side_cut": [
"pencil-skirt__style_side_cut__Sun",
"pencil-skirt__style_side_cut__SIGGRAPH_logo",
"pencil-skirt__style_side_cut__None"
],
"levels-skirt__base": [
"levels-skirt__base__Skirt2",
"levels-skirt__base__PencilSkirt",
"levels-skirt__base__SkirtCircle",
"levels-skirt__base__AsymmSkirtCircle"
],
"levels-skirt__level": [
"levels-skirt__level__Skirt2",
"levels-skirt__level__SkirtCircle",
"levels-skirt__level__AsymmSkirtCircle"
],
"levels-skirt__num_levels": [
"levels-skirt__num_levels__1",
"levels-skirt__num_levels__2",
"levels-skirt__num_levels__3",
"levels-skirt__num_levels__4",
"levels-skirt__num_levels__5"
],
"levels-skirt__level_ruffle": [
"levels-skirt__level_ruffle__none",
"levels-skirt__level_ruffle__moderate",
"levels-skirt__level_ruffle__rich"
],
"levels-skirt__length": [
"levels-skirt__length__micro",
"levels-skirt__length__mini",
"levels-skirt__length__above-knee",
"levels-skirt__length__knee-length",
"levels-skirt__length__midi",
"levels-skirt__length__floor-length"
],
"levels-skirt__rise": [
"levels-skirt__rise__low",
"levels-skirt__rise__mid",
"levels-skirt__rise__high"
],
"levels-skirt__base_length_frac": [
"levels-skirt__base_length_frac__short",
"levels-skirt__base_length_frac__medium",
"levels-skirt__base_length_frac__long"
],
"pants__length": [
"pants__length__micro",
"pants__length__short",
"pants__length__knee-length",
"pants__length__capri",
"pants__length__ankle-length",
"pants__length__full-length"
],
"pants__width": [
"pants__width__fitted",
"pants__width__normal",
"pants__width__loose"
],
"pants__flare": [
"pants__flare__tapering",
"pants__flare__straight",
"pants__flare__slight-flare"
],
"pants__rise": [
"pants__rise__low",
"pants__rise__mid",
"pants__rise__high"
],
"pants__cuff__type": [
"pants__cuff__type__CuffBand",
"pants__cuff__type__CuffSkirt",
"pants__cuff__type__CuffBandSkirt",
"pants__cuff__type__None"
],
"pants__cuff__top_ruffle": [
"pants__cuff__top_ruffle__none",
"pants__cuff__top_ruffle__moderate",
"pants__cuff__top_ruffle__rich"
],
"pants__cuff__cuff_len": [
"pants__cuff__cuff_len__short",
"pants__cuff__cuff_len__medium",
"pants__cuff__cuff_len__long"
],
"pants__cuff__skirt_fraction": [
"pants__cuff__skirt_fraction__small",
"pants__cuff__skirt_fraction__medium",
"pants__cuff__skirt_fraction__large"
],
"pants__cuff__skirt_flare": [
"pants__cuff__skirt_flare__slight",
"pants__cuff__skirt_flare__moderate",
"pants__cuff__skirt_flare__significant"
],
"pants__cuff__skirt_ruffle": [
"pants__cuff__skirt_ruffle__none",
"pants__cuff__skirt_ruffle__some"
]
}
def list_to_prefix_dict(strings):
"""
Converts the list of strings to a dictionary of Prefix -> Original String List (in the order in which it appears).
A prefix refers to the part after the last '__' segment is removed.
"""
result = OrderedDict()
for s in strings:
parts = s.split(CONNECT_TAG)
prefix = CONNECT_TAG.join(parts[:-1]) # Remove the last fragment
if prefix not in result:
result[prefix] = []
result[prefix].append(s) # Put the full string in
return result
def input_caption2random_default_cption(test_gpt_caption=None):
'''all_text_dict: dict is the dict of the text space, and it is ordered,
which can guarantee the order (because the network is trained to ensure the order)
test_gpt_caption:list is the list of gpt_caption, here there is no specific order,
Below, the text in the test_gpt_caption will be retained, and the others will be randomly selected,
and the order will be guaranteed, and a list will be returned'''
test_gpt_caption_list=list_to_prefix_dict(test_gpt_caption)
random_list = []
for key ,value_list in all_text_dict.items():
# if key == 'levels-skirt__base':
# print(value_list)
if key not in test_gpt_caption_list:
if key == 'shirt__length':
random_list.append("shirt__length__super-cropped")
elif key == 'pants__cuff__type':
random_list.append("pants__cuff__type__None")
elif key == "sleeve__cuff__type":
random_list.append("sleeve__cuff__type__None")
elif key == "left__sleeve__cuff__type":
random_list.append("left__sleeve__cuff__type__None")
elif key == 'collar__component__style':
random_list.append("collar__component__style__None")
elif key == "pencil-skirt__low_angle":
random_list.append("pencil-skirt__low_angle__straight")
elif key == "sleeve__connecting_width":
random_list.append("sleeve__connecting_width__medium")
elif key == "sleeve__end_width":
random_list.append("sleeve__end_width__straight")
elif key == "left__sleeve__connecting_width":
random_list.append("left__sleeve__connecting_width__medium")
elif key == "left__sleeve__end_width":
random_list.append("left__sleeve__end_width__straight")
elif 'False' in value_list[0] or 'True' in value_list[0]:
random_list.append(value_list[1])
else:
chice_num=random.randint(0,len(value_list)-1)
random_list.append(value_list[chice_num])
else:
if test_gpt_caption_list[key][0] in value_list:
res= test_gpt_caption_list[key][0]
random_list.append(res)
else:
chice_num = random.randint(0, len(value_list) - 1)
random_list.append(value_list[chice_num])
return random_list
def vec_2_pattern_yaml(yaml_data,param_vec,mask_list):
yaml_file_name = None
pattern_data_dict = {}
pattern_vec = {}
cont = 0
param_vec = np.clip(param_vec, 0, 1)
def extract_new_vec_v2v(data, path=''):
"""
Recursively traverses the data structure and extracts all the 'v' values.
:p aram data: YAML loaded data
:p aram path: The path of the current field, which is used to display the hierarchy
:return: No return value, print directly
"""
nonlocal cont
nonlocal param_vec
nonlocal mask_list
if isinstance(data, dict):
for key, value in data.items():
# If the key is 'v', the path and the corresponding value are printed
if key == 'v':
range = data['range']
if mask_list[cont] == 0 or data['v'] == 0:
cont = cont + 1
continue
elif data['type'] == 'select_null' or data['type'] == 'select':
pass
elif data['type'] == 'bool':
pass
elif data['type'] == 'int':
re_normal_value = param_vec[cont] * (range[1] - range[0]) + range[0]
data['v'] = int(re_normal_value)
elif data['type'] == 'float':
re_normal_value = param_vec[cont] * (range[1] - range[0]) + range[0]
data['v'] = float(re_normal_value*mask_list[cont])
cont = cont + 1
else:
# Recursively moves on to the next layer
extract_new_vec_v2v(value, path + key + '.')
extract_new_vec_v2v(yaml_data, path='')
return yaml_data
class NoAliasDumper(yaml.Dumper):
def ignore_aliases(self, data):
return True
def save_design2yaml(design, new_yaml_path):
garment_param = {'design': design}
new_yaml_path_dir = os.path.dirname(new_yaml_path)
os.makedirs(new_yaml_path_dir, exist_ok=True)
with open(new_yaml_path, 'w') as yaml_file:
yaml.dump(garment_param, yaml_file, default_flow_style=False, allow_unicode=True, sort_keys=False,
Dumper=NoAliasDumper)