add type aware method and use it
This commit is contained in:
@@ -1,231 +1,293 @@
|
|||||||
import os
|
|
||||||
import requests
|
import requests
|
||||||
import json
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import tritonclient.http as httpclient
|
import tritonclient.http as httpclient
|
||||||
import torch
|
import torch
|
||||||
from matplotlib import pyplot as plt, image as mpimg
|
from matplotlib import pyplot as plt, image as mpimg
|
||||||
|
from torchvision import transforms
|
||||||
|
|
||||||
from foco import extract_main_colors
|
from foco import extract_main_colors
|
||||||
|
|
||||||
TRITON_IP_DEFAULT = "0.0.0.0"
|
|
||||||
|
class OutfitMatcher(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.tritonclient = httpclient.InferenceServerClient(url="10.1.1.240:10010")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def pad_array(input_value, value=0):
|
||||||
|
"""pad List of Array into same batch size
|
||||||
|
|
||||||
|
Args:
|
||||||
|
input_value: List of numpy arrary need to be padded
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tensor: [batch_dim, max_dim, original_tensor_size]
|
||||||
|
"""
|
||||||
|
max_dim = max([len(x) for x in input_value])
|
||||||
|
mask = np.zeros((len(input_value), max_dim), dtype=np.float32)
|
||||||
|
|
||||||
|
# Pad each array
|
||||||
|
padded_arrays = []
|
||||||
|
for i, array in enumerate(input_value):
|
||||||
|
# Compute padding amount along the pad dimension
|
||||||
|
pad_dim = max_dim - array.shape[0]
|
||||||
|
consistent_shape = array.shape[1:]
|
||||||
|
pad_widths = [(0, pad_dim)] + [(0, 0)] * len(consistent_shape)
|
||||||
|
padded_array = np.pad(array, pad_widths, mode='constant', constant_values=value)
|
||||||
|
padded_arrays.append(padded_array)
|
||||||
|
|
||||||
|
mask[i, array.shape[0]:] = float("-inf")
|
||||||
|
|
||||||
|
# Stack the padded arrays and change the dimension
|
||||||
|
batched_arrays = np.stack(padded_arrays, axis=0)
|
||||||
|
return batched_arrays, mask
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def imnormalize(img, mean, std, to_rgb=True):
|
||||||
|
"""Normalize an image with mean and std.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
img (ndarray): Image to be normalized.
|
||||||
|
mean (ndarray): The mean to be used for normalize.
|
||||||
|
std (ndarray): The std to be used for normalize.
|
||||||
|
to_rgb (bool): Whether to convert to rgb.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ndarray: The normalized image.
|
||||||
|
"""
|
||||||
|
img = img.copy().astype(np.float32)
|
||||||
|
assert img.dtype != np.uint8
|
||||||
|
mean = np.float64(mean.reshape(1, -1))
|
||||||
|
stdinv = 1 / np.float64(std.reshape(1, -1))
|
||||||
|
if to_rgb:
|
||||||
|
cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img) # inplace
|
||||||
|
cv2.subtract(img, mean, img) # inplace
|
||||||
|
cv2.multiply(img, stdinv, img) # inplace
|
||||||
|
return img
|
||||||
|
def visualize(self, outfits, scores, topk=5, best=True, output_path=None):
|
||||||
|
# 将outfits和scores按照scores的值进行排序
|
||||||
|
sorted_indices = np.argsort(-scores.flatten() if best else scores.flatten())[:topk] # 使用负号进行降序排序
|
||||||
|
outfits = [outfits[i] for i in sorted_indices]
|
||||||
|
scores = scores[sorted_indices]
|
||||||
|
|
||||||
|
# 设置子图的行列数
|
||||||
|
num_rows = len(outfits)
|
||||||
|
num_cols = max([len(x) for x in outfits]) + 1 # 一个是图片,一个是分数
|
||||||
|
|
||||||
|
# 创建一个新的图像,并指定子图的行列数
|
||||||
|
fig, axes = plt.subplots(num_rows, num_cols, figsize=(8, 15))
|
||||||
|
|
||||||
|
title = f"Best {topk} Outfits" if best else f"Worst {topk} Outfits"
|
||||||
|
fig.suptitle(title, fontsize=16)
|
||||||
|
|
||||||
|
# 遍历每套outfit并将其显示在对应的子图中
|
||||||
|
for i, (outfit, score) in enumerate(zip(outfits, scores)):
|
||||||
|
# 显示分数
|
||||||
|
axes[i, 0].text(0.1, 0.5, f"Score: {score[0]:.4f}", fontsize=12)
|
||||||
|
axes[i, 0].axis("off")
|
||||||
|
# 显示图片
|
||||||
|
for j, item in enumerate(outfit):
|
||||||
|
img = mpimg.imread(item['image_path']) # 读取图片
|
||||||
|
axes[i, j + 1].imshow(img) # 在对应的子图中显示图片
|
||||||
|
axes[i, j + 1].axis('off') # 关闭坐标轴
|
||||||
|
axes[i, j + 1].set_title(item["semantic_category"], fontsize=10)
|
||||||
|
for j in range(len(outfit), num_cols):
|
||||||
|
axes[i, j].axis("off")
|
||||||
|
|
||||||
|
# 在每一行的底部添加一条横线
|
||||||
|
axes[i, 0].axhline(y=0, color='black', linewidth=1)
|
||||||
|
# 隐藏最后一行的横线
|
||||||
|
axes[-1, 0].axhline(y=0, color='white', linewidth=1)
|
||||||
|
|
||||||
|
# 调整布局
|
||||||
|
plt.subplots_adjust(wspace=0.1, hspace=0.1)
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
if output_path:
|
||||||
|
plt.savefig(output_path)
|
||||||
|
else:
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
def imnormalize(img, mean, std, to_rgb=True):
|
class OutfitMatcherHon(OutfitMatcher):
|
||||||
"""Normalize an image with mean and std.
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
Args:
|
@staticmethod
|
||||||
img (ndarray): Image to be normalized.
|
def load_image(img_path):
|
||||||
mean (ndarray): The mean to be used for normalize.
|
if 'http' in img_path:
|
||||||
std (ndarray): The std to be used for normalize.
|
file = requests.get(img_path)
|
||||||
to_rgb (bool): Whether to convert to rgb.
|
image = cv2.imdecode(np.fromstring(file.content, np.uint8), 1)
|
||||||
|
image = Image.fromarray(image.astype('uint8'), 'RGB')
|
||||||
|
else:
|
||||||
|
image = Image.open(img_path).convert('RGB')
|
||||||
|
return np.array(image)
|
||||||
|
|
||||||
Returns:
|
@staticmethod
|
||||||
ndarray: The normalized image.
|
def resize_image(img):
|
||||||
"""
|
"""
|
||||||
img = img.copy().astype(np.float32)
|
Args:
|
||||||
assert img.dtype != np.uint8
|
img: ndarray (height, width, channel)
|
||||||
mean = np.float64(mean.reshape(1, -1))
|
"""
|
||||||
stdinv = 1 / np.float64(std.reshape(1, -1))
|
resized_img = cv2.resize(img, (224, 224), dst=None, interpolation=1)
|
||||||
if to_rgb:
|
return resized_img
|
||||||
cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img) # inplace
|
|
||||||
cv2.subtract(img, mean, img) # inplace
|
def preprocess(self, outfits):
|
||||||
cv2.multiply(img, stdinv, img) # inplace
|
outfit_images = []
|
||||||
return img
|
outfit_colors = []
|
||||||
|
for outfit in outfits:
|
||||||
|
images = []
|
||||||
|
colors = []
|
||||||
|
for item in outfit:
|
||||||
|
image = self.load_image(item["image_path"])
|
||||||
|
image = self.resize_image(image)
|
||||||
|
normalized_image = self.imnormalize(image,
|
||||||
|
mean=np.array([208.32996145, 201.28227452, 198.47047691],
|
||||||
|
dtype=np.float32),
|
||||||
|
std=np.array([75.48939648, 80.47423057, 82.21144189],
|
||||||
|
dtype=np.float32))
|
||||||
|
images.append(normalized_image.transpose(2, 0, 1))
|
||||||
|
color = extract_main_colors(image)
|
||||||
|
colors.append(color)
|
||||||
|
images = np.stack(images, axis=0)
|
||||||
|
outfit_images.append(images) # List[(items, 3, 224, 224)]
|
||||||
|
colors = np.stack(colors, axis=0)
|
||||||
|
outfit_colors.append(colors)
|
||||||
|
outfit_images, mask = self.pad_array(outfit_images)
|
||||||
|
outfit_colors, _ = self.pad_array(outfit_colors)
|
||||||
|
return outfit_images, outfit_colors, mask
|
||||||
|
|
||||||
|
def get_result(self, outfits):
|
||||||
|
# start = time.time()
|
||||||
|
image, color, mask = self.preprocess(outfits)
|
||||||
|
# print(start - time.time())
|
||||||
|
# transformed_img = image.astype(np.float32)
|
||||||
|
# 输入集
|
||||||
|
inputs = [
|
||||||
|
httpclient.InferInput("input__0", image.shape, datatype="FP32"),
|
||||||
|
httpclient.InferInput("input__1", color.shape, datatype="FP32"),
|
||||||
|
httpclient.InferInput("input__2", mask.shape, datatype="FP32"),
|
||||||
|
]
|
||||||
|
inputs[0].set_data_from_numpy(image.astype(np.float32), binary_data=True)
|
||||||
|
inputs[1].set_data_from_numpy(color.astype(np.float32), binary_data=True)
|
||||||
|
inputs[2].set_data_from_numpy(mask.astype(np.float32), binary_data=True)
|
||||||
|
# 输出集
|
||||||
|
outputs = [
|
||||||
|
httpclient.InferRequestedOutput("output__0", binary_data=True),
|
||||||
|
]
|
||||||
|
results = self.tritonclient.infer(model_name="outfit_matcher_hon", inputs=inputs, outputs=outputs)
|
||||||
|
# 推理
|
||||||
|
# 取结果
|
||||||
|
inference_output1 = torch.from_numpy(results.as_numpy("output__0"))
|
||||||
|
return inference_output1 # Shape (N, 1)
|
||||||
|
|
||||||
|
|
||||||
def load_image(img_path):
|
class OutfitMaterTypeAware(OutfitMatcher):
|
||||||
if 'http' in img_path:
|
base_fashion_categories = [
|
||||||
file = requests.get(img_path)
|
'accessories', 'all-body', 'bags', 'bottoms', 'hats', 'jewellery',
|
||||||
image = cv2.imdecode(np.fromstring(file.content, np.uint8), 1)
|
'outerwear', 'scarves', 'shoes', 'sunglasses', 'tops'
|
||||||
image = Image.fromarray(image.astype('uint8'), 'RGB')
|
|
||||||
else:
|
|
||||||
image = Image.open(img_path).convert('RGB')
|
|
||||||
return np.array(image)
|
|
||||||
|
|
||||||
|
|
||||||
def resize_image(img):
|
|
||||||
"""
|
|
||||||
Args:
|
|
||||||
img: ndarray (height, width, channel)
|
|
||||||
"""
|
|
||||||
resized_img = cv2.resize(img, (224, 224), dst=None, interpolation=1)
|
|
||||||
return resized_img
|
|
||||||
|
|
||||||
|
|
||||||
def pad_array(input_value):
|
|
||||||
"""pad List of Array into same batch size
|
|
||||||
|
|
||||||
Args:
|
|
||||||
input_value: List of numpy arrary need to be padded
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Tensor: [batch_dim, max_dim, original_tensor_size]
|
|
||||||
"""
|
|
||||||
max_dim = max([len(x) for x in input_value])
|
|
||||||
mask = np.zeros((len(input_value), max_dim), dtype=np.float32)
|
|
||||||
|
|
||||||
# Pad each array
|
|
||||||
padded_arrays = []
|
|
||||||
for i, array in enumerate(input_value):
|
|
||||||
# Compute padding amount along the pad dimension
|
|
||||||
pad_dim = max_dim - array.shape[0]
|
|
||||||
consistent_shape = array.shape[1:]
|
|
||||||
pad_widths = [(0, pad_dim)] + [(0, 0)] * len(consistent_shape)
|
|
||||||
padded_array = np.pad(array, pad_widths, mode='constant', constant_values=0)
|
|
||||||
padded_arrays.append(padded_array)
|
|
||||||
|
|
||||||
mask[i, array.shape[0]:] = float("-inf")
|
|
||||||
|
|
||||||
# Stack the padded arrays and change the dimension
|
|
||||||
batched_arrays = np.stack(padded_arrays, axis=0)
|
|
||||||
return batched_arrays, mask
|
|
||||||
|
|
||||||
|
|
||||||
def extract_color(image, img_path):
|
|
||||||
# TODO: replace to vector database
|
|
||||||
relative_path, filename = os.path.split(img_path)
|
|
||||||
basename = filename.split(".")[0]
|
|
||||||
color_file = os.path.join(r"D:\PhD_Study\trinity_client\application\outfit_matcher\color",
|
|
||||||
basename + ".npy")
|
|
||||||
if os.path.exists(color_file):
|
|
||||||
color = np.load(color_file)
|
|
||||||
else:
|
|
||||||
color = extract_main_colors(image)
|
|
||||||
np.save(color_file, color)
|
|
||||||
return color
|
|
||||||
|
|
||||||
|
|
||||||
def preprocess(outfits):
|
|
||||||
outfit_images = []
|
|
||||||
outfit_colors = []
|
|
||||||
for outfit in outfits:
|
|
||||||
images = []
|
|
||||||
colors = []
|
|
||||||
for item in outfit:
|
|
||||||
image = load_image(item["image_path"])
|
|
||||||
image = resize_image(image)
|
|
||||||
normalized_image = imnormalize(image,
|
|
||||||
mean=np.array([208.32996145, 201.28227452, 198.47047691], dtype=np.float32),
|
|
||||||
std=np.array([75.48939648, 80.47423057, 82.21144189], dtype=np.float32))
|
|
||||||
images.append(normalized_image.transpose(2, 0, 1))
|
|
||||||
color = extract_color(image, item["image_path"])
|
|
||||||
colors.append(color)
|
|
||||||
images = np.stack(images, axis=0)
|
|
||||||
outfit_images.append(images) # List[(items, 3, 224, 224)]
|
|
||||||
colors = np.stack(colors, axis=0)
|
|
||||||
outfit_colors.append(colors)
|
|
||||||
outfit_images, mask = pad_array(outfit_images)
|
|
||||||
outfit_colors, _ = pad_array(outfit_colors)
|
|
||||||
return outfit_images, outfit_colors, mask
|
|
||||||
|
|
||||||
|
|
||||||
def evaluate_outfits(outfits):
|
|
||||||
"""Input outfits structure and output scores.
|
|
||||||
Args:
|
|
||||||
outfits: outfits to be evaluated.
|
|
||||||
Example:
|
|
||||||
[
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"item_name": "MSE_57987",
|
|
||||||
"semantic_category": "BOTTOM/PANTS",
|
|
||||||
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_57987.jpg",
|
|
||||||
"mapped_cate": "bottoms"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"item_name": "MPO_SP7712",
|
|
||||||
"semantic_category": "TOP/TANK",
|
|
||||||
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7712.jpg",
|
|
||||||
"mapped_cate": "tops"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"item_name": "MWSS27195",
|
|
||||||
"semantic_category": "OUTERWEAR/GILET",
|
|
||||||
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27195.jpg",
|
|
||||||
"mapped_cate": "outerwear"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
...
|
|
||||||
]
|
|
||||||
Returns:
|
|
||||||
scores: List of float
|
|
||||||
"""
|
|
||||||
|
|
||||||
# start = time.time()
|
|
||||||
image, color, mask = preprocess(outfits)
|
|
||||||
# print(start - time.time())
|
|
||||||
client = httpclient.InferenceServerClient(url="localhost:8000")
|
|
||||||
# transformed_img = image.astype(np.float32)
|
|
||||||
# 输入集
|
|
||||||
inputs = [
|
|
||||||
httpclient.InferInput("input__0", image.shape, datatype="FP32"),
|
|
||||||
httpclient.InferInput("input__1", color.shape, datatype="FP32"),
|
|
||||||
httpclient.InferInput("input__2", mask.shape, datatype="FP32"),
|
|
||||||
]
|
]
|
||||||
inputs[0].set_data_from_numpy(image.astype(np.float32), binary_data=True)
|
|
||||||
inputs[1].set_data_from_numpy(color.astype(np.float32), binary_data=True)
|
|
||||||
inputs[2].set_data_from_numpy(mask.astype(np.float32), binary_data=True)
|
|
||||||
# 输出集
|
|
||||||
outputs = [
|
|
||||||
httpclient.InferRequestedOutput("output__0", binary_data=True),
|
|
||||||
]
|
|
||||||
results = client.infer(model_name="outfit_matcher_hon", inputs=inputs, outputs=outputs)
|
|
||||||
# 推理
|
|
||||||
# 取结果
|
|
||||||
scores = torch.from_numpy(results.as_numpy("output__0"))
|
|
||||||
return scores # Shape (N, 1)
|
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
def visualize(outfits, scores, topk=5, best=True, output_path=None):
|
@staticmethod
|
||||||
# 将outfits和scores按照scores的值进行排序
|
def load_image(img_path):
|
||||||
sorted_indices = np.argsort(-scores.flatten() if best else scores.flatten())[:topk] # 使用负号进行降序排序
|
if 'http' in img_path:
|
||||||
outfits = [outfits[i] for i in sorted_indices]
|
file = requests.get(img_path)
|
||||||
scores = scores[sorted_indices]
|
image = cv2.imdecode(np.fromstring(file.content, np.uint8), 1)
|
||||||
|
image = Image.fromarray(image.astype('uint8'), 'RGB')
|
||||||
|
else:
|
||||||
|
image = Image.open(img_path).convert('RGB')
|
||||||
|
return image
|
||||||
|
|
||||||
# 设置子图的行列数
|
@staticmethod
|
||||||
num_rows = len(outfits)
|
def resize_image(img):
|
||||||
num_cols = max([len(x) for x in outfits]) + 1 # 一个是图片,一个是分数
|
"""
|
||||||
|
Args:
|
||||||
|
img: ndarray (height, width, channel)
|
||||||
|
"""
|
||||||
|
image_transforms = transforms.Compose([
|
||||||
|
transforms.Resize(112),
|
||||||
|
transforms.CenterCrop(112),
|
||||||
|
transforms.ToTensor(),
|
||||||
|
transforms.Normalize(mean=[0.485, 0.456, 0.406],
|
||||||
|
std=[0.229, 0.224, 0.225]),
|
||||||
|
])
|
||||||
|
resized_img = image_transforms(img).numpy()
|
||||||
|
return resized_img
|
||||||
|
|
||||||
# 创建一个新的图像,并指定子图的行列数
|
def preprocess(self, outfits):
|
||||||
fig, axes = plt.subplots(num_rows, num_cols, figsize=(8, 15))
|
outfit_images = []
|
||||||
|
outfit_categories = []
|
||||||
|
for outfit in outfits:
|
||||||
|
images = []
|
||||||
|
categories = []
|
||||||
|
for item in outfit:
|
||||||
|
image = self.load_image(item["image_path"])
|
||||||
|
image = self.resize_image(image)
|
||||||
|
images.append(image)
|
||||||
|
|
||||||
title = f"Best {topk} Outfits" if best else f"Worst {topk} Outfits"
|
category = self.base_fashion_categories.index(item["mapped_cate"])
|
||||||
fig.suptitle(title, fontsize=16)
|
categories.append(category)
|
||||||
|
images = np.stack(images, axis=0)
|
||||||
|
outfit_images.append(images) # List[(items, 3, 224, 224)]
|
||||||
|
categories = np.array(categories)
|
||||||
|
outfit_categories.append(categories) # List[(items)]
|
||||||
|
outfit_images, mask = self.pad_array(outfit_images, value=0)
|
||||||
|
outfit_categories, _ = self.pad_array(outfit_categories, value=len(self.base_fashion_categories))
|
||||||
|
return outfit_images, outfit_categories, mask
|
||||||
|
|
||||||
# 遍历每套outfit并将其显示在对应的子图中
|
def get_result(self, outfits):
|
||||||
for i, (outfit, score) in enumerate(zip(outfits, scores)):
|
"""Input outfits structure and output scores.
|
||||||
# 显示分数
|
Args:
|
||||||
axes[i, 0].text(0.1, 0.5, f"Score: {score[0]:.4f}", fontsize=12)
|
outfits: outfits to be evaluated.
|
||||||
axes[i, 0].axis("off")
|
Example:
|
||||||
# 显示图片
|
[
|
||||||
for j, item in enumerate(outfit):
|
[
|
||||||
img = mpimg.imread(item['image_path']) # 读取图片
|
{
|
||||||
axes[i, j + 1].imshow(img) # 在对应的子图中显示图片
|
"item_name": "MSE_57987",
|
||||||
axes[i, j + 1].axis('off') # 关闭坐标轴
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
axes[i, j + 1].set_title(item["semantic_category"], fontsize=10)
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_57987.jpg",
|
||||||
for j in range(len(outfit), num_cols):
|
"mapped_cate": "bottoms"
|
||||||
axes[i, j].axis("off")
|
},
|
||||||
|
{
|
||||||
# 在每一行的底部添加一条横线
|
"item_name": "MPO_SP7712",
|
||||||
axes[i, 0].axhline(y=0, color='black', linewidth=1)
|
"semantic_category": "TOP/TANK",
|
||||||
# 隐藏最后一行的横线
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7712.jpg",
|
||||||
axes[-1, 0].axhline(y=0, color='white', linewidth=1)
|
"mapped_cate": "tops"
|
||||||
|
},
|
||||||
# 调整布局
|
{
|
||||||
plt.subplots_adjust(wspace=0.1, hspace=0.1)
|
"item_name": "MWSS27195",
|
||||||
plt.tight_layout()
|
"semantic_category": "OUTERWEAR/GILET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27195.jpg",
|
||||||
if output_path:
|
"mapped_cate": "outerwear"
|
||||||
plt.savefig(output_path)
|
}
|
||||||
else:
|
],
|
||||||
plt.show()
|
...
|
||||||
|
]
|
||||||
|
Returns:
|
||||||
if __name__ == '__main__':
|
scores: List of float
|
||||||
with open("test_input.json", "r") as f:
|
"""
|
||||||
outfits = json.load(f)
|
image, category, mask = self.preprocess(outfits)
|
||||||
scores = evaluate_outfits(outfits)
|
client = httpclient.InferenceServerClient(url="localhost:8000")
|
||||||
print(scores)
|
# 输入集
|
||||||
|
inputs = [
|
||||||
|
httpclient.InferInput("input__0", image.shape, datatype="FP32"),
|
||||||
|
httpclient.InferInput("input__1", category.shape, datatype="INT16"),
|
||||||
|
httpclient.InferInput("input__2", mask.shape, datatype="FP32"),
|
||||||
|
]
|
||||||
|
inputs[0].set_data_from_numpy(image.astype(np.float32), binary_data=True)
|
||||||
|
inputs[1].set_data_from_numpy(category.astype(np.int16), binary_data=True)
|
||||||
|
inputs[2].set_data_from_numpy(mask.astype(np.float32), binary_data=True)
|
||||||
|
# 输出集
|
||||||
|
outputs = [
|
||||||
|
httpclient.InferRequestedOutput("output__0", binary_data=True),
|
||||||
|
]
|
||||||
|
results = client.infer(model_name="outfit_matcher_type_aware", inputs=inputs, outputs=outputs)
|
||||||
|
# 推理
|
||||||
|
# 取结果
|
||||||
|
scores = torch.from_numpy(results.as_numpy("output__0"))
|
||||||
|
return scores # Shape (N, 1)
|
||||||
@@ -1,160 +1,25 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
|
||||||
|
|
||||||
import torch
|
|
||||||
import torch.nn.functional as F
|
|
||||||
import tritonclient.http as httpclient
|
|
||||||
import requests
|
|
||||||
import cv2
|
|
||||||
import numpy as np
|
|
||||||
from PIL import Image
|
|
||||||
from tqdm import tqdm
|
|
||||||
|
|
||||||
from app.service.outfit_matcher.dataset import FashionDataset
|
from app.service.outfit_matcher.dataset import FashionDataset
|
||||||
from app.service.outfit_matcher.foco import extract_main_colors
|
from app.service.outfit_matcher.outfit_evaluator import OutfitMaterTypeAware
|
||||||
from app.service.outfit_matcher.outfit_evaluator import evaluate_outfits, visualize
|
|
||||||
|
|
||||||
|
|
||||||
class OutfitMatcherHon:
|
|
||||||
def __init__(self, outfits):
|
|
||||||
self.outfits = outfits
|
|
||||||
self.tritonclient = httpclient.InferenceServerClient(url="10.1.1.240:10010")
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def imnormalize(img, mean, std, to_rgb=True):
|
|
||||||
"""Normalize an image with mean and std.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
img (ndarray): Image to be normalized.
|
|
||||||
mean (ndarray): The mean to be used for normalize.
|
|
||||||
std (ndarray): The std to be used for normalize.
|
|
||||||
to_rgb (bool): Whether to convert to rgb.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
ndarray: The normalized image.
|
|
||||||
"""
|
|
||||||
img = img.copy().astype(np.float32)
|
|
||||||
assert img.dtype != np.uint8
|
|
||||||
mean = np.float64(mean.reshape(1, -1))
|
|
||||||
stdinv = 1 / np.float64(std.reshape(1, -1))
|
|
||||||
if to_rgb:
|
|
||||||
cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img) # inplace
|
|
||||||
cv2.subtract(img, mean, img) # inplace
|
|
||||||
cv2.multiply(img, stdinv, img) # inplace
|
|
||||||
return img
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def load_image(img_path):
|
|
||||||
if 'http' in img_path:
|
|
||||||
file = requests.get(img_path)
|
|
||||||
image = cv2.imdecode(np.fromstring(file.content, np.uint8), 1)
|
|
||||||
image = Image.fromarray(image.astype('uint8'), 'RGB')
|
|
||||||
else:
|
|
||||||
image = Image.open(img_path).convert('RGB')
|
|
||||||
return np.array(image)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def resize_image(img):
|
|
||||||
"""
|
|
||||||
Args:
|
|
||||||
img: ndarray (height, width, channel)
|
|
||||||
"""
|
|
||||||
resized_img = cv2.resize(img, (224, 224), dst=None, interpolation=1)
|
|
||||||
return resized_img
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def pad_array(input_value):
|
|
||||||
"""pad List of Array into same batch size
|
|
||||||
|
|
||||||
Args:
|
|
||||||
input_value: List of numpy arrary need to be padded
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Tensor: [batch_dim, max_dim, original_tensor_size]
|
|
||||||
"""
|
|
||||||
max_dim = max([len(x) for x in input_value])
|
|
||||||
mask = np.zeros((len(input_value), max_dim), dtype=np.float32)
|
|
||||||
|
|
||||||
# Pad each array
|
|
||||||
padded_arrays = []
|
|
||||||
for i, array in enumerate(input_value):
|
|
||||||
# Compute padding amount along the pad dimension
|
|
||||||
pad_dim = max_dim - array.shape[0]
|
|
||||||
consistent_shape = array.shape[1:]
|
|
||||||
pad_widths = [(0, pad_dim)] + [(0, 0)] * len(consistent_shape)
|
|
||||||
padded_array = np.pad(array, pad_widths, mode='constant', constant_values=0)
|
|
||||||
padded_arrays.append(padded_array)
|
|
||||||
|
|
||||||
mask[i, array.shape[0]:] = float("-inf")
|
|
||||||
|
|
||||||
# Stack the padded arrays and change the dimension
|
|
||||||
batched_arrays = np.stack(padded_arrays, axis=0)
|
|
||||||
return batched_arrays, mask
|
|
||||||
|
|
||||||
def preprocess(self):
|
|
||||||
outfit_images = []
|
|
||||||
outfit_colors = []
|
|
||||||
for outfit in self.outfits:
|
|
||||||
images = []
|
|
||||||
colors = []
|
|
||||||
for item in outfit:
|
|
||||||
image = self.load_image(item["image_path"])
|
|
||||||
image = self.resize_image(image)
|
|
||||||
normalized_image = self.imnormalize(image,
|
|
||||||
mean=np.array([208.32996145, 201.28227452, 198.47047691], dtype=np.float32),
|
|
||||||
std=np.array([75.48939648, 80.47423057, 82.21144189], dtype=np.float32))
|
|
||||||
images.append(normalized_image.transpose(2, 0, 1))
|
|
||||||
color = extract_main_colors(image)
|
|
||||||
colors.append(color)
|
|
||||||
images = np.stack(images, axis=0)
|
|
||||||
outfit_images.append(images) # List[(items, 3, 224, 224)]
|
|
||||||
colors = np.stack(colors, axis=0)
|
|
||||||
outfit_colors.append(colors)
|
|
||||||
outfit_images, mask = self.pad_array(outfit_images)
|
|
||||||
outfit_colors, _ = self.pad_array(outfit_colors)
|
|
||||||
return outfit_images, outfit_colors, mask
|
|
||||||
|
|
||||||
def get_result(self):
|
|
||||||
# start = time.time()
|
|
||||||
image, color, mask = self.preprocess()
|
|
||||||
# print(start - time.time())
|
|
||||||
# transformed_img = image.astype(np.float32)
|
|
||||||
# 输入集
|
|
||||||
inputs = [
|
|
||||||
httpclient.InferInput("input__0", image.shape, datatype="FP32"),
|
|
||||||
httpclient.InferInput("input__1", color.shape, datatype="FP32"),
|
|
||||||
httpclient.InferInput("input__2", mask.shape, datatype="FP32"),
|
|
||||||
]
|
|
||||||
inputs[0].set_data_from_numpy(image.astype(np.float32), binary_data=True)
|
|
||||||
inputs[1].set_data_from_numpy(color.astype(np.float32), binary_data=True)
|
|
||||||
inputs[2].set_data_from_numpy(mask.astype(np.float32), binary_data=True)
|
|
||||||
# 输出集
|
|
||||||
outputs = [
|
|
||||||
httpclient.InferRequestedOutput("output__0", binary_data=True),
|
|
||||||
]
|
|
||||||
results = self.tritonclient.infer(model_name="outfit_matcher_hon", inputs=inputs, outputs=outputs)
|
|
||||||
# 推理
|
|
||||||
# 取结果
|
|
||||||
inference_output1 = torch.from_numpy(results.as_numpy("output__0"))
|
|
||||||
return inference_output1 # Shape (N, 1)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
with open("./test_param/recommendation_test.json", "r") as f:
|
with open("./test_param/recommendation_test.json", "r") as f:
|
||||||
param = json.load(f)
|
param = json.load(f)
|
||||||
fashion_dataset = FashionDataset(param["database"])
|
fashion_dataset = FashionDataset(param["database"])
|
||||||
for item in tqdm(param["query"]):
|
for item in param["query"]:
|
||||||
outfits = fashion_dataset.generate_outfit(item, param["topk"], param["max_outfits"])
|
outfits = fashion_dataset.generate_outfit(item, param["topk"], param["max_outfits"])
|
||||||
service = OutfitMatcherHon(outfits=outfits)
|
service = OutfitMaterTypeAware()
|
||||||
scores = service.get_result()
|
scores = service.get_result(outfits)
|
||||||
visualize(outfits, scores, param["topk"], best=True,
|
print(scores)
|
||||||
output_path=os.path.join(
|
# service.visualize(outfits, scores, param["topk"], best=True,
|
||||||
r"E:\workspace\outfit_matcher\2024 SS Outfit",
|
# output_path=os.path.join(
|
||||||
f"{item['item_name']}_best_{param['topk']}.png"
|
# r"E:\workspace\outfit_matcher\2024 SS Outfit",
|
||||||
))
|
# f"{item['item_name']}_best_{param['topk']}.png"
|
||||||
visualize(outfits, scores, param["topk"], best=False,
|
# ))
|
||||||
output_path=os.path.join(
|
# service.visualize(outfits, scores, param["topk"], best=False,
|
||||||
r"E:\workspace\outfit_matcher\2024 SS Outfit",
|
# output_path=os.path.join(
|
||||||
f"{item['item_name']}_worst_{param['topk']}.png"
|
# r"E:\workspace\outfit_matcher\2024 SS Outfit",
|
||||||
))
|
# f"{item['item_name']}_worst_{param['topk']}.png"
|
||||||
a = 1
|
# ))
|
||||||
|
|||||||
@@ -0,0 +1,849 @@
|
|||||||
|
{
|
||||||
|
"topk": 5,
|
||||||
|
"max_outfits": 100,
|
||||||
|
"query": [
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58107",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58107.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27047",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27047.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27028",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27028.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58057",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58057.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58495",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58495.jpg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"database":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27017",
|
||||||
|
"semantic_category": "OUTERWEAR/WINDBREAKER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27017.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27047",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27047.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27000",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27000.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27001",
|
||||||
|
"semantic_category": "BOTTOM/SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27001.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MZOS27178",
|
||||||
|
"semantic_category": "KNIT/CARDIGAN",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MZOS27178.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MZOS27179",
|
||||||
|
"semantic_category": "KNIT/KNIT TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MZOS27179.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27184",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27184.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27191",
|
||||||
|
"semantic_category": "OUTERWEAR/TWIN SET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27191.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27193",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27193.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27195",
|
||||||
|
"semantic_category": "OUTERWEAR/GILET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27195.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27200",
|
||||||
|
"semantic_category": "KNIT/VEST",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27200.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27209",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27209.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27210",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27210.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27211",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27211.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MWSS27212",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MWSS27212.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27008",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27008.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27009",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27009.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27010",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27010.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27012",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27012.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27013",
|
||||||
|
"semantic_category": "BOTTOM/SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27013.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27014",
|
||||||
|
"semantic_category": "ONE PIECE/TWIN SET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27014.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27015",
|
||||||
|
"semantic_category": "OUTERWEAR/GILET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27015.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27016",
|
||||||
|
"semantic_category": "BOTTOM/SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27016.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27027",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27027.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27028",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27028.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27029",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27029.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27030",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27030.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27031",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27031.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27034",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27034.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27035",
|
||||||
|
"semantic_category": "ONE PIECE/TWIN SET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27035.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27038",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27038.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27039",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27039.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27040",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27040.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27045",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27045.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27046",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27046.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27050",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27050.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27059",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27059.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27061",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27061.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27062",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27062.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27066",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27066.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27067",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27067.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27068",
|
||||||
|
"semantic_category": "ONE PIECE/TWIN SET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27068.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27002",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27002.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27003",
|
||||||
|
"semantic_category": "OUTERWEAR/GILET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27003.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27004",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27004.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27011",
|
||||||
|
"semantic_category": "TOP/VEST",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27011.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27018",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27018.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27019",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27019.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27058",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27058.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27101",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27101.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27102",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27102.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27103",
|
||||||
|
"semantic_category": "OUTERWEAR/GILET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27103.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27104",
|
||||||
|
"semantic_category": "BOTTOM/SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27104.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27107",
|
||||||
|
"semantic_category": "JEANS/JEANS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27107.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27109",
|
||||||
|
"semantic_category": "JEANS/JEANS JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27109.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27110",
|
||||||
|
"semantic_category": "JEANS/JEANS JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27110.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27111",
|
||||||
|
"semantic_category": "JEANS/JEANS PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27111.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27112",
|
||||||
|
"semantic_category": "JEANS/JEANS PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27112.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27113",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27113.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27119",
|
||||||
|
"semantic_category": "JEANS/JEANS SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27119.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27122",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27122.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27123",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27123.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27128",
|
||||||
|
"semantic_category": "JEANS/JEANS JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27128.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27129",
|
||||||
|
"semantic_category": "JEANS/JEANS SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27129.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27132",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27132.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27133",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27133.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27136",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27136.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27137",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27137.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27140",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27140.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27141",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27141.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27142",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27142.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27145",
|
||||||
|
"semantic_category": "OUTERWEAR/WINDBREAKER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27145.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27146",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27146.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27147",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27147.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27148",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27148.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27149",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27149.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27150",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27150.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27152",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27152.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27154",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27154.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27156",
|
||||||
|
"semantic_category": "TOP/VEST",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27156.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27157",
|
||||||
|
"semantic_category": "OUTERWEAR/WINDBREAKER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27157.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27159",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27159.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27160",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27160.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27161",
|
||||||
|
"semantic_category": "KNIT/CARDIGAN",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27161.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27162",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27162.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27167",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27167.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27173",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27173.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27174",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27174.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27175",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27175.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27176",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27176.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MKTS27073",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MKTS27073.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MLSS27226",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MLSS27226.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7685",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7685.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7686",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7686.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7687",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7687.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7692",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7692.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7693",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7693.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7694",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7694.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7696",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7696.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7697",
|
||||||
|
"semantic_category": "JEANS/JEANS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7697.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7704",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7704.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7705",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7705.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7706",
|
||||||
|
"semantic_category": "JEANS/JEANS JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7706.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7711",
|
||||||
|
"semantic_category": "TOP/VEST",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7711.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7712",
|
||||||
|
"semantic_category": "TOP/TANK",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7712.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7717",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7717.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7722",
|
||||||
|
"semantic_category": "TOP/TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7722.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7723",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7723.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7726",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7726.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7729",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7729.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7731",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7731.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7732",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7732.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MPO_SP7735",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MPO_SP7735.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58197",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58197.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58198",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58198.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58199",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58199.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58112",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58112.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58114",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58114.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58241",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58241.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_57987",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_57987.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_57988",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_57988.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58203",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58203.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58106",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58106.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58107",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58107.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58132",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58132.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58133",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58133.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58057",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58057.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58058",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58058.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58222",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58222.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58317",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58317.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58045",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58045.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58275",
|
||||||
|
"semantic_category": "JEANS/JEANS DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58275.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58276",
|
||||||
|
"semantic_category": "JEANS/JEANS JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58276.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58277",
|
||||||
|
"semantic_category": "JEANS/JEANS SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58277.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58183",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58183.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58184",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58184.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58185",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58185.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58188",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58188.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_54385",
|
||||||
|
"semantic_category": "BOTTOM/PANTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_54385.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_56720",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_56720.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58174",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58174.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58044",
|
||||||
|
"semantic_category": "OUTERWEAR/JACKET",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58044.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58361",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58361.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58495",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58495.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58536",
|
||||||
|
"semantic_category": "ACCESSORY/BAG",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58536.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58653",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58653.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58287",
|
||||||
|
"semantic_category": "BOTTOM/SHORTS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58287.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58289",
|
||||||
|
"semantic_category": "OUTERWEAR/BLAZER",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58289.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58323",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58323.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58421",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58421.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58451",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58451.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58473",
|
||||||
|
"semantic_category": "KNIT/KNIT TOP",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58473.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58498",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58498.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58499",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58499.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58510",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58510.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58516",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58516.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58518",
|
||||||
|
"semantic_category": "BOTTOM/SKIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58518.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58530",
|
||||||
|
"semantic_category": "ONE PIECE/DRESS",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58530.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58540",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58540.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58547",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58547.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58618",
|
||||||
|
"semantic_category": "TOP/BLOUSE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58618.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58655",
|
||||||
|
"semantic_category": "TOP/SHIRT",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58655.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_name": "MSE_58658",
|
||||||
|
"semantic_category": "TOP/TEE",
|
||||||
|
"image_path": "D:\\PhD_Study\\MIXI\\mitu\\image\\2024 SS\\MSE_58658.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user