Spaces:
Sleeping
Sleeping
File size: 7,532 Bytes
5ee8620 18720f0 5ee8620 18720f0 5ee8620 18720f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
import re
import colorsys
import json
import pandas as pd
def colorStringProcessRGB(color_str):
color_str = color_str.strip()
if color_str.startswith("#"):
color_str = color_str[1:]
if len(color_str) == 3:
r = int(color_str[0]*2, 16)
g = int(color_str[1]*2, 16)
b = int(color_str[2]*2, 16)
return r, g, b
elif len(color_str) == 6:
r = int(color_str[0:2], 16)
g = int(color_str[2:4], 16)
b = int(color_str[4:6], 16)
return r, g, b
else:
raise ValueError("Invalid HEX color format")
match00 = re.match(r"rgb\((\s*[0-9\.]+\s*),(\s*[0-9\.]+\s*),(\s*[0-9\.]+\s*)\)", color_str)
if match00 is not None:
r = round(float(match00.group(1)))
g = round(float(match00.group(2)))
b = round(float(match00.group(3)))
return r, g, b
match00 = re.match(r"rgba\((\s*[0-9\.]+\s*),(\s*[0-9\.]+\s*),(\s*[0-9\.]+\s*),(\s*[0-9\.]+\s*)\)", color_str)
if match00 is not None:
r = round(float(match00.group(1)))
g = round(float(match00.group(2)))
b = round(float(match00.group(3)))
return r, g, b
match00 = re.match(r"hsl\((\s*[0-9\.]+\s*),(\s*[0-9\.]+%\s*),(\s*[0-9\.]+%\s*)\)", color_str)
if match00 is not None:
h = float(match00.group(1))
s = float(match00.group(2).replace("%",""))
l = float(match00.group(3).replace("%",""))
r, g, b = colorsys.hls_to_rgb(h/360.0, l/100.0, s/100.0)
r = round(r * 255)
g = round(g * 255)
b = round(b * 255)
return r, g, b
raise ValueError("Invalid color string format")
def cdiParametersListFileGet(input_path, output_path):
with open(input_path, "r", encoding="utf8") as file:
data_raw = json.load(file)
data_result = cdiParametersListGet(data_raw)
with open(output_path, "w", encoding="utf8") as file:
json.dump(data_result, file, ensure_ascii=False)
return 0
def cdiParametersListGet(data_raw):
data_result = {}
for param in data_raw["Parameters"]:
pid = param["Id"]
pnom = param["Name"]
if pid in data_result:
raise ValueError(f"Duplicate parameter ID found: {pid}")
else:
data_result[pid] = {"Name": pnom}
return data_result
def cdiParametersGroupsDataFileGet(input_path, output_path):
with open(input_path, "r", encoding="utf8") as file:
data_raw = json.load(file)
data_result = cdiParametersGroupsDataGet(data_raw)
with open(output_path, "w", encoding="utf8") as file:
json.dump(data_result, file, ensure_ascii=False)
return 0
## 目前仅处理单层分组
def cdiParametersGroupsDataGet(data_raw):
data_result = {}
for group in data_raw["ParameterGroups"]:
gid = group["Id"]
gnom = group["Name"]
data_result[gid] = {"Name":gnom, "Parameters":{}}
for param in data_raw["Parameters"]:
pid = param["Id"]
pnom = param["Name"]
pgid = param["GroupId"]
if pgid in data_result:
data_result[pgid]["Parameters"][pid] = {"Name": pnom}
else:
raise ValueError(f"unknown group ID : {pgid}")
return data_result
def parametersListTextGet(parameters_list_dict):
df = pd.DataFrame(([id, parameters_list_dict[id]["Name"]] for id in parameters_list_dict), columns=["id", "name"])
df["text"] = df.apply(lambda row : row["id"] + " : " + row["name"], axis=1)
return df
def parameterPresetDataFramePreviewGet(parameter_preset_dict):
result_list = []
text_list = []
for ppid, ppdata in parameter_preset_dict.items():
text_list.clear()
for pid in ppdata:
pname = ppdata[pid]["Name"]
text_list.append(f"{pid} : {pname}")
result_list.append([ppid, text_list.copy()])
df = pd.DataFrame(result_list, columns=["预设名称", "参数列表"])
return df
def expressionParametersMigration(parameters_list: list|dict, data_acceptor, data_donor):
data_result = data_acceptor.copy()
pdata_acceptor = dict((prm["Id"],prm) for prm in data_acceptor["Parameters"])
pdata_donor = dict((prm["Id"],prm) for prm in data_donor["Parameters"])
pdata_result = pdata_acceptor.copy()
for parameter in parameters_list:
if parameter in pdata_donor:
pdata_result[parameter] = pdata_donor[parameter]
else:
if parameter in pdata_result:
del pdata_result[parameter]
parameters_list_result = list((pdata for pid, pdata in pdata_result.items()))
data_result["Parameters"] = parameters_list_result
return data_result
def expressionParametersMigrationByGroups(parameters_groups: dict, data_acceptor, data_donor):
parameters_list = []
for gid, gdata in parameters_groups.items():
for param in gdata["Parameters"]:
if param not in parameters_list:
parameters_list.append(param)
data_result = expressionParametersMigration(parameters_list, data_acceptor, data_donor)
return data_result
## 引用:
## gr.Markdown("新表情的参数会覆盖原有的同名参数,目前有『迁移』『叠加』两种操作。<br>『迁移』和之前一样会删掉参考列表中原表情有而新表情没有的参数,『叠加』则不会。<br>当参数列表包含所有相关参数时,其『迁移』结果新表情将会完全覆盖原表情,『叠加』结果则类似于VTS的表情叠加。")
## 起名可能不大准确,总之就是这么回事。
def expressionParametersOverlay(parameters_list: list|dict, data_acceptor, data_donor):
data_result = data_acceptor.copy()
pdata_acceptor = dict((prm["Id"],prm) for prm in data_acceptor["Parameters"])
pdata_donor = dict((prm["Id"],prm) for prm in data_donor["Parameters"])
pdata_result = pdata_acceptor.copy()
for parameter in parameters_list:
## 就是没有else部分
if parameter in pdata_donor:
pdata_result[parameter] = pdata_donor[parameter]
parameters_list_result = list((pdata for pid, pdata in pdata_result.items()))
data_result["Parameters"] = parameters_list_result
return data_result
def expressionParametersOverlayByGroups(parameters_groups: dict, data_acceptor, data_donor):
parameters_list = []
for gid, gdata in parameters_groups.items():
for param in gdata["Parameters"]:
if param not in parameters_list:
parameters_list.append(param)
data_result = expressionParametersOverlay(parameters_list, data_acceptor, data_donor)
return data_result
######
#color_str = "rgb(190.71875, 42.242530153508774, 42.242530153508774)"
#color_str = "rgba(190.71875, 42.242530153508774, 42.242530153508774, 1)"
#r, g, b = colorStringProcessRGB(color_str)
#print(r, g, b)
#cdiParametersListFileGet("data/general_model_Juumon/general_model_Juumon.cdi3.json", "data/cdiParametersList.json")
#cdiParametersGroupsDataFileGet("data/general_model_Juumon/general_model_Juumon.cdi3.json", "data/cdiParametersGroupsData.json")
#with open("data/test.exp3.json", "r", encoding="utf8") as file:
# data = json.load(file)
#expressionParametersMigration(["Param2", "HC82"], data, {"Parameters":[]})
|