修改检测逻辑

dev
ZhuoZhou 2025-04-22 14:10:30 +08:00
parent 3bf543f95a
commit bc0b2f100d
3 changed files with 100 additions and 47 deletions

Binary file not shown.

View File

@ -40,16 +40,27 @@ def check_psd(psd_path):
psd_width = psd.width psd_width = psd.width
psd_height = psd.height psd_height = psd.height
if (psd_width != config.psd_standard_width and psd_width != config.psd_standard_width2) or (psd_height != config.psd_standard_height and psd_height != config.psd_standard_height2): # print(f'{psd.size}')
error_log.append(f'{psd_name}:{config.error_log.psd_size_error.value}')
# if (psd_width != config.psd_standard_width and psd_width != config.psd_standard_width2) or (psd_height != config.psd_standard_height and psd_height != config.psd_standard_height2):
# error_log.append(f'{psd_name}:{config.error_log.psd_size_error.value}')
titem_name = 'titem'
tfull_name = 'tfull'
tmask_name = 'tmask'
tlight_name = 'tlight'
tshadow_name = 'tshadow'
group_name = 'group_'
all_items = [] all_items = []
all_full = {} all_full = {}
all_mask = [] all_mask = []
all_tlight = [] all_tlight = []
all_tshadow = [] all_tshadow = []
all_color_it_full = [] all_group = []
all_color_it_item = [] # all_color_it_full = []
# all_color_it_item = []
is_exist_base = False is_exist_base = False
is_exist_titem_group = False is_exist_titem_group = False
all_occlusion_degree = [] all_occlusion_degree = []
@ -59,45 +70,61 @@ def check_psd(psd_path):
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.name_contains_spaces.value}') error_log.append(f'{psd_name}:{layer.name}:{config.error_log.name_contains_spaces.value}')
if layer.name == 'nouse' and layer.is_group(): if layer.name == 'nouse' and layer.is_group():
continue continue
if layer.name == 'titem' and layer.is_group(): if layer.name == titem_name and layer.is_group():
is_exist_titem_group = True is_exist_titem_group = True
for item_layer in layer: for item_layer in layer:
if ' ' in item_layer.name: if ' ' in item_layer.name:
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.name_contains_spaces.value}') error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.name_contains_spaces.value}')
# item_names = item_layer.name.split('_') # item_names = item_layer.name.split('_')
if 'titem' in item_layer.name: if titem_name in item_layer.name:
if item_layer.name in all_items or item_layer.name in all_color_it_item: if item_layer.name in all_items: ##or item_layer.name in all_color_it_item:
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.exit_repeat_layer.value}') error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.exit_repeat_layer.value}')
else: else:
if 'titemcolor' in item_layer.name: # if 'titemcolor' in item_layer.name:
all_color_it_item.append(item_layer.name) # all_color_it_item.append(item_layer.name)
else: # else:
all_items.append(item_layer.name) all_items.append(item_layer.name)
else: else:
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.psd_item_name_error.value}') error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.psd_item_name_error.value}')
elif not layer.is_group() and 'tfull' in layer.name:
if layer.name in all_full.keys() or layer.name in all_color_it_full: elif group_name in layer.name:
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}') if not layer.is_group():
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_name_error.value}')
elif layer.name in all_group:
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_group.value}')
else: else:
if 'tfullcolor' in layer.name: all_group.append(layer.name)
all_color_it_full.append(layer.name) is_exit_full = False
else: for child_layer in layer:
all_full[layer.name] = (layer.left, layer.top, layer.width, layer.height) if child_layer.is_group():
elif not layer.is_group() and 'tmask' in layer.name: error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.child_layer_is_group.value}')
if layer.name in all_mask: else:
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}') if tfull_name in child_layer.name:
else: if child_layer.name in all_full.keys():
all_mask.append(layer.name) error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
elif not layer.is_group() and 'tlight' in layer.name: else:
if layer.name in all_tlight: all_full[child_layer.name] = (child_layer.left, child_layer.top, child_layer.width, child_layer.height)
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}') is_exit_full = True
else: elif tmask_name in child_layer.name:
all_tlight.append(layer.name) if child_layer.name in all_mask:
elif not layer.is_group() and 'tshadow' in layer.name: error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
if layer.name in all_tshadow: else:
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}') all_mask.append(child_layer.name)
else: elif tshadow_name in child_layer.name:
all_tshadow.append(layer.name) if child_layer.name in all_tshadow:
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
else:
all_tshadow.append(child_layer.name)
elif tlight_name in child_layer.name:
if child_layer.name in all_tlight:
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
else:
all_tlight.append(child_layer.name)
else:
error_log.append(
f'{psd_name}:{child_layer.name}:{config.error_log.child_layer_unknown.value}')
if not is_exit_full:
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_tfull_not_exit.value}')
elif layer.name == 'base': elif layer.name == 'base':
if is_exist_base: if is_exist_base:
error_log.append(f'{psd_name}:{config.error_log.exit_more_base.value}') error_log.append(f'{psd_name}:{config.error_log.exit_more_base.value}')
@ -112,35 +139,54 @@ def check_psd(psd_path):
error_log.append(f'{psd_name}:{config.error_log.item_group_not_exit.value}') error_log.append(f'{psd_name}:{config.error_log.item_group_not_exit.value}')
all_item_count = len(all_items) all_item_count = len(all_items)
if len(all_full) != all_item_count or ( if len(all_full) != all_item_count:
len(all_color_it_item) != 0 and len(all_color_it_item) != all_item_count) or ( #or ( len(all_color_it_item) != 0 and len(all_color_it_item) != all_item_count) or (
len(all_color_it_full) != 0 and len(all_color_it_full) != all_item_count): #len(all_color_it_full) != 0 and len(all_color_it_full) != all_item_count):
error_log.append(f'{psd_name}:{config.error_log.item_or_full_num_error.value}') error_log.append(f'{psd_name}:{config.error_log.item_or_full_num_error.value}')
for item in all_items: for item in all_items:
full_name = item.replace('item', 'full') full_name = item.replace('item', 'full')
if full_name not in all_full.keys(): if full_name not in all_full.keys():
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_full.value}') error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_full.value}')
if len(all_color_it_item) > 0 and len(all_color_it_full) > 0: # if len(all_color_it_item) > 0 and len(all_color_it_full) > 0:
for item in all_items: # for item in all_items:
fullcolor_name = item.replace('item', 'fullcolor') # fullcolor_name = item.replace('item', 'fullcolor')
itemcolor_name = item.replace('item', 'itemcolor') # itemcolor_name = item.replace('item', 'itemcolor')
if fullcolor_name not in all_color_it_full: # if fullcolor_name not in all_color_it_full:
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_fullcolor.value}') # error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_fullcolor.value}')
if itemcolor_name not in all_color_it_item: # if itemcolor_name not in all_color_it_item:
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_itemcolor.value}') # error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_itemcolor.value}')
# if not os.path.exists('./test'): # if not os.path.exists('./test'):
# os.mkdir('./test') # os.mkdir('./test')
def find_layer_by_name(layers, target_name):
"""递归搜索图层中指定名称的图层"""
for layer in layers:
if layer.name == target_name:
return layer
if layer.is_group(): # 检查是否为组
found = find_layer_by_name(layer, target_name)
if found:
return found
return None
# 计算mask和full的遮罩百分比 # 计算mask和full的遮罩百分比
for cur_mask in all_mask: for cur_mask in all_mask:
img_mask = psd.composite(layer_filter=lambda mask_layer: mask_layer.name == cur_mask) # img_mask = psd.composite(layer_filter=lambda mask_layer: mask_layer.name == cur_mask)
layer_mask = find_layer_by_name(psd,cur_mask)
full_name = cur_mask.replace('mask', 'full') full_name = cur_mask.replace('mask', 'full')
cur_full_rect = None cur_full_rect = None
if full_name in all_full.keys(): if full_name in all_full.keys():
cur_full_rect = all_full[full_name] cur_full_rect = all_full[full_name]
img_full = psd.composite(layer_filter=lambda full_layer: full_layer.name == full_name) # img_full = psd.composite(layer_filter=lambda full_layer: full_layer.name == full_name)
layer_full = find_layer_by_name(psd, full_name)
if layer_mask is None or layer_full is None:
error_log.append(f'{psd_name}:{cur_mask}:{config.error_log.not_find_mask_full.value}')
break
img_mask = psd.composite(layer_mask)
img_full = psd.composite(layer_full)
# img_mask.save(f'./test/{cur_mask}.png') # img_mask.save(f'./test/{cur_mask}.png')
# img_full.save(f'./test/{full_name}.png') # img_full.save(f'./test/{full_name}.png')
per = get_item_mask_contact_ratio(img_full, img_mask, cur_full_rect) per = get_item_mask_contact_ratio(img_full, img_mask, cur_full_rect)

View File

@ -20,5 +20,12 @@ class error_log(enum.Enum):
item_or_full_num_error = 'itemfull或itemcolor,fullcolor的个数不全部相同' item_or_full_num_error = 'itemfull或itemcolor,fullcolor的个数不全部相同'
name_contains_spaces = '该图层名字中包含空格' name_contains_spaces = '该图层名字中包含空格'
psd_mask_not_full = '没有mask对应的full' psd_mask_not_full = '没有mask对应的full'
not_find_mask_full = '没有找到mask或者full'
layer_not_need = '图层第一级有不属于我们需要的图层' layer_not_need = '图层第一级有不属于我们需要的图层'
psd_cmyk = 'psd是CMYK的色彩空间' psd_cmyk = 'psd是CMYK的色彩空间'
exit_repeat_group = '存在重复的分组'
group_name_error = '分组的名字错误'
child_layer_is_group = '子层级是个分组'
child_layer_unknown = '子层级名字未知'
group_tfull_not_exit = '分组下没有full图层'