From ddcc8b43006095eb8bdfb7c6a28c89545f61172b Mon Sep 17 00:00:00 2001 From: zhouchengrong Date: Thu, 28 Mar 2024 10:30:18 +0800 Subject: [PATCH] =?UTF-8?q?attribute=20=E5=AD=97=E6=AE=B5=E5=90=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 22 + README.md | 45 + app/__init__.py | 0 app/api/__init__.py | 0 app/api/api_attribute.py | 19 + app/api/api_outfit_matcher.py | 47 + app/api/api_route.py | 13 + app/api/api_similar_match.py | 28 + app/api/api_test.py | 12 + app/core/__init__.py | 0 app/core/config.py | 49 + app/main.py | 39 + app/schemas/attribute.py | 6 + app/schemas/outfit_matcher.py | 15 + app/schemas/similar_match.py | 6 + app/service/attribute_recognition/__init__.py | 0 app/service/attribute_recognition/const.py | 139 +++ .../attribute_recognition/const_debug.py | 139 +++ .../discriptor/bottom/2_bottom_subtype.csv | 21 + .../discriptor/bottom/3_bottom_length.csv | 6 + .../discriptor/bottom/5_bottom_Softness.csv | 4 + .../discriptor/bottom/6_bottom_Design.csv | 17 + .../discriptor/bottom/7_bottom_OPType.csv | 6 + .../discriptor/bottom/7_outer_Print.csv | 16 + .../discriptor/bottom/8_bottom_Silhouette.csv | 6 + .../discriptor/bottom/8_outer_Material.csv | 28 + .../bottom/ori10_bottom_Silhoutte.csv | 6 + .../discriptor/bottom/ori1_bottom_Type.csv | 3 + .../discriptor/bottom/ori2_bottom_subtype.csv | 47 + .../bottom/ori3_bottom_structure.csv | 4 + .../discriptor/bottom/ori4_bottom_length.csv | 6 + .../discriptor/bottom/ori5_bottom_Print.csv | 16 + .../bottom/ori6_bottom_Material.csv | 28 + .../bottom/ori7_bottom_Softness.csv | 4 + .../discriptor/bottom/ori8_bottom_Design.csv | 17 + .../discriptor/bottom/ori9_bottom_OPType.csv | 6 + .../discriptor/category/category_dis.csv | 7 + .../discriptor/dress/11_dress_Silhouette.csv | 11 + .../discriptor/dress/11_top_OPType.csv | 5 + .../discriptor/dress/12_dress_type.csv | 20 + .../discriptor/dress/1_dress_length.csv | 6 + .../discriptor/dress/3_top_Sleeve_length.csv | 6 + .../discriptor/dress/4_top_Sleeve_shape.csv | 9 + .../dress/5_top_Sleeve_shoulder.csv | 5 + .../discriptor/dress/6_top_Neckline.csv | 7 + .../discriptor/dress/7_outer_Print.csv | 16 + .../discriptor/dress/7_top_Collar.csv | 11 + .../discriptor/dress/8_outer_Material.csv | 28 + .../discriptor/dress/9_dress_Design.csv | 19 + .../discriptor/dress/9_top_Softness.csv | 4 + .../discriptor/dress/ori10_dress_Design.csv | 16 + .../discriptor/dress/ori11_dress_OPType.csv | 5 + .../dress/ori12_dress_Silhouette.csv | 11 + .../discriptor/dress/ori13_dress_Type.csv | 20 + .../discriptor/dress/ori1_dress_length.csv | 6 + .../dress/ori2_dress_Sleeve_length.csv | 6 + .../dress/ori3_dress_Sleeve_shape.csv | 9 + .../dress/ori4_dress_Sleeve_shoulder.csv | 5 + .../discriptor/dress/ori5_dress_Neckline.csv | 17 + .../discriptor/dress/ori6_dress_Collar.csv | 11 + .../discriptor/dress/ori7_dress_Print.csv | 16 + .../discriptor/dress/ori8_dress_Material.csv | 28 + .../discriptor/dress/ori9_dress_Softness.csv | 4 + .../jumpsuit/.~lock.12_jumsuit_subtye.csv# | 1 + .../jumpsuit/.~lock.8_jumpsuit_Material.csv# | 1 + .../discriptor/jumpsuit/10_jumsuit_design.csv | 17 + .../jumpsuit/11_jumpsuit_OPType.csv | 5 + .../jumpsuit/12_jumpsuit_subtype.csv | 6 + .../discriptor/jumpsuit/1_jumsuit_length.csv | 6 + .../jumpsuit/2_jumpsuit_Sleeve_length.csv | 6 + .../jumpsuit/3_jumpsuit_Sleeve_shape.csv | 9 + .../jumpsuit/4_jumpsuit_Sleeve_shoulder.csv | 5 + .../jumpsuit/5_jumpsuit_Neckline.csv | 7 + .../discriptor/jumpsuit/6_jumpsuit_Collar.csv | 11 + .../discriptor/jumpsuit/7_jumpsuit_Print.csv | 16 + .../jumpsuit/8_jumpsuit_Material.csv | 28 + .../jumpsuit/9_jumpsuit_Softness.csv | 4 + .../discriptor/outwear/10_outer_Design.csv | 19 + .../discriptor/outwear/11_outer_opening.csv | 3 + .../discriptor/outwear/12_outer_OPType.csv | 5 + .../outwear/13_outer_Silhouette.csv | 7 + .../discriptor/outwear/1_outer_length.csv | 4 + .../discriptor/outwear/2_outer_type.csv | 18 + .../outwear/3_outer_sleeve_length.csv | 6 + .../outwear/4_outer_sleeve_shape.csv | 9 + .../outwear/5_outer_sleeve_shoulder.csv | 6 + .../discriptor/outwear/6_outer_Collar.csv | 10 + .../discriptor/outwear/7_outer_Print.csv | 16 + .../discriptor/outwear/8_outer_Material.csv | 28 + .../discriptor/outwear/9_outer_Softness.csv | 4 + .../discriptor/top/10_top_Design.csv | 15 + .../discriptor/top/11_top_OPType.csv | 5 + .../discriptor/top/12_top_Silhouette.csv | 7 + .../discriptor/top/1_top_length.csv | 4 + .../discriptor/top/2_top_type.csv | 15 + .../discriptor/top/3_top_Sleeve_length.csv | 6 + .../discriptor/top/4_top_Sleeve_shape.csv | 9 + .../discriptor/top/5_top_Sleeve_shoulder.csv | 5 + .../discriptor/top/6_top_Neckline.csv | 7 + .../discriptor/top/7_outer_Print.csv | 16 + .../discriptor/top/7_top_Collar.csv | 11 + .../discriptor/top/8_outer_Material.csv | 28 + .../discriptor/top/9_top_Softness.csv | 4 + .../discriptor/top/ori10_top_Softness.csv | 4 + .../discriptor/top/ori11_top_Design.csv | 16 + .../discriptor/top/ori12_top_OPType.csv | 5 + .../discriptor/top/ori13_top_Silhouette.csv | 7 + .../discriptor/top/ori1_Top_length.csv | 4 + .../discriptor/top/ori2_Top_type.csv | 15 + .../discriptor/top/ori3_top_Sleeve_length.csv | 6 + .../discriptor/top/ori4_top_Sleeve_shape.csv | 9 + .../top/ori5_top_Sleeve_shoulder.csv | 5 + .../discriptor/top/ori6_top_Neckline.csv | 16 + .../discriptor/top/ori7_top_Collar.csv | 11 + .../discriptor/top/ori8_top_Print.csv | 16 + .../discriptor/top/ori9_top_Material.csv | 28 + app/service/attribute_recognition/service.py | 215 +++++ app/service/outfit_matcher/__init__.py | 0 .../outfit_matcher/color/MKTS27000.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27001.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27002.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27003.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27004.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27008.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27009.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27010.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27011.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27012.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27013.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27014.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27015.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27016.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27017.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27018.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27019.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27027.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27028.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27029.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27030.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27031.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27034.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27035.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27038.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27039.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27040.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27045.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27046.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27047.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27050.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27058.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27059.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27061.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27062.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27066.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27067.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27068.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MKTS27073.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27101.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27102.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27103.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27104.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27107.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27109.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27110.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27111.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27112.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27113.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27119.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27122.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27123.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27128.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27129.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27132.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27133.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27136.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27137.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27140.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27141.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27142.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27145.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27146.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27147.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27148.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27149.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27150.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27152.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27154.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27156.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27157.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27159.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27160.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27161.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27162.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27167.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27173.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27174.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27175.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27176.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MLSS27226.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7685.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7686.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7687.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7692.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7693.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7694.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7696.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7697.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7704.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7705.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7706.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7711.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7712.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7717.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7722.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7723.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7726.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7729.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7731.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7732.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MPO_SP7735.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_54385.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_56720.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_57987.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_57988.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58044.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58045.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58057.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58058.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58106.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58107.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58112.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58114.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58132.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58133.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58174.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58183.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58184.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58185.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58188.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58197.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58198.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58199.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58203.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58222.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58241.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58275.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58276.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58277.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58287.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58289.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58317.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58323.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58361.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58421.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58451.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58473.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58495.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58498.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58499.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58510.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58516.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58518.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58530.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58540.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58547.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58618.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58653.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58655.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MSE_58658.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27184.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27191.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27193.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27195.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27200.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27209.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27210.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27211.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MWSS27212.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MZOS27178.npy | Bin 0 -> 328 bytes .../outfit_matcher/color/MZOS27179.npy | Bin 0 -> 328 bytes .../config/fashion_categories.json | 242 +++++ .../config/fashion_category_mapping.json | 242 +++++ app/service/outfit_matcher/dataset.py | 141 +++ app/service/outfit_matcher/foco.py | 251 ++++++ .../outfit_matcher/outfit_evaluator.py | 338 +++++++ app/service/outfit_matcher/service.py | 37 + .../test_param/recommendation_test.json | 29 + .../test_param/recommendation_test_pkc.json | 849 ++++++++++++++++++ .../test_param/recommendation_test_zcr.json | 849 ++++++++++++++++++ .../outfit_matcher/test_param/test.json | 19 + app/service/similar_match/__init__.py | 0 app/service/similar_match/service.py | 114 +++ app/service/utils/decorator.py | 15 + docker-compose.yml | 9 + gunicorn_config.py | 38 + logging_env.py | 51 ++ requirements.txt | Bin 0 -> 986 bytes 297 files changed, 5098 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/api/__init__.py create mode 100644 app/api/api_attribute.py create mode 100644 app/api/api_outfit_matcher.py create mode 100644 app/api/api_route.py create mode 100644 app/api/api_similar_match.py create mode 100644 app/api/api_test.py create mode 100644 app/core/__init__.py create mode 100644 app/core/config.py create mode 100644 app/main.py create mode 100644 app/schemas/attribute.py create mode 100644 app/schemas/outfit_matcher.py create mode 100644 app/schemas/similar_match.py create mode 100644 app/service/attribute_recognition/__init__.py create mode 100644 app/service/attribute_recognition/const.py create mode 100644 app/service/attribute_recognition/const_debug.py create mode 100644 app/service/attribute_recognition/discriptor/bottom/2_bottom_subtype.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/3_bottom_length.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/5_bottom_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/6_bottom_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/7_bottom_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/7_outer_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/8_bottom_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/8_outer_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori10_bottom_Silhoutte.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori1_bottom_Type.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori2_bottom_subtype.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori3_bottom_structure.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori4_bottom_length.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori5_bottom_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori6_bottom_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori7_bottom_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori8_bottom_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/bottom/ori9_bottom_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/category/category_dis.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/11_dress_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/11_top_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/12_dress_type.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/1_dress_length.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/3_top_Sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/4_top_Sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/5_top_Sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/6_top_Neckline.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/7_outer_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/7_top_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/8_outer_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/9_dress_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/9_top_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori10_dress_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori11_dress_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori12_dress_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori13_dress_Type.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori1_dress_length.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori2_dress_Sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori3_dress_Sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori4_dress_Sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori5_dress_Neckline.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori6_dress_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori7_dress_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori8_dress_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/dress/ori9_dress_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/.~lock.12_jumsuit_subtye.csv# create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/.~lock.8_jumpsuit_Material.csv# create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/10_jumsuit_design.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/11_jumpsuit_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/12_jumpsuit_subtype.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/1_jumsuit_length.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/2_jumpsuit_Sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/3_jumpsuit_Sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/4_jumpsuit_Sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/5_jumpsuit_Neckline.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/6_jumpsuit_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/7_jumpsuit_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/8_jumpsuit_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/jumpsuit/9_jumpsuit_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/10_outer_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/11_outer_opening.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/12_outer_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/13_outer_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/1_outer_length.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/2_outer_type.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/3_outer_sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/4_outer_sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/5_outer_sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/6_outer_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/7_outer_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/8_outer_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/outwear/9_outer_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/top/10_top_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/top/11_top_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/top/12_top_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/top/1_top_length.csv create mode 100644 app/service/attribute_recognition/discriptor/top/2_top_type.csv create mode 100644 app/service/attribute_recognition/discriptor/top/3_top_Sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/top/4_top_Sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/top/5_top_Sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/top/6_top_Neckline.csv create mode 100644 app/service/attribute_recognition/discriptor/top/7_outer_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/top/7_top_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/top/8_outer_Material.csv create mode 100644 app/service/attribute_recognition/discriptor/top/9_top_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori10_top_Softness.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori11_top_Design.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori12_top_OPType.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori13_top_Silhouette.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori1_Top_length.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori2_Top_type.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori3_top_Sleeve_length.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori4_top_Sleeve_shape.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori5_top_Sleeve_shoulder.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori6_top_Neckline.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori7_top_Collar.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori8_top_Print.csv create mode 100644 app/service/attribute_recognition/discriptor/top/ori9_top_Material.csv create mode 100644 app/service/attribute_recognition/service.py create mode 100644 app/service/outfit_matcher/__init__.py create mode 100644 app/service/outfit_matcher/color/MKTS27000.npy create mode 100644 app/service/outfit_matcher/color/MKTS27001.npy create mode 100644 app/service/outfit_matcher/color/MKTS27002.npy create mode 100644 app/service/outfit_matcher/color/MKTS27003.npy create mode 100644 app/service/outfit_matcher/color/MKTS27004.npy create mode 100644 app/service/outfit_matcher/color/MKTS27008.npy create mode 100644 app/service/outfit_matcher/color/MKTS27009.npy create mode 100644 app/service/outfit_matcher/color/MKTS27010.npy create mode 100644 app/service/outfit_matcher/color/MKTS27011.npy create mode 100644 app/service/outfit_matcher/color/MKTS27012.npy create mode 100644 app/service/outfit_matcher/color/MKTS27013.npy create mode 100644 app/service/outfit_matcher/color/MKTS27014.npy create mode 100644 app/service/outfit_matcher/color/MKTS27015.npy create mode 100644 app/service/outfit_matcher/color/MKTS27016.npy create mode 100644 app/service/outfit_matcher/color/MKTS27017.npy create mode 100644 app/service/outfit_matcher/color/MKTS27018.npy create mode 100644 app/service/outfit_matcher/color/MKTS27019.npy create mode 100644 app/service/outfit_matcher/color/MKTS27027.npy create mode 100644 app/service/outfit_matcher/color/MKTS27028.npy create mode 100644 app/service/outfit_matcher/color/MKTS27029.npy create mode 100644 app/service/outfit_matcher/color/MKTS27030.npy create mode 100644 app/service/outfit_matcher/color/MKTS27031.npy create mode 100644 app/service/outfit_matcher/color/MKTS27034.npy create mode 100644 app/service/outfit_matcher/color/MKTS27035.npy create mode 100644 app/service/outfit_matcher/color/MKTS27038.npy create mode 100644 app/service/outfit_matcher/color/MKTS27039.npy create mode 100644 app/service/outfit_matcher/color/MKTS27040.npy create mode 100644 app/service/outfit_matcher/color/MKTS27045.npy create mode 100644 app/service/outfit_matcher/color/MKTS27046.npy create mode 100644 app/service/outfit_matcher/color/MKTS27047.npy create mode 100644 app/service/outfit_matcher/color/MKTS27050.npy create mode 100644 app/service/outfit_matcher/color/MKTS27058.npy create mode 100644 app/service/outfit_matcher/color/MKTS27059.npy create mode 100644 app/service/outfit_matcher/color/MKTS27061.npy create mode 100644 app/service/outfit_matcher/color/MKTS27062.npy create mode 100644 app/service/outfit_matcher/color/MKTS27066.npy create mode 100644 app/service/outfit_matcher/color/MKTS27067.npy create mode 100644 app/service/outfit_matcher/color/MKTS27068.npy create mode 100644 app/service/outfit_matcher/color/MKTS27073.npy create mode 100644 app/service/outfit_matcher/color/MLSS27101.npy create mode 100644 app/service/outfit_matcher/color/MLSS27102.npy create mode 100644 app/service/outfit_matcher/color/MLSS27103.npy create mode 100644 app/service/outfit_matcher/color/MLSS27104.npy create mode 100644 app/service/outfit_matcher/color/MLSS27107.npy create mode 100644 app/service/outfit_matcher/color/MLSS27109.npy create mode 100644 app/service/outfit_matcher/color/MLSS27110.npy create mode 100644 app/service/outfit_matcher/color/MLSS27111.npy create mode 100644 app/service/outfit_matcher/color/MLSS27112.npy create mode 100644 app/service/outfit_matcher/color/MLSS27113.npy create mode 100644 app/service/outfit_matcher/color/MLSS27119.npy create mode 100644 app/service/outfit_matcher/color/MLSS27122.npy create mode 100644 app/service/outfit_matcher/color/MLSS27123.npy create mode 100644 app/service/outfit_matcher/color/MLSS27128.npy create mode 100644 app/service/outfit_matcher/color/MLSS27129.npy create mode 100644 app/service/outfit_matcher/color/MLSS27132.npy create mode 100644 app/service/outfit_matcher/color/MLSS27133.npy create mode 100644 app/service/outfit_matcher/color/MLSS27136.npy create mode 100644 app/service/outfit_matcher/color/MLSS27137.npy create mode 100644 app/service/outfit_matcher/color/MLSS27140.npy create mode 100644 app/service/outfit_matcher/color/MLSS27141.npy create mode 100644 app/service/outfit_matcher/color/MLSS27142.npy create mode 100644 app/service/outfit_matcher/color/MLSS27145.npy create mode 100644 app/service/outfit_matcher/color/MLSS27146.npy create mode 100644 app/service/outfit_matcher/color/MLSS27147.npy create mode 100644 app/service/outfit_matcher/color/MLSS27148.npy create mode 100644 app/service/outfit_matcher/color/MLSS27149.npy create mode 100644 app/service/outfit_matcher/color/MLSS27150.npy create mode 100644 app/service/outfit_matcher/color/MLSS27152.npy create mode 100644 app/service/outfit_matcher/color/MLSS27154.npy create mode 100644 app/service/outfit_matcher/color/MLSS27156.npy create mode 100644 app/service/outfit_matcher/color/MLSS27157.npy create mode 100644 app/service/outfit_matcher/color/MLSS27159.npy create mode 100644 app/service/outfit_matcher/color/MLSS27160.npy create mode 100644 app/service/outfit_matcher/color/MLSS27161.npy create mode 100644 app/service/outfit_matcher/color/MLSS27162.npy create mode 100644 app/service/outfit_matcher/color/MLSS27167.npy create mode 100644 app/service/outfit_matcher/color/MLSS27173.npy create mode 100644 app/service/outfit_matcher/color/MLSS27174.npy create mode 100644 app/service/outfit_matcher/color/MLSS27175.npy create mode 100644 app/service/outfit_matcher/color/MLSS27176.npy create mode 100644 app/service/outfit_matcher/color/MLSS27226.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7685.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7686.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7687.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7692.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7693.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7694.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7696.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7697.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7704.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7705.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7706.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7711.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7712.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7717.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7722.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7723.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7726.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7729.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7731.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7732.npy create mode 100644 app/service/outfit_matcher/color/MPO_SP7735.npy create mode 100644 app/service/outfit_matcher/color/MSE_54385.npy create mode 100644 app/service/outfit_matcher/color/MSE_56720.npy create mode 100644 app/service/outfit_matcher/color/MSE_57987.npy create mode 100644 app/service/outfit_matcher/color/MSE_57988.npy create mode 100644 app/service/outfit_matcher/color/MSE_58044.npy create mode 100644 app/service/outfit_matcher/color/MSE_58045.npy create mode 100644 app/service/outfit_matcher/color/MSE_58057.npy create mode 100644 app/service/outfit_matcher/color/MSE_58058.npy create mode 100644 app/service/outfit_matcher/color/MSE_58106.npy create mode 100644 app/service/outfit_matcher/color/MSE_58107.npy create mode 100644 app/service/outfit_matcher/color/MSE_58112.npy create mode 100644 app/service/outfit_matcher/color/MSE_58114.npy create mode 100644 app/service/outfit_matcher/color/MSE_58132.npy create mode 100644 app/service/outfit_matcher/color/MSE_58133.npy create mode 100644 app/service/outfit_matcher/color/MSE_58174.npy create mode 100644 app/service/outfit_matcher/color/MSE_58183.npy create mode 100644 app/service/outfit_matcher/color/MSE_58184.npy create mode 100644 app/service/outfit_matcher/color/MSE_58185.npy create mode 100644 app/service/outfit_matcher/color/MSE_58188.npy create mode 100644 app/service/outfit_matcher/color/MSE_58197.npy create mode 100644 app/service/outfit_matcher/color/MSE_58198.npy create mode 100644 app/service/outfit_matcher/color/MSE_58199.npy create mode 100644 app/service/outfit_matcher/color/MSE_58203.npy create mode 100644 app/service/outfit_matcher/color/MSE_58222.npy create mode 100644 app/service/outfit_matcher/color/MSE_58241.npy create mode 100644 app/service/outfit_matcher/color/MSE_58275.npy create mode 100644 app/service/outfit_matcher/color/MSE_58276.npy create mode 100644 app/service/outfit_matcher/color/MSE_58277.npy create mode 100644 app/service/outfit_matcher/color/MSE_58287.npy create mode 100644 app/service/outfit_matcher/color/MSE_58289.npy create mode 100644 app/service/outfit_matcher/color/MSE_58317.npy create mode 100644 app/service/outfit_matcher/color/MSE_58323.npy create mode 100644 app/service/outfit_matcher/color/MSE_58361.npy create mode 100644 app/service/outfit_matcher/color/MSE_58421.npy create mode 100644 app/service/outfit_matcher/color/MSE_58451.npy create mode 100644 app/service/outfit_matcher/color/MSE_58473.npy create mode 100644 app/service/outfit_matcher/color/MSE_58495.npy create mode 100644 app/service/outfit_matcher/color/MSE_58498.npy create mode 100644 app/service/outfit_matcher/color/MSE_58499.npy create mode 100644 app/service/outfit_matcher/color/MSE_58510.npy create mode 100644 app/service/outfit_matcher/color/MSE_58516.npy create mode 100644 app/service/outfit_matcher/color/MSE_58518.npy create mode 100644 app/service/outfit_matcher/color/MSE_58530.npy create mode 100644 app/service/outfit_matcher/color/MSE_58540.npy create mode 100644 app/service/outfit_matcher/color/MSE_58547.npy create mode 100644 app/service/outfit_matcher/color/MSE_58618.npy create mode 100644 app/service/outfit_matcher/color/MSE_58653.npy create mode 100644 app/service/outfit_matcher/color/MSE_58655.npy create mode 100644 app/service/outfit_matcher/color/MSE_58658.npy create mode 100644 app/service/outfit_matcher/color/MWSS27184.npy create mode 100644 app/service/outfit_matcher/color/MWSS27191.npy create mode 100644 app/service/outfit_matcher/color/MWSS27193.npy create mode 100644 app/service/outfit_matcher/color/MWSS27195.npy create mode 100644 app/service/outfit_matcher/color/MWSS27200.npy create mode 100644 app/service/outfit_matcher/color/MWSS27209.npy create mode 100644 app/service/outfit_matcher/color/MWSS27210.npy create mode 100644 app/service/outfit_matcher/color/MWSS27211.npy create mode 100644 app/service/outfit_matcher/color/MWSS27212.npy create mode 100644 app/service/outfit_matcher/color/MZOS27178.npy create mode 100644 app/service/outfit_matcher/color/MZOS27179.npy create mode 100644 app/service/outfit_matcher/config/fashion_categories.json create mode 100644 app/service/outfit_matcher/config/fashion_category_mapping.json create mode 100644 app/service/outfit_matcher/dataset.py create mode 100644 app/service/outfit_matcher/foco.py create mode 100644 app/service/outfit_matcher/outfit_evaluator.py create mode 100644 app/service/outfit_matcher/service.py create mode 100644 app/service/outfit_matcher/test_param/recommendation_test.json create mode 100644 app/service/outfit_matcher/test_param/recommendation_test_pkc.json create mode 100644 app/service/outfit_matcher/test_param/recommendation_test_zcr.json create mode 100644 app/service/outfit_matcher/test_param/test.json create mode 100644 app/service/similar_match/__init__.py create mode 100644 app/service/similar_match/service.py create mode 100644 app/service/utils/decorator.py create mode 100644 docker-compose.yml create mode 100644 gunicorn_config.py create mode 100644 logging_env.py create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..570cfd4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM python:3.9 +ENV TZ=Asia/Shanghai +RUN apt update +RUN apt install -y vim +RUN apt install -y libgl1-mesa-glx +COPY ./requirements.txt /requirements.txt +RUN pip install --upgrade pip +RUN pip install -r requirements.txt +RUN pip install gunicorn +RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 +RUN pip install mmcv==1.4.2 -f https://download.openmmlab.com/mmcv/dist/cu117/torch1.13/index.html + +WORKDIR /app +COPY . . +ENV FLASK_APP=manage.py +LABEL maintainer="zchengrong@yeah.net" \ + description="My Python 3.9 - trinity mixi " \ + version="1.0" \ + name="trinity_mixi" + + +CMD ["gunicorn", "-c", "gunicorn_config.py", "app.main:app"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec77e43 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +文件解释 +----------- + +样例包括: + +* README.md - 本文件 +* Dockerfile - 用以自动构建 Docker 镜像的脚本 +* requirements.txt - 依赖包文件 +* main.py - 主 Flask 服务器端源代码 +* python-version : 3.9 + +快速开始 +--------------- + +如下这些引导,假定你想在自己的电脑上开发本项目。 + +1. 安装依赖 + + $ conda create -n trinity_client_mixi python=3.9 -y + $ conda activate trinity_client_mixi + $ pip install -r requirements.txt + $ conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia -y + $ pip install mmcv==1.4.2 -f https://download.openmmlab.com/mmcv/dist/cu117/torch1.13/index.html + + +2. 启动服务器 + + $ uvicorn app.main:app --host 0.0.0.0 --port 8000 + +3. 打开 http://127.0.0.1:8000/docs + +Docker 部署 +--------------- +1. 构建镜像 + + $ cd {workspace} + $ docker build -t trinity_client_mixi + +2. 使用docker-compose 启动 + + $ docker-compose up -d + +3. 查看日志 + + $ docker-compose logs -f \ No newline at end of file diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/api_attribute.py b/app/api/api_attribute.py new file mode 100644 index 0000000..972ccd3 --- /dev/null +++ b/app/api/api_attribute.py @@ -0,0 +1,19 @@ +import logging +from pprint import pprint + +from fastapi import APIRouter + +from app.schemas.attribute import AttributeModel +from app.service.attribute_recognition import const, const_debug +from app.service.attribute_recognition.service import AttributeRecognition + +logger = logging.getLogger() +router = APIRouter() + + +@router.post("") +def attribute(request_data: AttributeModel): + service = AttributeRecognition() + response = service.attribute(const, request_data) + logger.info("test") + return {"code": 200, "message": "ok", "data": response} diff --git a/app/api/api_outfit_matcher.py b/app/api/api_outfit_matcher.py new file mode 100644 index 0000000..24a6337 --- /dev/null +++ b/app/api/api_outfit_matcher.py @@ -0,0 +1,47 @@ +import logging +import time + +from fastapi import APIRouter +from app.schemas.outfit_matcher import OutfitMatcher +from app.service.outfit_matcher.dataset import FashionDataset +from app.service.outfit_matcher.outfit_evaluator import OutfitMaterTypeAware +from app.service.utils.decorator import RunTime + +logger = logging.getLogger() +router = APIRouter() + + +@RunTime +@router.post("outfit_matcher") +def outfit_matcher(request_item: OutfitMatcher): + request_item = dict(request_item) + for i in range(len(request_item['query'])): + request_item['query'][i] = dict(request_item['query'][i]) + for i in range(len(request_item['database'])): + request_item['database'][i] = dict(request_item['database'][i]) + + # try: + fashion_dataset = FashionDataset(request_item['database']) + service = OutfitMaterTypeAware() + result = [] + start_time = time.time() + for item in request_item['query']: + outfits = fashion_dataset.generate_outfit(item, request_item["topk"], request_item["max_outfits"]) + scores, features = service.get_result(outfits) + # save features in databases + + if request_item['is_best']: + best_outfits, best_scores = service.visualize(outfits, scores, request_item["topk"], best=True, + # output_path=os.path.join(r"E:\workspace\outfit_matcher\2024 SS Outfit", f"{item['item_name']}_best_{param['topk']}.png") + ) + result.append({"outfits": best_outfits, "scores": best_scores}) + else: + bad_outfits, bad_scores = service.visualize(outfits, scores, request_item["topk"], best=False, + # output_path=os.path.join(r"E:\workspace\outfit_matcher\2024 SS Outfit", f"{item['item_name']}_worst_{param['topk']}.png") + ) + result.append({"outfits": bad_outfits, "scores": bad_scores}) + logger.info(f"run time is : {time.time() - start_time}") + return {"message": "ok", "data": result} + # except Exception as e: + # logger.warning(e) + # return {"message": f"{e}", "data": e} \ No newline at end of file diff --git a/app/api/api_route.py b/app/api/api_route.py new file mode 100644 index 0000000..983e725 --- /dev/null +++ b/app/api/api_route.py @@ -0,0 +1,13 @@ +from fastapi import APIRouter + +from app.api import api_test +from app.api import api_outfit_matcher +from app.api import api_attribute +from app.api import api_similar_match + +router = APIRouter() + +router.include_router(api_test.router, tags=["test"], prefix="/test") +router.include_router(api_outfit_matcher.router, tags=["outfit_matcher"], prefix="/api/outfit_matcher") +router.include_router(api_attribute.router, tags=["attribute"], prefix="/api/attribute") +router.include_router(api_similar_match.router, tags=["similar_match"], prefix="/api/similar_match") diff --git a/app/api/api_similar_match.py b/app/api/api_similar_match.py new file mode 100644 index 0000000..28c0928 --- /dev/null +++ b/app/api/api_similar_match.py @@ -0,0 +1,28 @@ +import logging +import time + +from fastapi import APIRouter + +from app.schemas.similar_match import SimilarMatchMItem +from app.service.similar_match.service import SimilarMatch +from app.service.utils.decorator import RunTime + +logger = logging.getLogger() +router = APIRouter() + + +@RunTime +@router.post("similar_match") +def similar_match(request_item: SimilarMatchMItem): + try: + if request_item.result_number <= 0: + raise KeyError("result number can't be less than 0") + service = SimilarMatch(request_item) + search_response = service.match_features() + response_data = [] + for response in search_response[0]: + response_data.append(response['entity']) + return {"message": "ok", "data": response_data} + except KeyError as e: + logger.warning(str(e)) + return {"message": "result number can't be less than 0", "data": []} diff --git a/app/api/api_test.py b/app/api/api_test.py new file mode 100644 index 0000000..b47dca5 --- /dev/null +++ b/app/api/api_test.py @@ -0,0 +1,12 @@ +import logging + +from fastapi import APIRouter + +logger = logging.getLogger() +router = APIRouter() + + +@router.get("") +def test(): + logger.info("test") + return {"message": "ok"} diff --git a/app/core/__init__.py b/app/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/core/config.py b/app/core/config.py new file mode 100644 index 0000000..fbb75cb --- /dev/null +++ b/app/core/config.py @@ -0,0 +1,49 @@ +import logging +import os +from dotenv import load_dotenv +from pydantic import BaseSettings + +BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')) +logging.info(f"BASE_DIR : {BASE_DIR}") +load_dotenv(os.path.join(BASE_DIR, '.env')) + + +class Settings(BaseSettings): + PROJECT_NAME = os.getenv('PROJECT_NAME', 'FASTAPI BASE') + SECRET_KEY = os.getenv('SECRET_KEY', '') + API_PREFIX = '' + BACKEND_CORS_ORIGINS = ['*'] + DATABASE_URL = os.getenv('SQL_DATABASE_URL', '') + ACCESS_TOKEN_EXPIRE_SECONDS: int = 60 * 60 * 24 * 7 # Token expired after 7 days + SECURITY_ALGORITHM = 'HS256' + LOGGING_CONFIG_FILE = os.path.join(BASE_DIR, 'logging_env.py') + + +settings = Settings() + +MINIO_IP = "18.167.251.121" +MINIO_PORT = 8000 +MINIO_SECURE = False +MINIO_ACCESS = "e8zc55mzDOh4IzRrZ9Oa" +MINIO_SECRET = "uHfqJ7UkwA1PTDGfnA44Hp9ux5YkZTkzZLjeOYhE" + +OM_TRITON_IP = "10.1.1.240" +OM_TRITON_PORT = "10010" + +ATT_TRITON_IP = "10.1.1.240" +ATT_TRITON_PORT = "10020" + +# service env +# LOGS_PATH = "app/logs/errors.log" +# FASHION_CATEGORIES = "app/service/outfit_matcher/config/fashion_categories.json" +# FASHION_CATEGORIES_MAPPING = "app/service/outfit_matcher/config/fashion_category_mapping.json" + +# pycharm debug +LOGS_PATH = "logs/errors.log" +FASHION_CATEGORIES = "service/outfit_matcher/config/fashion_categories.json" +FASHION_CATEGORIES_MAPPING = "service/outfit_matcher/config/fashion_category_mapping.json" + + +# LOGS_PATH = "app/logs/errors.log" +# FASHION_CATEGORIES = "./config/fashion_categories.json" +# FASHION_CATEGORIES_MAPPING = "./config/fashion_category_mapping.json" \ No newline at end of file diff --git a/app/main.py b/app/main.py new file mode 100644 index 0000000..d20a72f --- /dev/null +++ b/app/main.py @@ -0,0 +1,39 @@ +import uvicorn +from fastapi import FastAPI + +import logging.config + +from app.api.api_route import router +from app.core.config import settings + +from logging_env import LOGGER_CONFIG_DICT + +logging.config.dictConfig(LOGGER_CONFIG_DICT) + +from starlette.middleware.cors import CORSMiddleware + + +def get_application() -> FastAPI: + application = FastAPI( + title=settings.PROJECT_NAME, docs_url="/docs", redoc_url='/re-docs', + openapi_url=f"{settings.API_PREFIX}/openapi.json", + description=''' + Base frame with FastAPI + - out_matcher_hon API + + ''' + ) + application.add_middleware( + CORSMiddleware, + allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ) + application.include_router(router=router, prefix=settings.API_PREFIX) + return application + + +app = get_application() +if __name__ == '__main__': + uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/app/schemas/attribute.py b/app/schemas/attribute.py new file mode 100644 index 0000000..bc9af8e --- /dev/null +++ b/app/schemas/attribute.py @@ -0,0 +1,6 @@ +from pydantic import BaseModel + + +class AttributeModel(BaseModel): + upload_img_path: list + upload_img_id: list diff --git a/app/schemas/outfit_matcher.py b/app/schemas/outfit_matcher.py new file mode 100644 index 0000000..ae265b6 --- /dev/null +++ b/app/schemas/outfit_matcher.py @@ -0,0 +1,15 @@ +from pydantic import BaseModel + + +class OMDataItem(BaseModel): + item_name: str + semantic_category: str + image_path: str + + +class OutfitMatcher(BaseModel): + topk: int + max_outfits: int + is_best: bool + query: list[OMDataItem] + database: list[OMDataItem] diff --git a/app/schemas/similar_match.py b/app/schemas/similar_match.py new file mode 100644 index 0000000..e5fb063 --- /dev/null +++ b/app/schemas/similar_match.py @@ -0,0 +1,6 @@ +from pydantic import BaseModel + + +class SimilarMatchMItem(BaseModel): + image_path: str + result_number: int diff --git a/app/service/attribute_recognition/__init__.py b/app/service/attribute_recognition/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/service/attribute_recognition/const.py b/app/service/attribute_recognition/const.py new file mode 100644 index 0000000..dc17294 --- /dev/null +++ b/app/service/attribute_recognition/const.py @@ -0,0 +1,139 @@ +import torch + +device = torch.device('cuda') +top_discription_list = ['app/service/attribute_recognition/discriptor/top/1_top_length.csv', + 'app/service/attribute_recognition/discriptor/top/2_top_type.csv', + 'app/service/attribute_recognition/discriptor/top/3_top_Sleeve_length.csv', + 'app/service/attribute_recognition/discriptor/top/4_top_Sleeve_shape.csv', + 'app/service/attribute_recognition/discriptor/top/5_top_Sleeve_shoulder.csv', + 'app/service/attribute_recognition/discriptor/top/6_top_Neckline.csv', + 'app/service/attribute_recognition/discriptor/top/7_outer_Print.csv', + 'app/service/attribute_recognition/discriptor/top/8_outer_Material.csv', + # 'app/service/attribute_recognition/discriptor/top/9_top_Material.csv', + 'app/service/attribute_recognition/discriptor/top/9_top_Softness.csv', + 'app/service/attribute_recognition/discriptor/top/10_top_Design.csv', + 'app/service/attribute_recognition/discriptor/top/11_top_OPType.csv', + 'app/service/attribute_recognition/discriptor/top/12_top_Silhouette.csv', + 'app/service/attribute_recognition/discriptor/top/7_top_Collar.csv'] + +top_model_list = ['top_length', + 'top_type', + 'top_Sleeve_length', + 'top_Sleeve_shape', + 'top_Sleeve_shoulder', + 'top_Neckline', + 'top_print', + 'top_material', + 'top_Softness', + 'top_Design', + 'top_optype', + 'top_Silhouette', + 'top_Collar' + ] + +bottom_discription_list = [ + 'app/service/attribute_recognition/discriptor/bottom/2_bottom_subtype.csv', + # 'app/service/attribute_recognition/discriptor/bottom/3_bottom_structure.csv', + 'app/service/attribute_recognition/discriptor/bottom/3_bottom_length.csv', + 'app/service/attribute_recognition/discriptor/bottom/7_outer_Print.csv', + 'app/service/attribute_recognition/discriptor/bottom/8_outer_Material.csv', + 'app/service/attribute_recognition/discriptor/bottom/5_bottom_Softness.csv', + 'app/service/attribute_recognition/discriptor/bottom/8_bottom_Silhouette.csv', + 'app/service/attribute_recognition/discriptor/bottom/7_bottom_OPType.csv', + 'app/service/attribute_recognition/discriptor/bottom/6_bottom_Design.csv'] + +bottom_model_list = [ + 'bottom_sub-Type', + 'bottom_length', + 'bottom_print', + 'bottom_material', + 'bottom_Softness_B', + 'bottom_Silhouette_B', + 'bottom_OPType_B', + 'bottom_design'] + +outwear_discription_list = ['app/service/attribute_recognition/discriptor/outwear/1_outer_length.csv', + # 'app/service/attribute_recognition/discriptor/outwear/2_outer_type.csv', + 'app/service/attribute_recognition/discriptor/outwear/3_outer_sleeve_length.csv', + 'app/service/attribute_recognition/discriptor/outwear/4_outer_sleeve_shape.csv', + 'app/service/attribute_recognition/discriptor/outwear/5_outer_sleeve_shoulder.csv', + 'app/service/attribute_recognition/discriptor/outwear/6_outer_Collar.csv', + 'app/service/attribute_recognition/discriptor/outwear/7_outer_Print.csv', + 'app/service/attribute_recognition/discriptor/outwear/8_outer_Material.csv', + 'app/service/attribute_recognition/discriptor/outwear/9_outer_Softness.csv', + 'app/service/attribute_recognition/discriptor/outwear/10_outer_Design.csv', + # 'app/service/attribute_recognition/discriptor/outwear/11_outer_opening.csv', + 'app/service/attribute_recognition/discriptor/outwear/12_outer_OPType.csv', + 'app/service/attribute_recognition/discriptor/outwear/13_outer_Silhouette.csv', ] + +outwear_model_list = ['outwear_outer_length', + # 'outwear_2_outer_type', + 'outwear_outer_sleeve_length', + 'outwear_outer_sleeve_shape', + 'outwear_outer_sleeve_shoulder', + 'outwear_outer_collar', + 'outwear_print', + 'outwear_material', + 'outwear_outer_softness', + 'outwear_outer_design', + # 'outwear_11_outer_opening', + 'outwear_outer_optype', + 'outwear_outer_silhouette'] + +jumpsuit_discription_list = ['app/service/attribute_recognition/discriptor/jumpsuit/1_jumsuit_length.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/2_jumpsuit_Sleeve_length.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/3_jumpsuit_Sleeve_shape.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/4_jumpsuit_Sleeve_shoulder.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/5_jumpsuit_Neckline.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/6_jumpsuit_Collar.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/7_jumpsuit_Print.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/8_jumpsuit_Material.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/9_jumpsuit_Softness.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/10_jumsuit_design.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/11_jumpsuit_OPType.csv', + 'app/service/attribute_recognition/discriptor/jumpsuit/12_jumpsuit_subtype.csv'] + +jumpsuit_model_list = ['jumpsuit_length', + 'jumpsuit_sleeve_length', + 'jumpsuit_sleeve_shape', + 'jumpsuit_sleeve_shoulder', + 'jumpsuit_neckline', + 'jumpsuit_collar', + 'jumpsuit_print', + 'jumpsuit_material', + 'jumpsuit_softness', + 'jumpsuit_design', + 'jumpsuit_optype', + 'jumpsuit_subtype'] + +dress_discription_list = ['app/service/attribute_recognition/discriptor/dress/1_dress_length.csv', + 'app/service/attribute_recognition/discriptor/dress/3_top_Sleeve_length.csv', + 'app/service/attribute_recognition/discriptor/dress/4_top_Sleeve_shape.csv', + 'app/service/attribute_recognition/discriptor/dress/5_top_Sleeve_shoulder.csv', + 'app/service/attribute_recognition/discriptor/dress/ori5_dress_Neckline.csv', + 'app/service/attribute_recognition/discriptor/dress/7_outer_Print.csv', + 'app/service/attribute_recognition/discriptor/dress/7_top_Collar.csv', + 'app/service/attribute_recognition/discriptor/dress/8_outer_Material.csv', + 'app/service/attribute_recognition/discriptor/dress/9_dress_Design.csv', + 'app/service/attribute_recognition/discriptor/dress/9_top_Softness.csv', + 'app/service/attribute_recognition/discriptor/dress/11_dress_Silhouette.csv', + # 'app/service/attribute_recognition/discriptor/dress/11_top_OPType.csv', + 'app/service/attribute_recognition/discriptor/dress/12_dress_type.csv'] + +dress_model_list = ['dress_length', + 'dress_sleeve_length', + 'dress_sleeve_shape', + 'dress_sleeve_shoulder', + 'dress_neckline', + 'dress_print', + 'dress_collar', + 'dress_material', + 'dress_design', + 'dress_softness', + 'dress_silohouette12', + # 'dress_' + 'dress_type' + ] + +category_discription = 'app/service/attribute_recognition/discriptor/category/category_dis.csv' +category_model = 'category' diff --git a/app/service/attribute_recognition/const_debug.py b/app/service/attribute_recognition/const_debug.py new file mode 100644 index 0000000..3b20939 --- /dev/null +++ b/app/service/attribute_recognition/const_debug.py @@ -0,0 +1,139 @@ +import torch + +device = torch.device('cuda') +top_discription_list = [r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\1_top_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\2_top_type.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\3_top_Sleeve_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\4_top_Sleeve_shape.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\5_top_Sleeve_shoulder.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\6_top_Neckline.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\7_outer_Print.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\8_outer_Material.csv', + # r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\9_top_Material.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\9_top_Softness.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\10_top_Design.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\11_top_OPType.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\12_top_Silhouette.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\top\7_top_Collar.csv'] + +top_model_list = ['top_length', + 'top_type', + 'top_Sleeve_length', + 'top_Sleeve_shape', + 'top_Sleeve_shoulder', + 'top_Neckline', + 'top_print', + 'top_material', + 'top_Softness', + 'top_Design', + 'top_optype', + 'top_Silhouette', + 'top_Collar' + ] + +bottom_discription_list = [ + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\2_bottom_subtype.csv', + # r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\3_bottom_structure.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\3_bottom_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\7_outer_Print.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\8_outer_Material.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\5_bottom_Softness.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\8_bottom_Silhouette.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\7_bottom_OPType.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\bottom\6_bottom_Design.csv'] + +bottom_model_list = [ + 'bottom_sub-Type', + 'bottom_length', + 'bottom_print', + 'bottom_material', + 'bottom_Softness_B', + 'bottom_Silhouette_B', + 'bottom_OPType_B', + 'bottom_design'] + +outwear_discription_list = [r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\1_outer_length.csv', + # r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\2_outer_type.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\3_outer_sleeve_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\4_outer_sleeve_shape.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\5_outer_sleeve_shoulder.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\6_outer_Collar.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\7_outer_Print.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\8_outer_Material.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\9_outer_Softness.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\10_outer_Design.csv', + # r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\11_outer_opening.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\12_outer_OPType.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\outwear\13_outer_Silhouette.csv', ] + +outwear_model_list = ['outwear_outer_length', + # 'outwear_2_outer_type', + 'outwear_outer_sleeve_length', + 'outwear_outer_sleeve_shape', + 'outwear_outer_sleeve_shoulder', + 'outwear_outer_collar', + 'outwear_print', + 'outwear_material', + 'outwear_outer_softness', + 'outwear_outer_design', + # 'outwear_11_outer_opening', + 'outwear_outer_optype', + 'outwear_outer_silhouette'] + +jumpsuit_discription_list = [r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\1_jumsuit_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\2_jumpsuit_Sleeve_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\3_jumpsuit_Sleeve_shape.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\4_jumpsuit_Sleeve_shoulder.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\5_jumpsuit_Neckline.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\6_jumpsuit_Collar.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\7_jumpsuit_Print.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\8_jumpsuit_Material.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\9_jumpsuit_Softness.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\10_jumsuit_design.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\11_jumpsuit_OPType.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\jumpsuit\12_jumpsuit_subtype.csv'] + +jumpsuit_model_list = ['jumpsuit_length', + 'jumpsuit_sleeve_length', + 'jumpsuit_sleeve_shape', + 'jumpsuit_sleeve_shoulder', + 'jumpsuit_neckline', + 'jumpsuit_collar', + 'jumpsuit_print', + 'jumpsuit_material', + 'jumpsuit_softness', + 'jumpsuit_design', + 'jumpsuit_optype', + 'jumpsuit_subtype'] + +dress_discription_list = [r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\1_dress_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\3_top_Sleeve_length.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\4_top_Sleeve_shape.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\5_top_Sleeve_shoulder.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\ori5_dress_Neckline.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\7_outer_Print.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\7_top_Collar.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\8_outer_Material.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\9_dress_Design.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\9_top_Softness.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\11_dress_Silhouette.csv', + # r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\11_top_OPType.csv', + r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\dress\12_dress_type.csv'] + +dress_model_list = ['dress_length', + 'dress_sleeve_length', + 'dress_sleeve_shape', + 'dress_sleeve_shoulder', + 'dress_neckline', + 'dress_print', + 'dress_collar', + 'dress_material', + 'dress_design', + 'dress_softness', + 'dress_silohouette12', + # 'dress_' + 'dress_type' + ] + +category_discription = r'E:\workspace\trinity_client_mixi\app\service\attribute_recognition\discriptor\category\category_dis.csv' +category_model = 'category' diff --git a/app/service/attribute_recognition/discriptor/bottom/2_bottom_subtype.csv b/app/service/attribute_recognition/discriptor/bottom/2_bottom_subtype.csv new file mode 100644 index 0000000..7cb9fb2 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/2_bottom_subtype.csv @@ -0,0 +1,21 @@ +labelName,join_attr,taskName,taskId +A Line Skirt,bottom_Sub-Type_1,Sub_Type,2 +Bodycon Skirt,bottom_Sub-Type_2,Sub_Type,2 +Boot-Cut,bottom_Sub-Type_3,Sub_Type,2 +Bubble skirt,bottom_Sub-Type_4,Sub_Type,2 +Cargo Pants,bottom_Sub-Type_5,Sub_Type,2 +Culottes,bottom_Sub-Type_6,Sub_Type,2 +Handkerchief Skirt,bottom_Sub-Type_7,Sub_Type,2 +Jeans,bottom_Sub-Type_8,Sub_Type,2 +Joggers,bottom_Sub-Type_9,Sub_Type,2 +Leather pants,bottom_Sub-Type_10,Sub_Type,2 +Leggings,bottom_Sub-Type_11,Sub_Type,2 +Mermaid,bottom_Sub-Type_12,Sub_Type,2 +Pattened pants,bottom_Sub-Type_13,Sub_Type,2 +Peg leg Pants-Cigarette Pants,bottom_Sub-Type_14,Sub_Type,2 +Pencil Skirt,bottom_Sub-Type_15,Sub_Type,2 +Pleated Skirt,bottom_Sub-Type_16,Sub_Type,2 +Shorts,bottom_Sub-Type_17,Sub_Type,2 +Skater Skirt,bottom_Sub-Type_18,Sub_Type,2 +Suit Trousers,bottom_Sub-Type_19,Sub_Type,2 +Tier Skirt,bottom_Sub-Type_20,Sub_Type,2 diff --git a/app/service/attribute_recognition/discriptor/bottom/3_bottom_length.csv b/app/service/attribute_recognition/discriptor/bottom/3_bottom_length.csv new file mode 100644 index 0000000..ecaf257 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/3_bottom_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Short,attr_BTM_length_1,Length,3 +Middle,attr_BTM_length_2,Length,3 +Seven,attr_BTM_length_3,Length,3 +Nine,attr_BTM_length_4,Length,3 +Long,attr_BTM_length_5,Length,3 diff --git a/app/service/attribute_recognition/discriptor/bottom/5_bottom_Softness.csv b/app/service/attribute_recognition/discriptor/bottom/5_bottom_Softness.csv new file mode 100644 index 0000000..8269778 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/5_bottom_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_B_1,Softness,5 +Medium,attr_Softness_B_2,Softness,5 +Hard,attr_Softness_B_3,Softness,5 diff --git a/app/service/attribute_recognition/discriptor/bottom/6_bottom_Design.csv b/app/service/attribute_recognition/discriptor/bottom/6_bottom_Design.csv new file mode 100644 index 0000000..27bf3d1 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/6_bottom_Design.csv @@ -0,0 +1,17 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_B_1,Design,6 +Tiered,attr_Design_B_2,Design,6 +Tassel,attr_Design_B_3,Design,6 +Ruffle,attr_Design_B_4,Design,6 +Pleated,attr_Design_B_5,Design,6 +Wrap,attr_Design_B_6,Design,6 +Ripped,attr_Design_B_7,Design,6 +Cut out,attr_Design_B_8,Design,6 +Eyelet,attr_Design_B_9,Design,6 +Folded,attr_Design_B_10,Design,6 +Tied,attr_Design_B_11,Design,6 +Drapes,attr_Design_B_12,Design,6 +Ribbon,attr_Design_B_13,Design,6 +Button,attr_Design_B_14,Design,6 +Split,attr_Design_B_15,Design,6 +Fishtail,attr_Design_B_16,Design,6 diff --git a/app/service/attribute_recognition/discriptor/bottom/7_bottom_OPType.csv b/app/service/attribute_recognition/discriptor/bottom/7_bottom_OPType.csv new file mode 100644 index 0000000..008d981 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/7_bottom_OPType.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_B_1,Opening_Type,7 +Zipper,attr_OPType_B_2,Opening_Type,7 +Thread,attr_OPType_B_3,Opening_Type,7 +Hook,attr_OPType_B_4,Opening_Type,7 +Elastic,attr_OPType_B_5,Opening_Type,7 diff --git a/app/service/attribute_recognition/discriptor/bottom/7_outer_Print.csv b/app/service/attribute_recognition/discriptor/bottom/7_outer_Print.csv new file mode 100644 index 0000000..cb5695d --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/7_outer_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Abstract,attr_Print_O_1,Print,7 +Allover,attr_Print_O_2,Print,7 +Animal,attr_Print_O_3,Print,7 +Camouflage,attr_Print_O_4,Print,7 +Checks,attr_Print_O_5,Print,7 +Color_block,attr_Print_O_6,Print,7 +Disty print,attr_Print_O_7,Print,7 +Dotted,attr_Print_O_8,Print,7 +Floral,attr_Print_O_9,Print,7 +Graphic print,attr_Print_O_10,Print,7 +Logo and slogan,attr_Print_O_11,Print,7 +Patchwork,attr_Print_O_12,Print,7 +Plain,attr_Print_O_13,Print,7 +Plain_dnim,attr_Print_O_14,Print,7 +Stripe,attr_Print_O_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/bottom/8_bottom_Silhouette.csv b/app/service/attribute_recognition/discriptor/bottom/8_bottom_Silhouette.csv new file mode 100644 index 0000000..9bd771a --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/8_bottom_Silhouette.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_B_1,Silhouette,8 +H Shape,attr_Silhouette_B_2,Silhouette,8 +Slim,attr_Silhouette_B_3,Silhouette,8 +Peg-leg,attr_Silhouette_B_4,Silhouette,8 +Peplum,attr_Silhouette_B_5,Silhouette,8 diff --git a/app/service/attribute_recognition/discriptor/bottom/8_outer_Material.csv b/app/service/attribute_recognition/discriptor/bottom/8_outer_Material.csv new file mode 100644 index 0000000..2db5c94 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/8_outer_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +Canvas,attr_Material_O_1,Material,8 +Chambray,attr_Material_O_2,Material,8 +Chenille,attr_Material_O_3,Material,8 +Chiffon,attr_Material_O_4,Material,8 +Corduroy,attr_Material_O_5,Material,8 +Crepe,attr_Material_O_6,Material,8 +Denim,attr_Material_O_7,Material,8 +Faux_fur,attr_Material_O_8,Material,8 +Faux_leather,attr_Material_O_9,Material,8 +Flannel,attr_Material_O_10,Material,8 +Fleece,attr_Material_O_11,Material,8 +Gingham,attr_Material_O_12,Material,8 +Jersey,attr_Material_O_13,Material,8 +Knit,attr_Material_O_14,Material,8 +Lace,attr_Material_O_15,Material,8 +Lawn,attr_Material_O_16,Material,8 +Neoprene,attr_Material_O_17,Material,8 +Organza,attr_Material_O_18,Material,8 +Plush,attr_Material_O_19,Material,8 +Satin,attr_Material_O_20,Material,8 +Serge,attr_Material_O_21,Material,8 +Taffeta,attr_Material_O_22,Material,8 +Tulle,attr_Material_O_23,Material,8 +Tweed,attr_Material_O_24,Material,8 +Twill,attr_Material_O_25,Material,8 +Velvet,attr_Material_O_26,Material,8 +Vinyl,attr_Material_O_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori10_bottom_Silhoutte.csv b/app/service/attribute_recognition/discriptor/bottom/ori10_bottom_Silhoutte.csv new file mode 100644 index 0000000..48a01f9 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori10_bottom_Silhoutte.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_B_1,Silhouette,10 +H Shape,attr_Silhouette_B_2,Silhouette,10 +Slim,attr_Silhouette_B_3,Silhouette,10 +Peg-top,attr_Silhouette_B_4,Silhouette,10 +Peplum,attr_Silhouette_B_5,Silhouette,10 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori1_bottom_Type.csv b/app/service/attribute_recognition/discriptor/bottom/ori1_bottom_Type.csv new file mode 100644 index 0000000..e1a7c82 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori1_bottom_Type.csv @@ -0,0 +1,3 @@ +labelName,join_attr,taskName,taskId +Pants,BTM_Type_1,Type,1 +Skirt,BTM_Type_2,Type,1 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori2_bottom_subtype.csv b/app/service/attribute_recognition/discriptor/bottom/ori2_bottom_subtype.csv new file mode 100644 index 0000000..93d835f --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori2_bottom_subtype.csv @@ -0,0 +1,47 @@ +labelName,join_attr,taskName,taskId +Jeans,BTM_Sub-Type_1,Sub_Type,2 +Leggings,BTM_Sub-Type_2,Sub_Type,2 +Joggers,BTM_Sub-Type_3,Sub_Type,2 +Suit Trousers,BTM_Sub-Type_4,Sub_Type,2 +Cargo Pants,BTM_Sub-Type_5,Sub_Type,2 +Culottes,BTM_Sub-Type_6,Sub_Type,2 +Peg leg Pants ,BTM_Sub-Type_7,Sub_Type,2 +A Line Skirt_gathered,BTM_Sub-Type_8,Sub_Type,2 +Pencil Skirt,BTM_Sub-Type_9,Sub_Type,2 +Handkerchief Skirt,BTM_Sub-Type_10,Sub_Type,2 +Mermaid/Fishtail Skirt,BTM_Sub-Type_11,Sub_Type,2 +Skater Skirt,BTM_Sub-Type_12,Sub_Type,2 +Bodycon Skirt,BTM_Sub-Type_13,Sub_Type,2 +Shorts,BTM_Sub-Type_14,Sub_Type,2 +boot-cut_flare,BTM_Sub-Type_15,Sub_Type,2 +Pleated Skirt,BTM_Sub-Type_16,Sub_Type,2 +Bubble skirt,BTM_Sub-Type_17,Sub_Type,2 +Leather pants,BTM_Sub-Type_18,Sub_Type,2 +pattened pants,BTM_Sub-Type_19,Sub_Type,2 +Tier Skirt,BTM_Sub-Type_20,Sub_Type,2 +asymmetric_mullet,BTM_Sub-Type_21,Sub_Type,2 +baggy,BTM_Sub-Type_22,Sub_Type,2 +denim skirt,BTM_Sub-Type_23,Sub_Type,2 +flare skirt,BTM_Sub-Type_24,Sub_Type,2 +fringe skirt,BTM_Sub-Type_25,Sub_Type,2 +godet skirt,BTM_Sub-Type_26,Sub_Type,2 +high rise pants,BTM_Sub-Type_27,Sub_Type,2 +hight waist skirt,BTM_Sub-Type_28,Sub_Type,2 +hat pants,BTM_Sub-Type_29,Sub_Type,2 +leather skirts,BTM_Sub-Type_30,Sub_Type,2 +long skirts,BTM_Sub-Type_31,Sub_Type,2 +low rise pants,BTM_Sub-Type_32,Sub_Type,2 +mini skirt,BTM_Sub-Type_33,Sub_Type,2 +panel kirt,BTM_Sub-Type_34,Sub_Type,2 +peg top skirt,BTM_Sub-Type_35,Sub_Type,2 +pencil pants,BTM_Sub-Type_36,Sub_Type,2 +shorts (denim),BTM_Sub-Type_37,Sub_Type,2 +skinny_cigarette pants,BTM_Sub-Type_38,Sub_Type,2 +split skirt,BTM_Sub-Type_39,Sub_Type,2 +stirrup,BTM_Sub-Type_40,Sub_Type,2 +stranget pants,BTM_Sub-Type_41,Sub_Type,2 +straight skirt,BTM_Sub-Type_42,Sub_Type,2 +wide leg pants,BTM_Sub-Type_43,Sub_Type,2 +wrap skirt,BTM_Sub-Type_44,Sub_Type,2 +Jeans,BTM_Sub-Type_45,Sub_Type,2 +Leggings,BTM_Sub-Type_46,Sub_Type,2 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori3_bottom_structure.csv b/app/service/attribute_recognition/discriptor/bottom/ori3_bottom_structure.csv new file mode 100644 index 0000000..e968d11 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori3_bottom_structure.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Woven,attr_BTM_Structure_1,Structure,3 +Knit,attr_BTM_Structure_2,Structure,3 +Sweater,attr_BTM_Structure_3,Structure,3 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori4_bottom_length.csv b/app/service/attribute_recognition/discriptor/bottom/ori4_bottom_length.csv new file mode 100644 index 0000000..87465d1 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori4_bottom_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Short,attr_BTM_length_1,Length,4 +Middle,attr_BTM_length_2,Length,4 +Seven,attr_BTM_length_3,Length,4 +Nine,attr_BTM_length_4,Length,4 +Long,attr_BTM_length_5,Length,4 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori5_bottom_Print.csv b/app/service/attribute_recognition/discriptor/bottom/ori5_bottom_Print.csv new file mode 100644 index 0000000..4d6410e --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori5_bottom_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +abstract,attr_Print_B_1,Print,5 +allover,attr_Print_B_2,Print,5 +animal printed,attr_Print_B_3,Print,5 +Camouflage,attr_Print_B_4,Print,5 +checks,attr_Print_B_5,Print,5 +color_block,attr_Print_B_6,Print,5 +disty print,attr_Print_B_7,Print,5 +dotted,attr_Print_B_8,Print,5 +floral,attr_Print_B_9,Print,5 +graphic print,attr_Print_B_10,Print,5 +logo and slogan print,attr_Print_B_11,Print,5 +patchwork,attr_Print_B_12,Print,5 +plain,attr_Print_B_13,Print,5 +plain_dnim,attr_Print_B_14,Print,5 +stripe,attr_Print_B_15,Print,5 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori6_bottom_Material.csv b/app/service/attribute_recognition/discriptor/bottom/ori6_bottom_Material.csv new file mode 100644 index 0000000..6d94f8b --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori6_bottom_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +canvas,attr_Material_B_1,Material,6 +chambray,attr_Material_B_2,Material,6 +chenille,attr_Material_B_3,Material,6 +chiffon,attr_Material_B_4,Material,6 +corduroy,attr_Material_B_5,Material,6 +crepe,attr_Material_B_6,Material,6 +denim,attr_Material_B_7,Material,6 +faux_fur,attr_Material_B_8,Material,6 +faux_leather,attr_Material_B_9,Material,6 +flannel,attr_Material_B_10,Material,6 +fleece,attr_Material_B_11,Material,6 +gingham,attr_Material_B_12,Material,6 +jersey,attr_Material_B_13,Material,6 +knit,attr_Material_B_14,Material,6 +lace,attr_Material_B_15,Material,6 +lawn,attr_Material_B_16,Material,6 +neoprene,attr_Material_B_17,Material,6 +organza,attr_Material_B_18,Material,6 +plush,attr_Material_B_19,Material,6 +satin,attr_Material_B_20,Material,6 +serge,attr_Material_B_21,Material,6 +taffeta,attr_Material_B_22,Material,6 +tulle,attr_Material_B_23,Material,6 +tweed,attr_Material_B_24,Material,6 +twill,attr_Material_B_25,Material,6 +velvet,attr_Material_B_26,Material,6 +vinyl,attr_Material_B_27,Material,6 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori7_bottom_Softness.csv b/app/service/attribute_recognition/discriptor/bottom/ori7_bottom_Softness.csv new file mode 100644 index 0000000..74421f0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori7_bottom_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_B_1,Softness,7 +Medium,attr_Softness_B_2,Softness,7 +Hard,attr_Softness_B_3,Softness,7 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori8_bottom_Design.csv b/app/service/attribute_recognition/discriptor/bottom/ori8_bottom_Design.csv new file mode 100644 index 0000000..6a8e5d7 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori8_bottom_Design.csv @@ -0,0 +1,17 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_B_1,Design,8 +Tiered,attr_Design_B_2,Design,8 +Tassel,attr_Design_B_3,Design,8 +Ruffle,attr_Design_B_4,Design,8 +Pleated,attr_Design_B_5,Design,8 +Wrap,attr_Design_B_6,Design,8 +Ripped,attr_Design_B_7,Design,8 +Cut out,attr_Design_B_8,Design,8 +Eyelet,attr_Design_B_9,Design,8 +Folded,attr_Design_B_10,Design,8 +Tied,attr_Design_B_11,Design,8 +Drapes,attr_Design_B_12,Design,8 +Ribbon,attr_Design_B_13,Design,8 +Button,attr_Design_B_14,Design,8 +Split,attr_Design_B_15,Design,8 +Fishtail,attr_Design_B_16,Design,8 diff --git a/app/service/attribute_recognition/discriptor/bottom/ori9_bottom_OPType.csv b/app/service/attribute_recognition/discriptor/bottom/ori9_bottom_OPType.csv new file mode 100644 index 0000000..5aaef17 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/bottom/ori9_bottom_OPType.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_B_1,Opening_Type,9 +Zipper,attr_OPType_B_2,Opening_Type,9 +Thread,attr_OPType_B_3,Opening_Type,9 +Hook,attr_OPType_B_4,Opening_Type,9 +Elastic,attr_OPType_B_5,Opening_Type,9 diff --git a/app/service/attribute_recognition/discriptor/category/category_dis.csv b/app/service/attribute_recognition/discriptor/category/category_dis.csv new file mode 100644 index 0000000..724edb2 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/category/category_dis.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +top,attr_top,category,1 +pants,attr_pants,category,1 +skirt,attr_skirt,category,1 +dress,attr_dress,category,1 +outwear,attr_outwear,category,1 +jumpsuit,attr_jumpsuit,category,1 diff --git a/app/service/attribute_recognition/discriptor/dress/11_dress_Silhouette.csv b/app/service/attribute_recognition/discriptor/dress/11_dress_Silhouette.csv new file mode 100644 index 0000000..97499f4 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/11_dress_Silhouette.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_U_1,Silhouette,11 +H Shape,attr_Silhouette_U_2,Silhouette,11 +Slim,attr_Silhouette_U_3,Silhouette,11 +Oversized,attr_Silhouette_U_4,Silhouette,11 +Cacoon,attr_Silhouette_U_5,Silhouette,11 +Empire,attr_Silhouette_U_6,Silhouette,11 +Hourglass,attr_Silhouette_U_7,Silhouette,11 +Mermaid,attr_Silhouette_U_8,Silhouette,11 +Sheath,attr_Silhouette_U_9,Silhouette,11 +Tent,attr_Silhouette_U_10,Silhouette,11 diff --git a/app/service/attribute_recognition/discriptor/dress/11_top_OPType.csv b/app/service/attribute_recognition/discriptor/dress/11_top_OPType.csv new file mode 100644 index 0000000..870631b --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/11_top_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_U_1,Opening_Type,11 +Zipper,attr_OPType_U_2,Opening_Type,11 +Thread,attr_OPType_U_3,Opening_Type,11 +Hook,attr_OPType_U_4,Opening_Type,11 diff --git a/app/service/attribute_recognition/discriptor/dress/12_dress_type.csv b/app/service/attribute_recognition/discriptor/dress/12_dress_type.csv new file mode 100644 index 0000000..7a7a1c7 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/12_dress_type.csv @@ -0,0 +1,20 @@ +labelName,join_attr,taskName,taskId +Evening gown,attr_dresstype_1,Type,12 +Shirt-dress,attr_dresstype_2,Type,12 +Coat dress,attr_dresstype_3,Type,12 +Handkerchief dress,attr_dresstype_4,Type,12 +Jumper dress,attr_dresstype_5,Type,12 +Dungaree dress,attr_dresstype_6,Type,12 +Skater dress,attr_dresstype_7,Type,12 +Tea dress,attr_dresstype_8,Type,12 +Mermaid dress,attr_dresstype_9,Type,12 +Cocktail dress,attr_dresstype_10,Type,12 +A-Line dress,attr_dresstype_11,Type,12 +Bodycon dress,attr_dresstype_12,Type,12 +Maxi dress,attr_dresstype_13,Type,12 +Office dress,attr_dresstype_14,Type,12 +Pencil dress,attr_dresstype_15,Type,12 +Sheer dress,attr_dresstype_16,Type,12 +Shift dress,attr_dresstype_17,Type,12 +Slip dress,attr_dresstype_18,Type,12 +T-shirt dress,attr_dresstype_19,Type,12 \ No newline at end of file diff --git a/app/service/attribute_recognition/discriptor/dress/1_dress_length.csv b/app/service/attribute_recognition/discriptor/dress/1_dress_length.csv new file mode 100644 index 0000000..9568d0c --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/1_dress_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Maxi,attr_Dress_length_1,Length,1 +Midi,attr_Dress_length_2,Length,1 +Mini,attr_Dress_length_3,Length,1 +Over the knee,attr_Dress_length_4,Length,1 +Floor Length,attr_Dress_length_5,Length,1 diff --git a/app/service/attribute_recognition/discriptor/dress/3_top_Sleeve_length.csv b/app/service/attribute_recognition/discriptor/dress/3_top_Sleeve_length.csv new file mode 100644 index 0000000..1f2a0f3 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/3_top_Sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_Sleeve_length_1,Sleeve_Length,3 +Short,attr_Sleeve_length_2,Sleeve_Length,3 +Middle,attr_Sleeve_length_3,Sleeve_Length,3 +Seven,attr_Sleeve_length_4,Sleeve_Length,3 +Long,attr_Sleeve_length_5,Sleeve_Length,3 diff --git a/app/service/attribute_recognition/discriptor/dress/4_top_Sleeve_shape.csv b/app/service/attribute_recognition/discriptor/dress/4_top_Sleeve_shape.csv new file mode 100644 index 0000000..d429c11 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/4_top_Sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shape_1,Sleeve_Shape,4 +Slim,attr_Sleeve_shape_2,Sleeve_Shape,4 +Puff,attr_Sleeve_shape_3,Sleeve_Shape,4 +Bell,attr_Sleeve_shape_4,Sleeve_Shape,4 +Batwing,attr_Sleeve_shape_5,Sleeve_Shape,4 +Shirt,attr_Sleeve_shape_6,Sleeve_Shape,4 +Rib,attr_Sleeve_shape_7,Sleeve_Shape,4 +Raglan,attr_Sleeve_shape_8,Sleeve_Shape,4 diff --git a/app/service/attribute_recognition/discriptor/dress/5_top_Sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/dress/5_top_Sleeve_shoulder.csv new file mode 100644 index 0000000..c31e7ea --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/5_top_Sleeve_shoulder.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shoulder_1,Sleeve_Shoulder,5 +Cold,attr_Sleeve_shoulder_2,Sleeve_Shoulder,5 +Tucked,attr_Sleeve_shoulder_3,Sleeve_Shoulder,5 +Balmain,attr_Sleeve_shoulder_4,Sleeve_Shoulder,5 diff --git a/app/service/attribute_recognition/discriptor/dress/6_top_Neckline.csv b/app/service/attribute_recognition/discriptor/dress/6_top_Neckline.csv new file mode 100644 index 0000000..30c1420 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/6_top_Neckline.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +Round,attr_Neckline_1,Neckline,6 +V,attr_Neckline_2,Neckline,6 +Square,attr_Neckline_3,Neckline,6 +One-shoulder,attr_Neckline_4,Neckline,6 +Off-shoulder,attr_Neckline_5,Neckline,6 +Strapless,attr_Neckline_6,Neckline,6 diff --git a/app/service/attribute_recognition/discriptor/dress/7_outer_Print.csv b/app/service/attribute_recognition/discriptor/dress/7_outer_Print.csv new file mode 100644 index 0000000..cb5695d --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/7_outer_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Abstract,attr_Print_O_1,Print,7 +Allover,attr_Print_O_2,Print,7 +Animal,attr_Print_O_3,Print,7 +Camouflage,attr_Print_O_4,Print,7 +Checks,attr_Print_O_5,Print,7 +Color_block,attr_Print_O_6,Print,7 +Disty print,attr_Print_O_7,Print,7 +Dotted,attr_Print_O_8,Print,7 +Floral,attr_Print_O_9,Print,7 +Graphic print,attr_Print_O_10,Print,7 +Logo and slogan,attr_Print_O_11,Print,7 +Patchwork,attr_Print_O_12,Print,7 +Plain,attr_Print_O_13,Print,7 +Plain_dnim,attr_Print_O_14,Print,7 +Stripe,attr_Print_O_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/dress/7_top_Collar.csv b/app/service/attribute_recognition/discriptor/dress/7_top_Collar.csv new file mode 100644 index 0000000..a30c014 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/7_top_Collar.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +Peterpan,attr_Collar_1,Collar,7 +Shirt,attr_Collar_2,Collar,7 +Rib,attr_Collar_3,Collar,7 +Turtle,attr_Collar_4,Collar,7 +Lapel,attr_Collar_5,Collar,7 +Hoodie,attr_Collar_6,Collar,7 +Mandarin,attr_Collar_7,Collar,7 +Tie,attr_Collar_8,Collar,7 +Ruffle,attr_Collar_9,Collar,7 +Cowl,attr_Collar_10,Collar,7 diff --git a/app/service/attribute_recognition/discriptor/dress/8_outer_Material.csv b/app/service/attribute_recognition/discriptor/dress/8_outer_Material.csv new file mode 100644 index 0000000..2db5c94 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/8_outer_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +Canvas,attr_Material_O_1,Material,8 +Chambray,attr_Material_O_2,Material,8 +Chenille,attr_Material_O_3,Material,8 +Chiffon,attr_Material_O_4,Material,8 +Corduroy,attr_Material_O_5,Material,8 +Crepe,attr_Material_O_6,Material,8 +Denim,attr_Material_O_7,Material,8 +Faux_fur,attr_Material_O_8,Material,8 +Faux_leather,attr_Material_O_9,Material,8 +Flannel,attr_Material_O_10,Material,8 +Fleece,attr_Material_O_11,Material,8 +Gingham,attr_Material_O_12,Material,8 +Jersey,attr_Material_O_13,Material,8 +Knit,attr_Material_O_14,Material,8 +Lace,attr_Material_O_15,Material,8 +Lawn,attr_Material_O_16,Material,8 +Neoprene,attr_Material_O_17,Material,8 +Organza,attr_Material_O_18,Material,8 +Plush,attr_Material_O_19,Material,8 +Satin,attr_Material_O_20,Material,8 +Serge,attr_Material_O_21,Material,8 +Taffeta,attr_Material_O_22,Material,8 +Tulle,attr_Material_O_23,Material,8 +Tweed,attr_Material_O_24,Material,8 +Twill,attr_Material_O_25,Material,8 +Velvet,attr_Material_O_26,Material,8 +Vinyl,attr_Material_O_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/dress/9_dress_Design.csv b/app/service/attribute_recognition/discriptor/dress/9_dress_Design.csv new file mode 100644 index 0000000..03016b0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/9_dress_Design.csv @@ -0,0 +1,19 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_U_1,Design,9 +Tiered,attr_Design_U_2,Design,9 +Tassel,attr_Design_U_3,Design,9 +Ruffle,attr_Design_U_4,Design,9 +Pleated,attr_Design_U_5,Design,9 +Wrap,attr_Design_U_6,Design,9 +Ripped,attr_Design_U_7,Design,9 +Cut out,attr_Design_U_8,Design,9 +Eyelet,attr_Design_U_9,Design,9 +Folded,attr_Design_U_10,Design,9 +Tied,attr_Design_U_11,Design,9 +Drapes,attr_Design_U_12,Design,9 +Ribbon,attr_Design_U_13,Design,9 +Button,attr_Design_U_14,Design,9 +Split,attr_Design_U_15,Design,9 +Fishtail,attr_Design_U_16,Design,9 +Cami dress,attr_Design_U_17,Design,9 +Gathering,attr_Design_U_18,Design,9 diff --git a/app/service/attribute_recognition/discriptor/dress/9_top_Softness.csv b/app/service/attribute_recognition/discriptor/dress/9_top_Softness.csv new file mode 100644 index 0000000..dc8b5f0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/9_top_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_U_1,Softness,9 +Medium,attr_Softness_U_2,Softness,9 +Hard,attr_Softness_U_3,Softness,9 diff --git a/app/service/attribute_recognition/discriptor/dress/ori10_dress_Design.csv b/app/service/attribute_recognition/discriptor/dress/ori10_dress_Design.csv new file mode 100644 index 0000000..db0561e --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori10_dress_Design.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_D_1,Design,10 +Tiered,attr_Design_D_2,Design,10 +Tassel,attr_Design_D_3,Design,10 +Ruffle,attr_Design_D_4,Design,10 +Pleated,attr_Design_D_5,Design,10 +Wrap,attr_Design_D_6,Design,10 +Ripped,attr_Design_D_7,Design,10 +Cut out,attr_Design_D_8,Design,10 +Eyelet,attr_Design_D_9,Design,10 +Folded,attr_Design_D_10,Design,10 +Tied,attr_Design_D_11,Design,10 +Drapes,attr_Design_D_12,Design,10 +Ribbon,attr_Design_D_13,Design,10 +Button,attr_Design_D_14,Design,10 +Gathering,attr_Design_D_15,Design,10 diff --git a/app/service/attribute_recognition/discriptor/dress/ori11_dress_OPType.csv b/app/service/attribute_recognition/discriptor/dress/ori11_dress_OPType.csv new file mode 100644 index 0000000..34be31e --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori11_dress_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_D_1,Opening_Type,11 +Zipper,attr_OPType_D_2,Opening_Type,11 +Thread,attr_OPType_D_3,Opening_Type,11 +Hook,attr_OPType_D_4,Opening_Type,11 diff --git a/app/service/attribute_recognition/discriptor/dress/ori12_dress_Silhouette.csv b/app/service/attribute_recognition/discriptor/dress/ori12_dress_Silhouette.csv new file mode 100644 index 0000000..170bd18 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori12_dress_Silhouette.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_D_1,Silhouette,12 +H Shape,attr_Silhouette_D_2,Silhouette,12 +Slim,attr_Silhouette_D_3,Silhouette,12 +Oversized,attr_Silhouette_D_4,Silhouette,12 +Cacoon,attr_Silhouette_D_5,Silhouette,12 +Empire,attr_Silhouette_D_6,Silhouette,12 +Hourglass,attr_Silhouette_D_7,Silhouette,12 +Mermaid,attr_Silhouette_D_8,Silhouette,12 +Sheath,attr_Silhouette_D_9,Silhouette,12 +Tent,attr_Silhouette_D_10,Silhouette,12 diff --git a/app/service/attribute_recognition/discriptor/dress/ori13_dress_Type.csv b/app/service/attribute_recognition/discriptor/dress/ori13_dress_Type.csv new file mode 100644 index 0000000..84daf45 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori13_dress_Type.csv @@ -0,0 +1,20 @@ +labelName,join_attr,taskName,taskId +Evening gown,attr_Dress_Type_1,Type,13 +Shirt-dress,attr_Dress_Type_2,Type,13 +Coat dress,attr_Dress_Type_3,Type,13 +Handkerchief dress,attr_Dress_Type_4,Type,13 +Jumper dress,attr_Dress_Type_5,Type,13 +Dungaree dress,attr_Dress_Type_6,Type,13 +Skater dress,attr_Dress_Type_7,Type,13 +Tea dress,attr_Dress_Type_8,Type,13 +Mermaid dress,attr_Dress_Type_9,Type,13 +Cocktail dress,attr_Dress_Type_10,Type,13 +A-Line dress,attr_Dress_Type_11,Type,13 +Bodycon dress,attr_Dress_Type_12,Type,13 +Maxi dress,attr_Dress_Type_13,Type,13 +Office dress,attr_Dress_Type_14,Type,13 +Pencil dress,attr_Dress_Type_15,Type,13 +Sheer dress,attr_Dress_Type_16,Type,13 +Shift dress,attr_Dress_Type_17,Type,13 +Slip dress,attr_Dress_Type_18,Type,13 +T-shirt dress,attr_Dress_Type_19,Type,13 diff --git a/app/service/attribute_recognition/discriptor/dress/ori1_dress_length.csv b/app/service/attribute_recognition/discriptor/dress/ori1_dress_length.csv new file mode 100644 index 0000000..9568d0c --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori1_dress_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Maxi,attr_Dress_length_1,Length,1 +Midi,attr_Dress_length_2,Length,1 +Mini,attr_Dress_length_3,Length,1 +Over the knee,attr_Dress_length_4,Length,1 +Floor Length,attr_Dress_length_5,Length,1 diff --git a/app/service/attribute_recognition/discriptor/dress/ori2_dress_Sleeve_length.csv b/app/service/attribute_recognition/discriptor/dress/ori2_dress_Sleeve_length.csv new file mode 100644 index 0000000..14a2dc5 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori2_dress_Sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_Sleeve_length_D_1,Sleeve_Length,2 +Short,attr_Sleeve_length_D_2,Sleeve_Length,2 +Middle,attr_Sleeve_length_D_3,Sleeve_Length,2 +Seven,attr_Sleeve_length_D_4,Sleeve_Length,2 +Long,attr_Sleeve_length_D_5,Sleeve_Length,2 diff --git a/app/service/attribute_recognition/discriptor/dress/ori3_dress_Sleeve_shape.csv b/app/service/attribute_recognition/discriptor/dress/ori3_dress_Sleeve_shape.csv new file mode 100644 index 0000000..7277acf --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori3_dress_Sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shape_D_1,Sleeve_Shape,3 +Slim,attr_Sleeve_shape_D_2,Sleeve_Shape,3 +Puff,attr_Sleeve_shape_D_3,Sleeve_Shape,3 +Bell,attr_Sleeve_shape_D_4,Sleeve_Shape,3 +Batwing,attr_Sleeve_shape_D_5,Sleeve_Shape,3 +Shirt,attr_Sleeve_shape_D_6,Sleeve_Shape,3 +Rib,attr_Sleeve_shape_D_7,Sleeve_Shape,3 +Raglan,attr_Sleeve_shape_D_8,Sleeve_Shape,3 diff --git a/app/service/attribute_recognition/discriptor/dress/ori4_dress_Sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/dress/ori4_dress_Sleeve_shoulder.csv new file mode 100644 index 0000000..36656f8 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori4_dress_Sleeve_shoulder.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shoulder_D_1,Sleeve_Shoulder,4 +Cold,attr_Sleeve_shoulder_D_2,Sleeve_Shoulder,4 +Tucked,attr_Sleeve_shoulder_D_3,Sleeve_Shoulder,4 +Balmain,attr_Sleeve_shoulder_D_4,Sleeve_Shoulder,4 diff --git a/app/service/attribute_recognition/discriptor/dress/ori5_dress_Neckline.csv b/app/service/attribute_recognition/discriptor/dress/ori5_dress_Neckline.csv new file mode 100644 index 0000000..5e76802 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori5_dress_Neckline.csv @@ -0,0 +1,17 @@ +labelName,join_attr,taskName,taskId +Round,attr_Neckline_D_1,Neckline,5 +V,attr_Neckline_D_2,Neckline,5 +Square,attr_Neckline_D_3,Neckline,5 +One-shoulder,attr_Neckline_D_4,Neckline,5 +Off-shoulder,attr_Neckline_D_5,Neckline,5 +Strapless,attr_Neckline_D_6,Neckline,5 +Turtle,attr_Neckline_D_7,Neckline,5 +Boat,attr_Neckline_D_8,Neckline,5 +Halter,attr_Neckline_D_9,Neckline,5 +Spaghetti Strap,attr_Neckline_D_10,Neckline,5 +Sweetheart,attr_Neckline_D_11,Neckline,5 +U,attr_Neckline_D_12,Neckline,5 +choker,attr_Neckline_D_13,Neckline,5 +cowl,attr_Neckline_D_14,Neckline,5 +keyhole,attr_Neckline_D_15,Neckline,5 +split,attr_Neckline_D_16,Neckline,5 diff --git a/app/service/attribute_recognition/discriptor/dress/ori6_dress_Collar.csv b/app/service/attribute_recognition/discriptor/dress/ori6_dress_Collar.csv new file mode 100644 index 0000000..0873572 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori6_dress_Collar.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +Peterpan-Bertha,attr_Collar_D_1,Collar,6 +Shirt,attr_Collar_D_2,Collar,6 +Rib,attr_Collar_D_3,Collar,6 +Turtle,attr_Collar_D_4,Collar,6 +Lapel,attr_Collar_D_5,Collar,6 +Hoodie,attr_Collar_D_6,Collar,6 +Mandarin,attr_Collar_D_7,Collar,6 +Tie,attr_Collar_D_8,Collar,6 +Ruffle,attr_Collar_D_9,Collar,6 +Cowl,attr_Collar_D_10,Collar,6 diff --git a/app/service/attribute_recognition/discriptor/dress/ori7_dress_Print.csv b/app/service/attribute_recognition/discriptor/dress/ori7_dress_Print.csv new file mode 100644 index 0000000..5caa797 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori7_dress_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +abstract,attr_Print_D_1,Print,7 +allover,attr_Print_D_2,Print,7 +animal printed,attr_Print_D_3,Print,7 +Camouflage,attr_Print_D_4,Print,7 +checks,attr_Print_D_5,Print,7 +color_block,attr_Print_D_6,Print,7 +disty print,attr_Print_D_7,Print,7 +dotted,attr_Print_D_8,Print,7 +floral,attr_Print_D_9,Print,7 +graphic print,attr_Print_D_10,Print,7 +logo and slogan print,attr_Print_D_11,Print,7 +patchwork,attr_Print_D_12,Print,7 +plain,attr_Print_D_13,Print,7 +plain_dnim,attr_Print_D_14,Print,7 +stripe,attr_Print_D_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/dress/ori8_dress_Material.csv b/app/service/attribute_recognition/discriptor/dress/ori8_dress_Material.csv new file mode 100644 index 0000000..2a05645 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori8_dress_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +canvas,attr_Material_D_1,Material,8 +chambray,attr_Material_D_2,Material,8 +chenille,attr_Material_D_3,Material,8 +chiffon,attr_Material_D_4,Material,8 +corduroy,attr_Material_D_5,Material,8 +crepe,attr_Material_D_6,Material,8 +denim,attr_Material_D_7,Material,8 +faux_fur,attr_Material_D_8,Material,8 +faux_leather,attr_Material_D_9,Material,8 +flannel,attr_Material_D_10,Material,8 +fleece,attr_Material_D_11,Material,8 +gingham,attr_Material_D_12,Material,8 +jersey,attr_Material_D_13,Material,8 +knit,attr_Material_D_14,Material,8 +lace,attr_Material_D_15,Material,8 +lawn,attr_Material_D_16,Material,8 +neoprene,attr_Material_D_17,Material,8 +organza,attr_Material_D_18,Material,8 +plush,attr_Material_D_19,Material,8 +satin,attr_Material_D_20,Material,8 +serge,attr_Material_D_21,Material,8 +taffeta,attr_Material_D_22,Material,8 +tulle,attr_Material_D_23,Material,8 +tweed,attr_Material_D_24,Material,8 +twill,attr_Material_D_25,Material,8 +velvet,attr_Material_D_26,Material,8 +vinyl,attr_Material_D_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/dress/ori9_dress_Softness.csv b/app/service/attribute_recognition/discriptor/dress/ori9_dress_Softness.csv new file mode 100644 index 0000000..4488232 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/dress/ori9_dress_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_D_1,Softness,9 +Medium,attr_Softness_D_2,Softness,9 +Hard,attr_Softness_D_3,Softness,9 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.12_jumsuit_subtye.csv# b/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.12_jumsuit_subtye.csv# new file mode 100644 index 0000000..c911109 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.12_jumsuit_subtye.csv# @@ -0,0 +1 @@ +,shumin,shumin,20.02.2023 16:48,file:///home/shumin/.config/libreoffice/4; \ No newline at end of file diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.8_jumpsuit_Material.csv# b/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.8_jumpsuit_Material.csv# new file mode 100644 index 0000000..e1b4bc3 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/.~lock.8_jumpsuit_Material.csv# @@ -0,0 +1 @@ +,shumin,shumin,20.02.2023 16:40,file:///home/shumin/.config/libreoffice/4; \ No newline at end of file diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/10_jumsuit_design.csv b/app/service/attribute_recognition/discriptor/jumpsuit/10_jumsuit_design.csv new file mode 100644 index 0000000..47d13cf --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/10_jumsuit_design.csv @@ -0,0 +1,17 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_J_1,Design,9 +Tassel,attr_Design_J_2,Design,9 +Ruffle,attr_Design_J_3,Design,9 +Pleated,attr_Design_J_4,Design,9 +Wrap,attr_Design_J_5,Design,9 +Cut out,attr_Design_J_6,Design,9 +Tied,attr_Design_J_7,Design,9 +Drapes,attr_Design_J_8,Design,9 +Ribbon,attr_Design_J_9,Design,9 +Button,attr_Design_J_10,Design,9 +Cami,attr_Design_J_11,Design,9 +Gathering,attr_Design_J_12,Design,9 +Pocket,attr_Design_J_13,Design,9 +Dungaree,attr_Design_J_14,Design,9 +Layering,attr_Design_J_15,Design,9 +Belted,attr_Design_J_16,Design,9 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/11_jumpsuit_OPType.csv b/app/service/attribute_recognition/discriptor/jumpsuit/11_jumpsuit_OPType.csv new file mode 100644 index 0000000..7e8fa63 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/11_jumpsuit_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_J_1,Opening_Type,11 +Zipper,attr_OPType_J_2,Opening_Type,11 +Thread,attr_OPType_J_3,Opening_Type,11 +Hook,attr_OPType_J_4,Opening_Type,11 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/12_jumpsuit_subtype.csv b/app/service/attribute_recognition/discriptor/jumpsuit/12_jumpsuit_subtype.csv new file mode 100644 index 0000000..ba7256d --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/12_jumpsuit_subtype.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Peg leg,attr_Jumpsuit_subtype_1,Subtype,12 +Straight leg,attr_Jumpsuit_subtype_2,Subtype,12 +Wide leg,attr_Jumpsuit_subtype_3,Subtype,12 +Boot-cut flare,attr_Jumpsuit_subtype_4,Subtype,12 +Slim fit,attr_Jumpsuit_subtype_5,Subtype,12 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/1_jumsuit_length.csv b/app/service/attribute_recognition/discriptor/jumpsuit/1_jumsuit_length.csv new file mode 100644 index 0000000..6a03719 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/1_jumsuit_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Short,attr_Jumpsuit_length_1,Length,1 +Middle,attr_Jumpsuit_length_2,Length,1 +Seven,attr_Jumpsuit_length_3,Length,1 +Nine,attr_Jumpsuit_length_4,Length,1 +Long,attr_Jumpsuit_length_5,Length,1 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/2_jumpsuit_Sleeve_length.csv b/app/service/attribute_recognition/discriptor/jumpsuit/2_jumpsuit_Sleeve_length.csv new file mode 100644 index 0000000..7d77d7a --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/2_jumpsuit_Sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_Sleeve_length_J_1,Sleeve_Length,2 +Short,attr_Sleeve_length_J_2,Sleeve_Length,2 +Middle,attr_Sleeve_length_J_3,Sleeve_Length,2 +Seven,attr_Sleeve_length_J_4,Sleeve_Length,2 +Long,attr_Sleeve_length_J_5,Sleeve_Length,2 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/3_jumpsuit_Sleeve_shape.csv b/app/service/attribute_recognition/discriptor/jumpsuit/3_jumpsuit_Sleeve_shape.csv new file mode 100644 index 0000000..c1a9cce --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/3_jumpsuit_Sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shape_J_1,Sleeve_Shape,3 +Slim,attr_Sleeve_shape_J_2,Sleeve_Shape,3 +Puff,attr_Sleeve_shape_J_3,Sleeve_Shape,3 +Bell,attr_Sleeve_shape_J_4,Sleeve_Shape,3 +Batwing,attr_Sleeve_shape_J_5,Sleeve_Shape,3 +Shirt,attr_Sleeve_shape_J_6,Sleeve_Shape,3 +Rib,attr_Sleeve_shape_J_7,Sleeve_Shape,3 +Raglan,attr_Sleeve_shape_J_8,Sleeve_Shape,3 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/4_jumpsuit_Sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/jumpsuit/4_jumpsuit_Sleeve_shoulder.csv new file mode 100644 index 0000000..47e067a --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/4_jumpsuit_Sleeve_shoulder.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shoulder_J_1,Sleeve_Shoulder,4 +Cold,attr_Sleeve_shoulder_J_2,Sleeve_Shoulder,4 +Tucked,attr_Sleeve_shoulder_J_3,Sleeve_Shoulder,4 +Balmain,attr_Sleeve_shoulder_J_4,Sleeve_Shoulder,4 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/5_jumpsuit_Neckline.csv b/app/service/attribute_recognition/discriptor/jumpsuit/5_jumpsuit_Neckline.csv new file mode 100644 index 0000000..30c1420 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/5_jumpsuit_Neckline.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +Round,attr_Neckline_1,Neckline,6 +V,attr_Neckline_2,Neckline,6 +Square,attr_Neckline_3,Neckline,6 +One-shoulder,attr_Neckline_4,Neckline,6 +Off-shoulder,attr_Neckline_5,Neckline,6 +Strapless,attr_Neckline_6,Neckline,6 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/6_jumpsuit_Collar.csv b/app/service/attribute_recognition/discriptor/jumpsuit/6_jumpsuit_Collar.csv new file mode 100644 index 0000000..a154c21 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/6_jumpsuit_Collar.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +Peterpan,attr_Collar_J_1,Collar,6 +Shirt,attr_Collar_J_2,Collar,6 +Rib,attr_Collar_J_3,Collar,6 +Turtle,attr_Collar_J_4,Collar,6 +Lapel,attr_Collar_J_5,Collar,6 +Hoodie,attr_Collar_J_6,Collar,6 +Mandarin,attr_Collar_J_7,Collar,6 +Tie,attr_Collar_J_8,Collar,6 +Ruffle,attr_Collar_J_9,Collar,6 +Cowl,attr_Collar_J_10,Collar,6 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/7_jumpsuit_Print.csv b/app/service/attribute_recognition/discriptor/jumpsuit/7_jumpsuit_Print.csv new file mode 100644 index 0000000..4e3e285 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/7_jumpsuit_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Abstract,attr_Print_J_1,Print,7 +Allover,attr_Print_J_2,Print,7 +Animal,attr_Print_J_3,Print,7 +Camouflage,attr_Print_J_4,Print,7 +Checks,attr_Print_J_5,Print,7 +Color_block,attr_Print_J_6,Print,7 +Disty Print,attr_Print_J_7,Print,7 +Dotted,attr_Print_J_8,Print,7 +Floral,attr_Print_J_9,Print,7 +Graphic Print,attr_Print_J_10,Print,7 +Logo and slogan,attr_Print_J_11,Print,7 +Patchwork,attr_Print_J_12,Print,7 +Plain,attr_Print_J_13,Print,7 +Plain_dnim,attr_Print_J_14,Print,7 +Stripe,attr_Print_J_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/8_jumpsuit_Material.csv b/app/service/attribute_recognition/discriptor/jumpsuit/8_jumpsuit_Material.csv new file mode 100644 index 0000000..558e700 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/8_jumpsuit_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +Canvas,attr_Material_J_1,Material,8 +Chambray,attr_Material_J_2,Material,8 +Chenille,attr_Material_J_3,Material,8 +Chiffon,attr_Material_J_4,Material,8 +Corduroy,attr_Material_J_5,Material,8 +Crepe,attr_Material_J_6,Material,8 +Denim,attr_Material_J_7,Material,8 +Faux_fur,attr_Material_J_8,Material,8 +Faux_leather,attr_Material_J_9,Material,8 +Flannel,attr_Material_J_10,Material,8 +Fleece,attr_Material_J_11,Material,8 +Gingham,attr_Material_J_12,Material,8 +Jersey,attr_Material_J_13,Material,8 +Knit,attr_Material_J_14,Material,8 +Lace,attr_Material_J_15,Material,8 +Lawn,attr_Material_J_16,Material,8 +Neoprene,attr_Material_J_17,Material,8 +Organza,attr_Material_J_18,Material,8 +Plush,attr_Material_J_19,Material,8 +Satin,attr_Material_J_20,Material,8 +Serge,attr_Material_J_21,Material,8 +Taffeta,attr_Material_J_22,Material,8 +Tulle,attr_Material_J_23,Material,8 +Tweed,attr_Material_J_24,Material,8 +Twill,attr_Material_J_25,Material,8 +Velvet,attr_Material_J_26,Material,8 +Vinyl,attr_Material_J_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/jumpsuit/9_jumpsuit_Softness.csv b/app/service/attribute_recognition/discriptor/jumpsuit/9_jumpsuit_Softness.csv new file mode 100644 index 0000000..c1aa4d3 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/jumpsuit/9_jumpsuit_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_J_1,Softness,9 +Medium,attr_Softness_J_2,Softness,9 +Hard,attr_Softness_J_3,Softness,9 diff --git a/app/service/attribute_recognition/discriptor/outwear/10_outer_Design.csv b/app/service/attribute_recognition/discriptor/outwear/10_outer_Design.csv new file mode 100644 index 0000000..61b4cd1 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/10_outer_Design.csv @@ -0,0 +1,19 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_O_1,Design,10 +Tiered,attr_Design_O_2,Design,10 +Tassel,attr_Design_O_3,Design,10 +Ruffles,attr_Design_O_4,Design,10 +Pleated,attr_Design_O_5,Design,10 +Wrap,attr_Design_O_6,Design,10 +Ripped,attr_Design_O_7,Design,10 +Cut out,attr_Design_O_8,Design,10 +Eyelet,attr_Design_O_9,Design,10 +Folded,attr_Design_O_10,Design,10 +Tied,attr_Design_O_11,Design,10 +Drapes,attr_Design_O_12,Design,10 +Ribbon,attr_Design_O_13,Design,10 +Button,attr_Design_O_14,Design,10 +Crossed-over zipper,attr_Design_O_15,Design,10 +Crossed-over button,attr_Design_O_16,Design,10 +Single breasted,attr_Design_O_17,Design,10 +Double breasted,attr_Design_O_18,Design,10 diff --git a/app/service/attribute_recognition/discriptor/outwear/11_outer_opening.csv b/app/service/attribute_recognition/discriptor/outwear/11_outer_opening.csv new file mode 100644 index 0000000..d8c5372 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/11_outer_opening.csv @@ -0,0 +1,3 @@ +labelName,join_attr,taskName,taskId +Full,attr_Opening_O_1,Opening_Type,11 +Half,attr_Opening_O_2,Opening_Type,11 diff --git a/app/service/attribute_recognition/discriptor/outwear/12_outer_OPType.csv b/app/service/attribute_recognition/discriptor/outwear/12_outer_OPType.csv new file mode 100644 index 0000000..3e4ee2c --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/12_outer_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_O_1,Opening_Type,12 +Zipper,attr_OPType_O_2,Opening_Type,12 +Thread,attr_OPType_O_3,Opening_Type,12 +Hook,attr_OPType_O_4,Opening_Type,12 diff --git a/app/service/attribute_recognition/discriptor/outwear/13_outer_Silhouette.csv b/app/service/attribute_recognition/discriptor/outwear/13_outer_Silhouette.csv new file mode 100644 index 0000000..7d2c201 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/13_outer_Silhouette.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_O_1,Silhouette,13 +H Shape,attr_Silhouette_O_2,Silhouette,13 +Slim,attr_Silhouette_O_3,Silhouette,13 +Flyman,attr_Silhouette_O_4,Silhouette,13 +Peplum,attr_Silhouette_O_5,Silhouette,13 +Oversize,attr_Silhouette_O_6,Silhouette,13 diff --git a/app/service/attribute_recognition/discriptor/outwear/1_outer_length.csv b/app/service/attribute_recognition/discriptor/outwear/1_outer_length.csv new file mode 100644 index 0000000..3784c37 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/1_outer_length.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Short,attr_Outer_length_1,Length,1 +Regular,attr_Outer_length_2,Length,1 +Long,attr_Outer_length_3,Length,1 \ No newline at end of file diff --git a/app/service/attribute_recognition/discriptor/outwear/2_outer_type.csv b/app/service/attribute_recognition/discriptor/outwear/2_outer_type.csv new file mode 100644 index 0000000..60b6ae5 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/2_outer_type.csv @@ -0,0 +1,18 @@ +labelName,join_attr,taskName,taskId +Coat,attr_Outer_type_1,Type,2 +Trench,attr_Outer_type_2,Type,2 +Baseball jacket,attr_Outer_type_3,Type,2 +Hoodie jacket,attr_Outer_type_4,Type,2 +Active jacket,attr_Outer_type_5,Type,2 +Jacket,attr_Outer_type_6,Type,2 +Blazer,attr_Outer_type_7,Type,2 +Cardigan,attr_Outer_type_8,Type,2 +Capes,attr_Outer_type_9,Type,2 +Fleeces Jacket,attr_Outer_type_10,Type,2 +Gilets/Puffer,attr_Outer_type_11,Type,2 +Aviator jacket,attr_Outer_type_12,Type,2 +Biker jacket,attr_Outer_type_13,Type,2 +Pea coat,attr_Outer_type_14,Type,2 +Shacket,attr_Outer_type_15,Type,2 +Denim jacket,attr_Outer_type_16,Type,2 +Raincoat,attr_Outer_type_17,Type,2 diff --git a/app/service/attribute_recognition/discriptor/outwear/3_outer_sleeve_length.csv b/app/service/attribute_recognition/discriptor/outwear/3_outer_sleeve_length.csv new file mode 100644 index 0000000..8e35b85 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/3_outer_sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_sleeve_length_1,Sleeve_Length,3 +Short,attr_sleeve_length_2,Sleeve_Length,3 +Middle,attr_sleeve_length_3,Sleeve_Length,3 +Seven,attr_sleeve_length_4,Sleeve_Length,3 +Long,attr_sleeve_length_5,Sleeve_Length,3 diff --git a/app/service/attribute_recognition/discriptor/outwear/4_outer_sleeve_shape.csv b/app/service/attribute_recognition/discriptor/outwear/4_outer_sleeve_shape.csv new file mode 100644 index 0000000..4e8f770 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/4_outer_sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_sleeve_shape_O_1,Sleeve_Shape,4 +Slim,attr_sleeve_shape_O_2,Sleeve_Shape,4 +Puff,attr_sleeve_shape_O_3,Sleeve_Shape,4 +Bell,attr_sleeve_shape_O_4,Sleeve_Shape,4 +Batwing,attr_sleeve_shape_O_5,Sleeve_Shape,4 +Shirt,attr_sleeve_shape_O_6,Sleeve_Shape,4 +Rib,attr_sleeve_shape_O_7,Sleeve_Shape,4 +Raglan,attr_sleeve_shape_O_8,Sleeve_Shape,4 diff --git a/app/service/attribute_recognition/discriptor/outwear/5_outer_sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/outwear/5_outer_sleeve_shoulder.csv new file mode 100644 index 0000000..3e421d0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/5_outer_sleeve_shoulder.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Regular,attr_sleeve_shoulder_O_1,Sleeve_Shoulder,5 +Cold,attr_sleeve_shoulder_O_2,Sleeve_Shoulder,5 +Tucked,attr_sleeve_shoulder_O_3,Sleeve_Shoulder,5 +Balmain,attr_sleeve_shoulder_O_4,Sleeve_Shoulder,5 +Drop Shoulder,attr_sleeve_shoulder_O_5,Sleeve_Shoulder,5 diff --git a/app/service/attribute_recognition/discriptor/outwear/6_outer_Collar.csv b/app/service/attribute_recognition/discriptor/outwear/6_outer_Collar.csv new file mode 100644 index 0000000..e261e15 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/6_outer_Collar.csv @@ -0,0 +1,10 @@ +labelName,join_attr,taskName,taskId +Peterpan,attr_Callar_O_1,Collar,6 +Shirt,attr_Callar_O_2,Collar,6 +Rib,attr_Callar_O_3,Collar,6 +Turtle,attr_Callar_O_4,Collar,6 +Lapel,attr_Callar_O_5,Collar,6 +Hoodie,attr_Callar_O_6,Collar,6 +Mandarin,attr_Callar_O_7,Collar,6 +Ruffle,attr_Callar_O_8,Collar,6 +Jewel,attr_Callar_O_9,Collar,6 diff --git a/app/service/attribute_recognition/discriptor/outwear/7_outer_Print.csv b/app/service/attribute_recognition/discriptor/outwear/7_outer_Print.csv new file mode 100644 index 0000000..cb5695d --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/7_outer_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Abstract,attr_Print_O_1,Print,7 +Allover,attr_Print_O_2,Print,7 +Animal,attr_Print_O_3,Print,7 +Camouflage,attr_Print_O_4,Print,7 +Checks,attr_Print_O_5,Print,7 +Color_block,attr_Print_O_6,Print,7 +Disty print,attr_Print_O_7,Print,7 +Dotted,attr_Print_O_8,Print,7 +Floral,attr_Print_O_9,Print,7 +Graphic print,attr_Print_O_10,Print,7 +Logo and slogan,attr_Print_O_11,Print,7 +Patchwork,attr_Print_O_12,Print,7 +Plain,attr_Print_O_13,Print,7 +Plain_dnim,attr_Print_O_14,Print,7 +Stripe,attr_Print_O_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/outwear/8_outer_Material.csv b/app/service/attribute_recognition/discriptor/outwear/8_outer_Material.csv new file mode 100644 index 0000000..2db5c94 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/8_outer_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +Canvas,attr_Material_O_1,Material,8 +Chambray,attr_Material_O_2,Material,8 +Chenille,attr_Material_O_3,Material,8 +Chiffon,attr_Material_O_4,Material,8 +Corduroy,attr_Material_O_5,Material,8 +Crepe,attr_Material_O_6,Material,8 +Denim,attr_Material_O_7,Material,8 +Faux_fur,attr_Material_O_8,Material,8 +Faux_leather,attr_Material_O_9,Material,8 +Flannel,attr_Material_O_10,Material,8 +Fleece,attr_Material_O_11,Material,8 +Gingham,attr_Material_O_12,Material,8 +Jersey,attr_Material_O_13,Material,8 +Knit,attr_Material_O_14,Material,8 +Lace,attr_Material_O_15,Material,8 +Lawn,attr_Material_O_16,Material,8 +Neoprene,attr_Material_O_17,Material,8 +Organza,attr_Material_O_18,Material,8 +Plush,attr_Material_O_19,Material,8 +Satin,attr_Material_O_20,Material,8 +Serge,attr_Material_O_21,Material,8 +Taffeta,attr_Material_O_22,Material,8 +Tulle,attr_Material_O_23,Material,8 +Tweed,attr_Material_O_24,Material,8 +Twill,attr_Material_O_25,Material,8 +Velvet,attr_Material_O_26,Material,8 +Vinyl,attr_Material_O_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/outwear/9_outer_Softness.csv b/app/service/attribute_recognition/discriptor/outwear/9_outer_Softness.csv new file mode 100644 index 0000000..785de6c --- /dev/null +++ b/app/service/attribute_recognition/discriptor/outwear/9_outer_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_O_1,Softness,9 +Medium,attr_Softness_O_2,Softness,9 +Hard,attr_Softness_O_3,Softness,9 diff --git a/app/service/attribute_recognition/discriptor/top/10_top_Design.csv b/app/service/attribute_recognition/discriptor/top/10_top_Design.csv new file mode 100644 index 0000000..0ee8255 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/10_top_Design.csv @@ -0,0 +1,15 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_U_1,Design,10 +Tiered,attr_Design_U_2,Design,10 +Tassel,attr_Design_U_3,Design,10 +Ruffle,attr_Design_U_4,Design,10 +Pleated,attr_Design_U_5,Design,10 +Wrap,attr_Design_U_6,Design,10 +Ripped,attr_Design_U_7,Design,10 +Cut out,attr_Design_U_8,Design,10 +Eyelet,attr_Design_U_9,Design,10 +Folded,attr_Design_U_10,Design,10 +Tied,attr_Design_U_11,Design,10 +Drapes,attr_Design_U_12,Design,10 +Ribbon,attr_Design_U_13,Design,10 +Button,attr_Design_U_14,Design,10 diff --git a/app/service/attribute_recognition/discriptor/top/11_top_OPType.csv b/app/service/attribute_recognition/discriptor/top/11_top_OPType.csv new file mode 100644 index 0000000..870631b --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/11_top_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_U_1,Opening_Type,11 +Zipper,attr_OPType_U_2,Opening_Type,11 +Thread,attr_OPType_U_3,Opening_Type,11 +Hook,attr_OPType_U_4,Opening_Type,11 diff --git a/app/service/attribute_recognition/discriptor/top/12_top_Silhouette.csv b/app/service/attribute_recognition/discriptor/top/12_top_Silhouette.csv new file mode 100644 index 0000000..49c7db5 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/12_top_Silhouette.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_U_1,Silhouette,12 +H Shape,attr_Silhouette_U_2,Silhouette,12 +Slim,attr_Silhouette_U_3,Silhouette,12 +Flyman,attr_Silhouette_U_4,Silhouette,12 +Peplum,attr_Silhouette_U_5,Silhouette,12 +Oversize,attr_Silhouette_U_6,Silhouette,12 diff --git a/app/service/attribute_recognition/discriptor/top/1_top_length.csv b/app/service/attribute_recognition/discriptor/top/1_top_length.csv new file mode 100644 index 0000000..49903cc --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/1_top_length.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Short,attr_Top_length_1,Length,1 +Regular,attr_Top_length_2,Length,1 +Long,attr_Top_length_3,Length,1 diff --git a/app/service/attribute_recognition/discriptor/top/2_top_type.csv b/app/service/attribute_recognition/discriptor/top/2_top_type.csv new file mode 100644 index 0000000..01cc5e0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/2_top_type.csv @@ -0,0 +1,15 @@ +labelName,join_attr,taskName,taskId +Bandeau,attr_toptype_1,Type,2 +Blouse,attr_toptype_2,Type,2 +Bodysuit,attr_toptype_3,Type,2 +Bralets,attr_toptype_4,Type,2 +Camisole,attr_toptype_5,Type,2 +Crop Top,attr_toptype_6,Type,2 +Hoodie,attr_toptype_7,Type,2 +Pullover,attr_toptype_8,Type,2 +Polo shirt,attr_toptype_9,Type,2 +Shirt,attr_toptype_10,Type,2 +strapeless,attr_toptype_11,Type,2 +Sweater,attr_toptype_12,Type,2 +Tank Top,attr_toptype_13,Type,2 +T-shirt,attr_toptype_14,Type,2 diff --git a/app/service/attribute_recognition/discriptor/top/3_top_Sleeve_length.csv b/app/service/attribute_recognition/discriptor/top/3_top_Sleeve_length.csv new file mode 100644 index 0000000..1f2a0f3 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/3_top_Sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_Sleeve_length_1,Sleeve_Length,3 +Short,attr_Sleeve_length_2,Sleeve_Length,3 +Middle,attr_Sleeve_length_3,Sleeve_Length,3 +Seven,attr_Sleeve_length_4,Sleeve_Length,3 +Long,attr_Sleeve_length_5,Sleeve_Length,3 diff --git a/app/service/attribute_recognition/discriptor/top/4_top_Sleeve_shape.csv b/app/service/attribute_recognition/discriptor/top/4_top_Sleeve_shape.csv new file mode 100644 index 0000000..d429c11 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/4_top_Sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shape_1,Sleeve_Shape,4 +Slim,attr_Sleeve_shape_2,Sleeve_Shape,4 +Puff,attr_Sleeve_shape_3,Sleeve_Shape,4 +Bell,attr_Sleeve_shape_4,Sleeve_Shape,4 +Batwing,attr_Sleeve_shape_5,Sleeve_Shape,4 +Shirt,attr_Sleeve_shape_6,Sleeve_Shape,4 +Rib,attr_Sleeve_shape_7,Sleeve_Shape,4 +Raglan,attr_Sleeve_shape_8,Sleeve_Shape,4 diff --git a/app/service/attribute_recognition/discriptor/top/5_top_Sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/top/5_top_Sleeve_shoulder.csv new file mode 100644 index 0000000..c31e7ea --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/5_top_Sleeve_shoulder.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shoulder_1,Sleeve_Shoulder,5 +Cold,attr_Sleeve_shoulder_2,Sleeve_Shoulder,5 +Tucked,attr_Sleeve_shoulder_3,Sleeve_Shoulder,5 +Balmain,attr_Sleeve_shoulder_4,Sleeve_Shoulder,5 diff --git a/app/service/attribute_recognition/discriptor/top/6_top_Neckline.csv b/app/service/attribute_recognition/discriptor/top/6_top_Neckline.csv new file mode 100644 index 0000000..30c1420 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/6_top_Neckline.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +Round,attr_Neckline_1,Neckline,6 +V,attr_Neckline_2,Neckline,6 +Square,attr_Neckline_3,Neckline,6 +One-shoulder,attr_Neckline_4,Neckline,6 +Off-shoulder,attr_Neckline_5,Neckline,6 +Strapless,attr_Neckline_6,Neckline,6 diff --git a/app/service/attribute_recognition/discriptor/top/7_outer_Print.csv b/app/service/attribute_recognition/discriptor/top/7_outer_Print.csv new file mode 100644 index 0000000..cb5695d --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/7_outer_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Abstract,attr_Print_O_1,Print,7 +Allover,attr_Print_O_2,Print,7 +Animal,attr_Print_O_3,Print,7 +Camouflage,attr_Print_O_4,Print,7 +Checks,attr_Print_O_5,Print,7 +Color_block,attr_Print_O_6,Print,7 +Disty print,attr_Print_O_7,Print,7 +Dotted,attr_Print_O_8,Print,7 +Floral,attr_Print_O_9,Print,7 +Graphic print,attr_Print_O_10,Print,7 +Logo and slogan,attr_Print_O_11,Print,7 +Patchwork,attr_Print_O_12,Print,7 +Plain,attr_Print_O_13,Print,7 +Plain_dnim,attr_Print_O_14,Print,7 +Stripe,attr_Print_O_15,Print,7 diff --git a/app/service/attribute_recognition/discriptor/top/7_top_Collar.csv b/app/service/attribute_recognition/discriptor/top/7_top_Collar.csv new file mode 100644 index 0000000..a30c014 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/7_top_Collar.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +Peterpan,attr_Collar_1,Collar,7 +Shirt,attr_Collar_2,Collar,7 +Rib,attr_Collar_3,Collar,7 +Turtle,attr_Collar_4,Collar,7 +Lapel,attr_Collar_5,Collar,7 +Hoodie,attr_Collar_6,Collar,7 +Mandarin,attr_Collar_7,Collar,7 +Tie,attr_Collar_8,Collar,7 +Ruffle,attr_Collar_9,Collar,7 +Cowl,attr_Collar_10,Collar,7 diff --git a/app/service/attribute_recognition/discriptor/top/8_outer_Material.csv b/app/service/attribute_recognition/discriptor/top/8_outer_Material.csv new file mode 100644 index 0000000..2db5c94 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/8_outer_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +Canvas,attr_Material_O_1,Material,8 +Chambray,attr_Material_O_2,Material,8 +Chenille,attr_Material_O_3,Material,8 +Chiffon,attr_Material_O_4,Material,8 +Corduroy,attr_Material_O_5,Material,8 +Crepe,attr_Material_O_6,Material,8 +Denim,attr_Material_O_7,Material,8 +Faux_fur,attr_Material_O_8,Material,8 +Faux_leather,attr_Material_O_9,Material,8 +Flannel,attr_Material_O_10,Material,8 +Fleece,attr_Material_O_11,Material,8 +Gingham,attr_Material_O_12,Material,8 +Jersey,attr_Material_O_13,Material,8 +Knit,attr_Material_O_14,Material,8 +Lace,attr_Material_O_15,Material,8 +Lawn,attr_Material_O_16,Material,8 +Neoprene,attr_Material_O_17,Material,8 +Organza,attr_Material_O_18,Material,8 +Plush,attr_Material_O_19,Material,8 +Satin,attr_Material_O_20,Material,8 +Serge,attr_Material_O_21,Material,8 +Taffeta,attr_Material_O_22,Material,8 +Tulle,attr_Material_O_23,Material,8 +Tweed,attr_Material_O_24,Material,8 +Twill,attr_Material_O_25,Material,8 +Velvet,attr_Material_O_26,Material,8 +Vinyl,attr_Material_O_27,Material,8 diff --git a/app/service/attribute_recognition/discriptor/top/9_top_Softness.csv b/app/service/attribute_recognition/discriptor/top/9_top_Softness.csv new file mode 100644 index 0000000..dc8b5f0 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/9_top_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_U_1,Softness,9 +Medium,attr_Softness_U_2,Softness,9 +Hard,attr_Softness_U_3,Softness,9 diff --git a/app/service/attribute_recognition/discriptor/top/ori10_top_Softness.csv b/app/service/attribute_recognition/discriptor/top/ori10_top_Softness.csv new file mode 100644 index 0000000..6f24145 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori10_top_Softness.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Soft,attr_Softness_U_1,Softness,10 +Medium,attr_Softness_U_2,Softness,10 +Hard,attr_Softness_U_3,Softness,10 diff --git a/app/service/attribute_recognition/discriptor/top/ori11_top_Design.csv b/app/service/attribute_recognition/discriptor/top/ori11_top_Design.csv new file mode 100644 index 0000000..deb9395 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori11_top_Design.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Asymmetrical,attr_Design_U_1,Design,11 +Tiered,attr_Design_U_2,Design,11 +Tassel,attr_Design_U_3,Design,11 +Ruffle,attr_Design_U_4,Design,11 +Pleated,attr_Design_U_5,Design,11 +Wrap,attr_Design_U_6,Design,11 +Ripped,attr_Design_U_7,Design,11 +Cut out,attr_Design_U_8,Design,11 +Eyelet,attr_Design_U_9,Design,11 +Folded,attr_Design_U_10,Design,11 +Tied,attr_Design_U_11,Design,11 +Drapes,attr_Design_U_12,Design,11 +Ribbon,attr_Design_U_13,Design,11 +Button,attr_Design_U_14,Design,11 +Gathering,attr_Design_U_15,Design,11 diff --git a/app/service/attribute_recognition/discriptor/top/ori12_top_OPType.csv b/app/service/attribute_recognition/discriptor/top/ori12_top_OPType.csv new file mode 100644 index 0000000..98e65c6 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori12_top_OPType.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Button,attr_OPType_U_1,Opening_Type,12 +Zipper,attr_OPType_U_2,Opening_Type,12 +Thread,attr_OPType_U_3,Opening_Type,12 +Hook,attr_OPType_U_4,Opening_Type,12 diff --git a/app/service/attribute_recognition/discriptor/top/ori13_top_Silhouette.csv b/app/service/attribute_recognition/discriptor/top/ori13_top_Silhouette.csv new file mode 100644 index 0000000..a746198 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori13_top_Silhouette.csv @@ -0,0 +1,7 @@ +labelName,join_attr,taskName,taskId +A Line,attr_Silhouette_U_1,Silhouette,13 +H Shape,attr_Silhouette_U_2,Silhouette,13 +Slim,attr_Silhouette_U_3,Silhouette,13 +Flyman,attr_Silhouette_U_4,Silhouette,13 +Peplum,attr_Silhouette_U_5,Silhouette,13 +Oversize,attr_Silhouette_U_6,Silhouette,13 diff --git a/app/service/attribute_recognition/discriptor/top/ori1_Top_length.csv b/app/service/attribute_recognition/discriptor/top/ori1_Top_length.csv new file mode 100644 index 0000000..49903cc --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori1_Top_length.csv @@ -0,0 +1,4 @@ +labelName,join_attr,taskName,taskId +Short,attr_Top_length_1,Length,1 +Regular,attr_Top_length_2,Length,1 +Long,attr_Top_length_3,Length,1 diff --git a/app/service/attribute_recognition/discriptor/top/ori2_Top_type.csv b/app/service/attribute_recognition/discriptor/top/ori2_Top_type.csv new file mode 100644 index 0000000..cf60dbb --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori2_Top_type.csv @@ -0,0 +1,15 @@ +labelName,join_attr,taskName,taskId +Blouse,attr_Top_type_1,Type,2 +Camisole,attr_Top_type_2,Type,2 +Shirt,attr_Top_type_3,Type,2 +T-shirt,attr_Top_type_4,Type,2 +Jumper-Pullover,attr_Top_type_5,Type,2 +Hoodie,attr_Top_type_6,Type,2 +Tank Top,attr_Top_type_7,Type,2 +Polo shirt,attr_Top_type_8,Type,2 +Crop Top,attr_Top_type_9,Type,2 +Bralets,attr_Top_type_10,Type,2 +Bodysuit,attr_Top_type_11,Type,2 +Bandeau,attr_Top_type_12,Type,2 +Sweater,attr_Top_type_13,Type,2 +Strapless,attr_Top_type_14,Type,2 diff --git a/app/service/attribute_recognition/discriptor/top/ori3_top_Sleeve_length.csv b/app/service/attribute_recognition/discriptor/top/ori3_top_Sleeve_length.csv new file mode 100644 index 0000000..3549164 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori3_top_Sleeve_length.csv @@ -0,0 +1,6 @@ +labelName,join_attr,taskName,taskId +Sleeveless,attr_Sleeve_length_U_1,Sleeve_Length,3 +Short,attr_Sleeve_length_U_2,Sleeve_Length,3 +Middle,attr_Sleeve_length_U_3,Sleeve_Length,3 +Seven,attr_Sleeve_length_U_4,Sleeve_Length,3 +Long,attr_Sleeve_length_U_5,Sleeve_Length,3 diff --git a/app/service/attribute_recognition/discriptor/top/ori4_top_Sleeve_shape.csv b/app/service/attribute_recognition/discriptor/top/ori4_top_Sleeve_shape.csv new file mode 100644 index 0000000..15517c5 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori4_top_Sleeve_shape.csv @@ -0,0 +1,9 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shape_U_1,Sleeve_Shape,4 +Slim,attr_Sleeve_shape_U_2,Sleeve_Shape,4 +Puff,attr_Sleeve_shape_U_3,Sleeve_Shape,4 +Bell,attr_Sleeve_shape_U_4,Sleeve_Shape,4 +Batwing,attr_Sleeve_shape_U_5,Sleeve_Shape,4 +Shirt,attr_Sleeve_shape_U_6,Sleeve_Shape,4 +Rib,attr_Sleeve_shape_U_7,Sleeve_Shape,4 +Raglan,attr_Sleeve_shape_U_8,Sleeve_Shape,4 diff --git a/app/service/attribute_recognition/discriptor/top/ori5_top_Sleeve_shoulder.csv b/app/service/attribute_recognition/discriptor/top/ori5_top_Sleeve_shoulder.csv new file mode 100644 index 0000000..9a051a1 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori5_top_Sleeve_shoulder.csv @@ -0,0 +1,5 @@ +labelName,join_attr,taskName,taskId +Regular,attr_Sleeve_shoulder_U_1,Sleeve_Shoulder,5 +Cold,attr_Sleeve_shoulder_U_2,Sleeve_Shoulder,5 +Tucked,attr_Sleeve_shoulder_U_3,Sleeve_Shoulder,5 +Balmain,attr_Sleeve_shoulder_U_4,Sleeve_Shoulder,5 diff --git a/app/service/attribute_recognition/discriptor/top/ori6_top_Neckline.csv b/app/service/attribute_recognition/discriptor/top/ori6_top_Neckline.csv new file mode 100644 index 0000000..bb6dc62 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori6_top_Neckline.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +Round,attr_Neckline_U_1,Neckline,6 +V,attr_Neckline_U_2,Neckline,6 +Square,attr_Neckline_U_3,Neckline,6 +One-shoulder,attr_Neckline_U_4,Neckline,6 +Off-shoulder,attr_Neckline_U_5,Neckline,6 +Strapless,attr_Neckline_U_6,Neckline,6 +boat,attr_Neckline_U_7,Neckline,6 +choker,attr_Neckline_U_8,Neckline,6 +cowl,attr_Neckline_U_9,Neckline,6 +halter,attr_Neckline_U_10,Neckline,6 +keyhole,attr_Neckline_U_11,Neckline,6 +spaghetti,attr_Neckline_U_12,Neckline,6 +split,attr_Neckline_U_13,Neckline,6 +sweetheart,attr_Neckline_U_14,Neckline,6 +U,attr_Neckline_U_15,Neckline,6 diff --git a/app/service/attribute_recognition/discriptor/top/ori7_top_Collar.csv b/app/service/attribute_recognition/discriptor/top/ori7_top_Collar.csv new file mode 100644 index 0000000..1c9f028 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori7_top_Collar.csv @@ -0,0 +1,11 @@ +labelName,join_attr,taskName,taskId +Peterpan-Bertha,attr_Collar_U_1,Collar,7 +Shirt,attr_Collar_U_2,Collar,7 +Rib,attr_Collar_U_3,Collar,7 +Turtle,attr_Collar_U_4,Collar,7 +Lapel,attr_Collar_U_5,Collar,7 +Hoodie,attr_Collar_U_6,Collar,7 +Mandarin,attr_Collar_U_7,Collar,7 +Tie,attr_Collar_U_8,Collar,7 +Ruffle,attr_Collar_U_9,Collar,7 +Cowl,attr_Collar_U_10,Collar,7 diff --git a/app/service/attribute_recognition/discriptor/top/ori8_top_Print.csv b/app/service/attribute_recognition/discriptor/top/ori8_top_Print.csv new file mode 100644 index 0000000..9eeeb2c --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori8_top_Print.csv @@ -0,0 +1,16 @@ +labelName,join_attr,taskName,taskId +abstract,attr_Print_U_1,Print,8 +allover,attr_Print_U_2,Print,8 +animal printed,attr_Print_U_3,Print,8 +Camouflage,attr_Print_U_4,Print,8 +checks,attr_Print_U_5,Print,8 +color_block,attr_Print_U_6,Print,8 +disty print,attr_Print_U_7,Print,8 +dotted,attr_Print_U_8,Print,8 +floral,attr_Print_U_9,Print,8 +graphic print,attr_Print_U_10,Print,8 +logo and slogan print,attr_Print_U_11,Print,8 +patchwork,attr_Print_U_12,Print,8 +plain,attr_Print_U_13,Print,8 +plain_dnim,attr_Print_U_14,Print,8 +stripe,attr_Print_U_15,Print,8 diff --git a/app/service/attribute_recognition/discriptor/top/ori9_top_Material.csv b/app/service/attribute_recognition/discriptor/top/ori9_top_Material.csv new file mode 100644 index 0000000..795c3c9 --- /dev/null +++ b/app/service/attribute_recognition/discriptor/top/ori9_top_Material.csv @@ -0,0 +1,28 @@ +labelName,join_attr,taskName,taskId +canvas,attr_Material_U_1,Material,9 +chambray,attr_Material_U_2,Material,9 +chenille,attr_Material_U_3,Material,9 +chiffon,attr_Material_U_4,Material,9 +corduroy,attr_Material_U_5,Material,9 +crepe,attr_Material_U_6,Material,9 +denim,attr_Material_U_7,Material,9 +faux_fur,attr_Material_U_8,Material,9 +faux_leather,attr_Material_U_9,Material,9 +flannel,attr_Material_U_10,Material,9 +fleece,attr_Material_U_11,Material,9 +gingham,attr_Material_U_12,Material,9 +jersey,attr_Material_U_13,Material,9 +knit,attr_Material_U_14,Material,9 +lace,attr_Material_U_15,Material,9 +lawn,attr_Material_U_16,Material,9 +neoprene,attr_Material_U_17,Material,9 +organza,attr_Material_U_18,Material,9 +plush,attr_Material_U_19,Material,9 +satin,attr_Material_U_20,Material,9 +serge,attr_Material_U_21,Material,9 +taffeta,attr_Material_U_22,Material,9 +tulle,attr_Material_U_23,Material,9 +tweed,attr_Material_U_24,Material,9 +twill,attr_Material_U_25,Material,9 +velvet,attr_Material_U_26,Material,9 +vinyl,attr_Material_U_27,Material,9 diff --git a/app/service/attribute_recognition/service.py b/app/service/attribute_recognition/service.py new file mode 100644 index 0000000..5ca5927 --- /dev/null +++ b/app/service/attribute_recognition/service.py @@ -0,0 +1,215 @@ +import datetime +from pprint import pprint + +import mmcv +import cv2 +import numpy as np +import requests +import torch +import tritonclient.http as httpclient +from PIL import Image +from skimage import transform +from torchvision import transforms +import pandas as pd +from minio import Minio + +from app.core.config import MINIO_IP, MINIO_PORT, MINIO_SECURE, MINIO_ACCESS, MINIO_SECRET, ATT_TRITON_IP, ATT_TRITON_PORT + + +def Merge(dict1, dict2): + res = {**dict1, **dict2} + return res + + +class Rescale(object): + """Rescale the image in a sample to a given size. + + Args: + output_size (tuple or int): Desired output size. If tuple, output is + matched to output_size. If int, smaller of image edges is matched + to output_size keeping aspect ratio the same. + """ + + def __init__(self, output_size): + assert isinstance(output_size, (int, tuple)) + self.output_size = output_size + + def __call__(self, image, landmarks): + h, w = image.shape[:2] + if isinstance(self.output_size, int): + if h > w: + new_h, new_w = self.output_size * h / w, self.output_size + else: + new_h, new_w = self.output_size, self.output_size * w / h + else: + new_h, new_w = self.output_size + + new_h, new_w = int(new_h), int(new_w) + img = transform.resize(image, (new_h, new_w), mode='constant') + # h and w are swapped for landmarks because for images, + # x and y axes are axis 1 and 0 respectively + landmarks = landmarks * [new_w / w, new_h / h] + return img, landmarks + + +class AttributeRecognition: + def __init__(self): + self.httpclient = httpclient.InferenceServerClient(url=f"{ATT_TRITON_IP}:{ATT_TRITON_PORT}") + self.minio_client = Minio( + f"{MINIO_IP}:{MINIO_PORT}", + access_key=MINIO_ACCESS, + secret_key=MINIO_SECRET, + secure=MINIO_SECURE) + + def get_image(self, url): + # Get data of an object. + # Read data from response. + response = self.minio_client.get_object(url.split("/", 1)[0], url.split("/", 1)[1]) + img = np.frombuffer(response.data, np.uint8) # 转成8位无符号整型 + img = cv2.imdecode(img, cv2.IMREAD_COLOR) # 解码 + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + return img + + def preprocess(self, img_url): + img = self.get_image(img_url) + img = mmcv.imread(img) + ori_shape = img.shape[:2] + img_scale = (224, 224) + scale_factor = [] + img, x, y = mmcv.imresize(img, img_scale, return_scale=True) + scale_factor.append(x) + scale_factor.append(y) + img = mmcv.imnormalize(img, mean=np.array([123.675, 116.28, 103.53]), std=np.array([58.395, 57.12, 57.375]), to_rgb=True) + preprocessed_img = np.expand_dims(img.transpose(2, 0, 1), axis=0) + return preprocessed_img + + def attribute(self, args, request_data): + + final_dict = {} + + for l in range(len(request_data.upload_img_path)): + img_path = request_data.upload_img_path[l] + sample = self.preprocess(img_path) + category_model_path = args.category_model + category_description = args.category_discription + category_list = self.get_attribute(category_model_path, category_description, sample)['category'] + + if len(category_list) >= 1: + category = category_list[0] + print(category) + + if category == 'top': + attr_dict = {'Item': category} + for i in range(len(args.top_discription_list)): + # print('top: ', i) + attr_description = args.top_discription_list[i] + attr_model_path = args.top_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + + elif category == 'pants': + attr_dict = {} + category = 'bottom' + attr_dict['Item'] = category + attr_dict['BTM_Type'] = ['Pants'] + for i in range(len(args.bottom_discription_list)): + attr_description = args.bottom_discription_list[i] + attr_model_path = args.bottom_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + + elif category == 'skirt': + attr_dict = {'BTM_Type': ['Skirt']} + category = 'bottom' + attr_dict['Item'] = category + for i in range(len(args.bottom_discription_list)): + attr_description = args.bottom_discription_list[i] + attr_model_path = args.bottom_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + + elif category == 'dress': + attr_dict = {'Item': category} + for i in range(len(args.dress_discription_list)): + attr_description = args.dress_discription_list[i] + attr_model_path = args.dress_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + + elif category == 'outwear': + attr_dict = {'Item': 'outer'} + + for i in range(len(args.outwear_discription_list)): + attr_description = args.outwear_discription_list[i] + attr_model_path = args.outwear_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + + elif category == 'jumpsuit': + attr_dict = {'Item': 'jumpsuit'} + for i in range(len(args.jumpsuit_discription_list)): + attr_description = args.jumpsuit_discription_list[i] + attr_model_path = args.jumpsuit_model_list[i] + present_dict = self.get_attribute(attr_model_path, attr_description, sample) + attr_dict = Merge(attr_dict, present_dict) + else: + attr_dict = {} + + print('attr_dict: ', attr_dict) + final_dict[request_data.upload_img_id[l]] = attr_dict + return final_dict + + def get_attribute(self, model_name, description, image): + attr_type = pd.read_csv(description) + inputs = [ + httpclient.InferInput("input__0", image.shape, datatype="FP32") + ] + inputs[0].set_data_from_numpy(image, binary_data=True) + results = self.httpclient.infer(model_name=model_name, inputs=inputs) + inference_output = torch.from_numpy(results.as_numpy(f"output__0")) + scores = inference_output.detach().numpy() + colattr = list(attr_type['labelName']) + task = attr_type['taskName'][0] + if task == 'category': + print(scores, type(scores)) + maxsc = np.max(scores) + if maxsc > 0: + indexs = np.argwhere(scores == maxsc)[:, 1] + else: + attr = {'category': []} + return attr + elif task[:-2] == 'Print' or task[:-2] == 'Material': + # maxsc = np.max(scores) + scores[scores > 0] = 1 + scores[scores <= 0] = 0 + indexs = np.argwhere(scores == 1)[:, 1] + # if maxsc> 0: + # indexs = np.argwhere(scores == maxsc)[:,1] + + else: + maxsc = np.max(scores) + print(maxsc) + if maxsc > 0: + indexs = np.argwhere(scores == maxsc)[:, 1] + else: + indexs = [] + # scores[scores > 0] = 1 + # scores[scores <= 0] = 0 + # indexs = np.argwhere(scores == 1)[:,1] + + attr = {} + attr[task] = [] + for i in range(len(indexs)): + # print('i and indexs: ', i, indexs, indexs[i], type(indexs[i]), colattr[indexs[i]]) + atr = colattr[indexs[i]] + # print('corresponeding atr: ', atr) + attr[task].append(atr) + return attr + + +if __name__ == '__main__': + from app.service.attribute_recognition import const_debug + + request_data = {'upload_img_path': ['./test_top1.jpg'], 'upload_img_id': ["2"]} + service = AttributeRecognition() + pprint(service.attribute(const_debug, request_data)) diff --git a/app/service/outfit_matcher/__init__.py b/app/service/outfit_matcher/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/service/outfit_matcher/color/MKTS27000.npy b/app/service/outfit_matcher/color/MKTS27000.npy new file mode 100644 index 0000000000000000000000000000000000000000..61b0cbc9c4e8b110a2754799fa22f8e12b316d95 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=pB!gi|==QB~7|2LK0wG$sH5 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27002.npy b/app/service/outfit_matcher/color/MKTS27002.npy new file mode 100644 index 0000000000000000000000000000000000000000..72de4686790d239b6f5bc0836ebaa82da1d46b06 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N==To_8m?r-g cD*gd34^s!BKiK!*FDpF9vK@y!s%l#B0P)f?nE(I) literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27003.npy b/app/service/outfit_matcher/color/MKTS27003.npy new file mode 100644 index 0000000000000000000000000000000000000000..eafde8eb34574ac5c79056ca2b65dfff204e0d85 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTb{DJ{eR literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27004.npy b/app/service/outfit_matcher/color/MKTS27004.npy new file mode 100644 index 0000000000000000000000000000000000000000..eafde8eb34574ac5c79056ca2b65dfff204e0d85 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTb{DJ{eR literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27008.npy b/app/service/outfit_matcher/color/MKTS27008.npy new file mode 100644 index 0000000000000000000000000000000000000000..7d5d352da3c2396fde732cef02e73d56466c20c3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~g_5ar$wtj1WL5fZBC;P4a3}EoV-WUuX+r#(}dhn6} DX*Vdn literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27009.npy b/app/service/outfit_matcher/color/MKTS27009.npy new file mode 100644 index 0000000000000000000000000000000000000000..0ed3004a77ed8fa6571ad40023db3821c151c9a0 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~g_5ar$wtj1WL5fZBC;P4a3}EoVe%4G7cxeygL+HUv F0ssuhD<}W} literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27010.npy b/app/service/outfit_matcher/color/MKTS27010.npy new file mode 100644 index 0000000000000000000000000000000000000000..1c4bdd9dd4b482368bb27993405d29653fccf684 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cV50Sac#1c8_KoEyy!8J~xV be}K!w)IsPE_66^!+&Rp%7>7KnYFh9B)DJSP literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27011.npy b/app/service/outfit_matcher/color/MKTS27011.npy new file mode 100644 index 0000000000000000000000000000000000000000..d42b87f9fc4f544c5b88e12d1100c8e6ae14a5d8 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`Jp&kg KfYK1&U?c$uvn}iZ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27012.npy b/app/service/outfit_matcher/color/MKTS27012.npy new file mode 100644 index 0000000000000000000000000000000000000000..61ee0a0531e8acc08966f056a2dc2abad9cc85ce GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`{o;ed i(@JgL*rThvy)74n?2WfTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`eS32K iiQ_xo+M}zxy)74n?2WAOHX}okryV literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27014.npy b/app/service/outfit_matcher/color/MKTS27014.npy new file mode 100644 index 0000000000000000000000000000000000000000..574cb5f13f40ffe28312b088616d95bf59941718 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xdlT<2 u%hRmi*ay7SH-CTZvi<)M7h%5qcTjbg?2WX)T#g?GNrVUUB{SbEvvQ_6%U~!G2lT;@$6==0o`qQF@X9c~U^n literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27016.npy b/app/service/outfit_matcher/color/MKTS27016.npy new file mode 100644 index 0000000000000000000000000000000000000000..e8bec1b8b367e9ec1bb3da3dd432f35863eab354 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~U9z7w69it`AO99u vqki_C{SEF%(^@j0+8^9!yyE)t=TLQr>>0q|gMI(x2UZ=ri=ljoC_PC4$f`jz literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27017.npy b/app/service/outfit_matcher/color/MKTS27017.npy new file mode 100644 index 0000000000000000000000000000000000000000..3dc689b5559518eff7f41743910a592b0d4d736b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0{U#8D4fBbTPd{ilm^7%*hx3}ejko~NgAn?+j0SrDs JX$WsHk^nUYFO2{I literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27018.npy b/app/service/outfit_matcher/color/MKTS27018.npy new file mode 100644 index 0000000000000000000000000000000000000000..5357929280116c72fc3a6935b32d2ec01c123bf9 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=zo(hGUf=CC cRQv;69;OaLf3RTE{*^I literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27027.npy b/app/service/outfit_matcher/color/MKTS27027.npy new file mode 100644 index 0000000000000000000000000000000000000000..94cd08f2c8186076a0935301e6aadf8cef99c6c2 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0L_5ar$wtj1WL5fZBC;Kh?+uL$M$bQyL5O`_N00tkR JG=w)8NdR>TE{*^I literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27028.npy b/app/service/outfit_matcher/color/MKTS27028.npy new file mode 100644 index 0000000000000000000000000000000000000000..94cd08f2c8186076a0935301e6aadf8cef99c6c2 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0L_5ar$wtj1WL5fZBC;Kh?+uL$M$bQyL5O`_N00tkR JG=w)8NdR>TE{*^I literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27029.npy b/app/service/outfit_matcher/color/MKTS27029.npy new file mode 100644 index 0000000000000000000000000000000000000000..cfb2a7c54859693bd133794b5692201df8129539 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~9kQP_69it`vmCGb zfAIDT`=oH2*$Ibs?LVIWV~YIc_x889LW;%G-bL L)PfTUWInY&xX*aS_2bX&Z*R*5A^TY~LExpmj>lA^ zNxaYOv8#IxRd>_=+;q!M-Io3KQ|te)J8b>d{(=;n;!pNlQ1f8wUfTcPyTw&-&R+ZF jU#8D4fBbTPd{ilm^7%(-_MWuAkdZz|zj%{91Cam#wR?5< literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27031.npy b/app/service/outfit_matcher/color/MKTS27031.npy new file mode 100644 index 0000000000000000000000000000000000000000..9601ced60324cf499d8526f08af9ffe0a859916b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&Z*R*5A^TY~LExqRUX4WM zXa64APp$vI?y&V+`wLQRia*(JLDjv6t9v=O?8B3{r|q$u2UB;`eqQ_$sW#8O_RGIa hpI!d=<^K4nQWoX&kI?KrX}?0w^<~}TP4)~#0st=%c^3cx literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27034.npy b/app/service/outfit_matcher/color/MKTS27034.npy new file mode 100644 index 0000000000000000000000000000000000000000..0a055e3899a6268adf51cd3b6197a8a396ff3f27 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~0|3TpX{?$GaFRHe^wx6Wp2}FnNXUznGm-f!JTN>X> fKD0+ycY9kd2-zEh!DIU>*6Du~&fK+U7$5)uIYmn# literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27035.npy b/app/service/outfit_matcher/color/MKTS27035.npy new file mode 100644 index 0000000000000000000000000000000000000000..6e2466a5aae19d7e85645b4198683bf1554623d3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~0|3TpX{?$GaFRHe^wx6Wp2}FfTUWInY&xX*aS_2bX&Z*R*5A^TY~LExo*WOe(` z{+cKD*wwv;s=I0LS~Wj;y7*!HsrCQY9kzaJe?f{(@hAH&sCh7TFYR-gyaM%=585yP jGJSUW{{One)^F`ENU(XaZh>go+R K%t1Ak6dnN7F-i9T literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27058.npy b/app/service/outfit_matcher/color/MKTS27058.npy new file mode 100644 index 0000000000000000000000000000000000000000..6409c1e1fa1fe0e829a880b118fba3cf900cae76 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cV50Sac#1c8@O{s*`?On$J@ E0F?SE9RL6T literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27059.npy b/app/service/outfit_matcher/color/MKTS27059.npy new file mode 100644 index 0000000000000000000000000000000000000000..1c13ed10d3cd09543c3f684be89500e68e591fee GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_7+_7F2+Ic>;qovo4-GH+5Ufsi!fjQ bJGlB;GeO{`eM1cYzSDPB!Nt){qBS1?90oAl literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27061.npy b/app/service/outfit_matcher/color/MKTS27061.npy new file mode 100644 index 0000000000000000000000000000000000000000..c1d6ce6f1fae7a0768396357af0e0e8bd003d6e0 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=PhaVJyQ=$< zeFH<4(I21p`@cpwt+_epl>HSppEgX;ePHwR`Og#KV}JGV#G lLE;G9yf+Z@_TS!?3qtk~dr#W)u<|!t3)zmt98^<5JODoMS;GJT literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27062.npy b/app/service/outfit_matcher/color/MKTS27062.npy new file mode 100644 index 0000000000000000000000000000000000000000..f87acea39a75f462f0c4fe5d91f24e4387c4ea7d GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~0|3TpX{?$GaFRHe^wx6Wp2}FfTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`{l71( iK2C9eVUMov_O@IQvNr~U$M)L~A|(F-bC? literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27068.npy b/app/service/outfit_matcher/color/MKTS27068.npy new file mode 100644 index 0000000000000000000000000000000000000000..24eb5688eb07aa45f85711f183d2fdcf866b99ee GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&Z*R*5A^TY~LExpmi9yPb s9mihV2fWlbe}C+<{r?abVZQu#_LEdRf#?uioxXj(oXpb$_6!3A0Kr5>uK)l5 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MKTS27073.npy b/app/service/outfit_matcher/color/MKTS27073.npy new file mode 100644 index 0000000000000000000000000000000000000000..2400d76a1a6463158cac349fc181293775608f55 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)tv;wUs%p7oONRFjN`+@p-@hYlPF9n{!Ut ePg3y&qDS_|VDQ*JoP}4tH2xY+b1+S&t_T3>I5F7( literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27101.npy b/app/service/outfit_matcher/color/MLSS27101.npy new file mode 100644 index 0000000000000000000000000000000000000000..24a3d23d0f286b5cf7665128eb64aea19f9c1b5f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&Z*R*5A$wymcx=xA1|Og_ Igf|#T0N`^im;e9( literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27102.npy b/app/service/outfit_matcher/color/MLSS27102.npy new file mode 100644 index 0000000000000000000000000000000000000000..fc9240aaa00489a2f10ee5f07e4772a8e78cc592 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}hU#8D4fBbTPY*Z-*2Ha< i%U;@}tDB_a2}FnNXUznGm-hFk>`;|VJ891_KmY(ZZ$`=h literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27103.npy b/app/service/outfit_matcher/color/MLSS27103.npy new file mode 100644 index 0000000000000000000000000000000000000000..d41f6dfd2fdc1e6214cf00b0b636af5c40b99417 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~9kQP_69it`A9?k} t<8ROl`v!(8qdz|H_rHm7T61&Gsr?XjkD%&K+J6Yixx=;PoIS$;0RSAJMWg@# literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27104.npy b/app/service/outfit_matcher/color/MLSS27104.npy new file mode 100644 index 0000000000000000000000000000000000000000..0b28d7adce8ea3d228dd6289be265d7b00241872 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~9kQP_69it``>glq zkiY%PzJa02=#S6){cj?i*4&(PYClBXBdEHQ_LDb$deok>!=3>QK0s**4?%vg=elzI PR`sC`IOGv3No4^50Yppg literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27107.npy b/app/service/outfit_matcher/color/MLSS27107.npy new file mode 100644 index 0000000000000000000000000000000000000000..32007261ee6d417eba30707712433154a89496c4 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAaK*30SrDs JX$WsHk^o3ZFS`H$ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27109.npy b/app/service/outfit_matcher/color/MLSS27109.npy new file mode 100644 index 0000000000000000000000000000000000000000..9a57b95cb7335cb9d58f08b3bd5d89d35fcf6cd6 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lT}008??NW}mE literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27110.npy b/app/service/outfit_matcher/color/MLSS27110.npy new file mode 100644 index 0000000000000000000000000000000000000000..32007261ee6d417eba30707712433154a89496c4 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAaK*30SrDs JX$WsHk^o3ZFS`H$ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27111.npy b/app/service/outfit_matcher/color/MLSS27111.npy new file mode 100644 index 0000000000000000000000000000000000000000..eafde8eb34574ac5c79056ca2b65dfff204e0d85 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTb{DJ{eR literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27112.npy b/app/service/outfit_matcher/color/MLSS27112.npy new file mode 100644 index 0000000000000000000000000000000000000000..73d04929610c571b45251d389d8680e362729d65 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTX&Fq9jyY?SX|1m}W@_T!9^Ag*%j$Llv2^WXS HQ%VB>G^12n literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27119.npy b/app/service/outfit_matcher/color/MLSS27119.npy new file mode 100644 index 0000000000000000000000000000000000000000..89dd4a7415d0be5c220b7b4bf148c989b3970fa3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#+jDPk%f0=~e%4G7xM|M- M1|Og_gf|#T08fA~#{d8T literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27122.npy b/app/service/outfit_matcher/color/MLSS27122.npy new file mode 100644 index 0000000000000000000000000000000000000000..93e5010e921f18cc1cf0e26c115ba96392c5eefd GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= mXCxM+0{I%IItr$mItsN4WCJb+F!*2(p>dIffTUWInY&xX*aS_2bX&C#iS>(Ixv?GeO{`eX(gc z5IweUV5lfTUWInY&xX*aS_2bX&C#iS>(Ixv?GeO{`eVxGk zYu8u5uy0_fGWz55e*c>Yr!_a{oZ1gj_Xw))r2WqPoM{@_2kjZa-~*I~@IWNYyeTf_ s8lCSp*iWnfzwWU0Tl))AY>GeGZ|#SvgsC%4xO;7O;cN_ZVCv9m0C6&5lmGw# literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27132.npy b/app/service/outfit_matcher/color/MLSS27132.npy new file mode 100644 index 0000000000000000000000000000000000000000..4eb2820f98247aff4142e77c9b62a48f92c0ab08 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`y-Dbc z==nSk?5EcMUw7F0t^EZlHpQRpx9o3k%LO5OV=#DZuX2Go(sAw``=oH2*$Ibs?LVIW XV~YIc_ZaGyYsXan_g-bsKxF^`6!ceQ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27133.npy b/app/service/outfit_matcher/color/MLSS27133.npy new file mode 100644 index 0000000000000000000000000000000000000000..be07818e03b70d0dbbcdc8ce028de0e4b4bcd9a7 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`{rjn% z3t6t;vY%T2f8Am0xAqsL*c5-V-?G2GEf<9Bjltltea=S4XNg@G?UTZ7W+xolwf}hf lk16t(-(#p#YZHpeb~$B_-QGuVdtI-s)$ISc)1HAy008i6ZSMd8 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27136.npy b/app/service/outfit_matcher/color/MLSS27136.npy new file mode 100644 index 0000000000000000000000000000000000000000..00e5113d9bdd8d575c6d69a86395b46aad1372ac GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)tv|_xbmyxjeOB@n!n#^2aat$3~U1D4&0{ e|Ms?A5VAK0gU9yE93C_pm0!ha4yMV}6#)PZa5c>U literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27137.npy b/app/service/outfit_matcher/color/MLSS27137.npy new file mode 100644 index 0000000000000000000000000000000000000000..d58c122e35618e0e7e22b4d44da16b61c745acd9 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJc11`v3#f2B{vi>hs}_k+1WV%AI$cxlghVnI&ZtEcwp z>L#gp0?{FRh`O8hPh%KX&E-6457GYtO2bTpnRnCP+w@?abnIrF>R|ev7UoZQUA7Fv J9E6FeEC3n8Ox*wg literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27140.npy b/app/service/outfit_matcher/color/MLSS27140.npy new file mode 100644 index 0000000000000000000000000000000000000000..4b4e22f65c15634f44d609de7f82ae1a04ef9f4b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~U9z7w69it`m&IN$ tjSYWqe}ntcw3f`L_6PSFueg5vIaJ*tdj>H0VDB0z0z^}xe26GLNdSlgKHdNT literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27141.npy b/app/service/outfit_matcher/color/MLSS27141.npy new file mode 100644 index 0000000000000000000000000000000000000000..8825b342b823348799e6a1ea52f5450828d58b1c GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=S5XNz5o~=1 d75@O2hpB_mAMCepkDPw@>m?lWsH$nf0{}w#GhzS$ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27142.npy b/app/service/outfit_matcher/color/MLSS27142.npy new file mode 100644 index 0000000000000000000000000000000000000000..569bacd0804ebe76a8faa9ead687ee9c6e039820 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cV50Sac#1c8_KpZ0lpF|K-K z-@s61^vCD@{;v^EYi`atg`v(9sLJT*F{trp{v4%r=(#zfUH@F{7Ysq|S qe{i4iitERp+uz=n3qtlVdy~JgS_lU3B48c^!*iY`zcw$PZ4Urv`CiKa literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27145.npy b/app/service/outfit_matcher/color/MLSS27145.npy new file mode 100644 index 0000000000000000000000000000000000000000..d9466d53a4d7698e16dcac6bde2971f1ba566e1b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&8K7X+Ob~c!-*35g4LjR& z`)T$6*B!QgYkxtCP4OrDt^Mfg5`}vg3xu48>i+;Y2c`}}f3QEwQxm*UeIpKeRMn*L E0CCnsF8}}l literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27146.npy b/app/service/outfit_matcher/color/MLSS27146.npy new file mode 100644 index 0000000000000000000000000000000000000000..e969945f6e8dd794ddbf580ca6b569e3fd666b6a GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=XW(06d2q=q z`y1SkrnO`~wLiGec*XVO&+R9vcmmNOdziZV=L)yi#&3h_{{S}!W*&t8VE>-)K%&f^C0vG`_4Vjl=ggG Lj6)t(H7Ps*NNq=( literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27148.npy b/app/service/outfit_matcher/color/MLSS27148.npy new file mode 100644 index 0000000000000000000000000000000000000000..79f0daf0589af904963bb508963f0101f7ede6f3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cV50Sac#1c8_K+!qvDoHjp( zihqF1qpO>9AYRDK`=b4{`v2<=TfeoxAjPKmll|6ybam#nRa1p6_hOg>Q%5ch0Cdwu AFaQ7m literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27149.npy b/app/service/outfit_matcher/color/MLSS27149.npy new file mode 100644 index 0000000000000000000000000000000000000000..0c76ea6cd2b1b2117b2503535645fa29a50a6f97 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=Z)UDc%$WHM ZD*gd3kFM_b4_;gSvzIXBVd`j20{}}MHunGk literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27150.npy b/app/service/outfit_matcher/color/MLSS27150.npy new file mode 100644 index 0000000000000000000000000000000000000000..19d1d32cd5e0a3a3ee24b4b14bb1f5e25c7760cb GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~U9z7w69it`Gl0Pd KC=KBaMiKzL(kv_h literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27152.npy b/app/service/outfit_matcher/color/MLSS27152.npy new file mode 100644 index 0000000000000000000000000000000000000000..c1f4937d855e062587f0c0b87d7e76646a365e39 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=|Lu@?_<+ze dsQ3rCJWL&g{$S5lXIoi!>oN{`RMoWL0RW`GGnD`U literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27154.npy b/app/service/outfit_matcher/color/MLSS27154.npy new file mode 100644 index 0000000000000000000000000000000000000000..603005f228f9ecfbd1cb9125e9e8d17f8df252cb GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=5BOi1z2?aS dsQ3rCJWL&g{$L-^$fLR3>>dtzRMoWL0RVKbGY9|x literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27156.npy b/app/service/outfit_matcher/color/MLSS27156.npy new file mode 100644 index 0000000000000000000000000000000000000000..aa91d70768f9b298e065841839b39fe252ecb9d9 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=cUCL?ds_d6 z{qirZ(-9zoUJwD$~j$vd%mi~SAm oN7Gs|pV}YXXT0M2@#prpx8;Hm+&py-e}@0Z7Qx*Ea~Cce0Q`Y$P5=M^ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27157.npy b/app/service/outfit_matcher/color/MLSS27157.npy new file mode 100644 index 0000000000000000000000000000000000000000..49520625d89cc2bab440ec298b944e2e69d721ba GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xd3{Ws@CJ4N=zrm8(HTB&y z`{iGz&n|!ba({eODU0&?NA|b3<${pCF&I3y_vtz;ueRt2hPp{Aok!g1}3tI6@w#Zm`h+NsA}A literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27160.npy b/app/service/outfit_matcher/color/MLSS27160.npy new file mode 100644 index 0000000000000000000000000000000000000000..d42b87f9fc4f544c5b88e12d1100c8e6ae14a5d8 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`Jp&kg KfYK1&U?c$uvn}iZ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27161.npy b/app/service/outfit_matcher/color/MLSS27161.npy new file mode 100644 index 0000000000000000000000000000000000000000..97fe87df54d93605341f6975c7de43cc4a67e307 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xdx3}ejko~NgAn?-u&_~{^ qUcYztfBu8O{r#(bB3@K&dkt0h+TIup9@{^AtPrm$zS^E)fB*mz;7OAJ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27162.npy b/app/service/outfit_matcher/color/MLSS27162.npy new file mode 100644 index 0000000000000000000000000000000000000000..07779abccb77bfd30f54dab5985d7d125cbf52f1 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}hU#8D4fBbTPY*Z(INX;GeO{`z3>jJ e8vdn^?XjzSWN!=xkL_>ucdfTUWInY&xX*aS_2bX&C#iS>(Ixv?GeO{`Jp&kg KfYK1&U?c$((=Ge} literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MLSS27226.npy b/app/service/outfit_matcher/color/MLSS27226.npy new file mode 100644 index 0000000000000000000000000000000000000000..528253cfb167c23445e1bec3e73e3147b0012d88 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~0|3TpX{?$GaFRHe^wr7BXSu;W4rTto_WdF*Jm-frQ zOrKr;_~riis8SZ?^N;K&sdxg>BYTLtoAz!q?(V(Ea~OxZOHg$$?ZrwWg+92fhT8+P Hk5U={AtG5H literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7685.npy b/app/service/outfit_matcher/color/MPO_SP7685.npy new file mode 100644 index 0000000000000000000000000000000000000000..02526a63c30c18abf2a161f2fa192cb327a83297 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_UE=QKX+K{iT$+t|LYE0zqP+0#isa^ g{nq~5+j4>EHB{dR`{W55k}57;$6*e-xzy(a0Aijt82|tP literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7686.npy b/app/service/outfit_matcher/color/MPO_SP7686.npy new file mode 100644 index 0000000000000000000000000000000000000000..6b1c3bec7715900ee68831b3318a25ee61dd31c8 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_PZ8mN3$2au%A}{f8Am0xAqsL*c5-V z-`YP(#S@4gLG^vGcTVmK+I4sboR4bK2m4twLExqR{#_N^i?6P=zrp=zT1)0r`-A(8 nS6n~-98KQ``*gD=^$vrz81~-YmJ39$;pP=c<~+Lcc!oUy@m*t` literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7687.npy b/app/service/outfit_matcher/color/MPO_SP7687.npy new file mode 100644 index 0000000000000000000000000000000000000000..55abfb7210339b495042be7518989eaddb5918ff GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_PTb`ORk8$v!7P~f8Am0xAqsL*c5-V z-`WpTIcp{eytJQi%i3{@_e}d++>fTUWInY&u+MnK_2bX?Pg3y&qDN5kKiJ2qRBiTE on_?gEQs4ajvCH=VLtKRU^54PjhndGveuQ5*y&oGeG zZ|$F?;t52L>}SmcftU9G4FzU$=I^t=!To4jOXgGigZqqETtEICYVHTPI?I(24p9yp z?E_xwo4-GH+5Ufsi!fjQJGlKY^P2rV?=M`x0Ina^WgqN~!Qiod0QYWd%iHtq0nn;n AXaE2J literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7693.npy b/app/service/outfit_matcher/color/MPO_SP7693.npy new file mode 100644 index 0000000000000000000000000000000000000000..8ada995e806a8f6234ea06416c98ed9c4dd37a2f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_NQA}S1noi(0=)s>9flpzuX@mRm!4# z{*nFdZMi`7+TIup9@{53$LI5(J8eI${{One)^F`ENUf0GRktrvLx| literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7696.npy b/app/service/outfit_matcher/color/MPO_SP7696.npy new file mode 100644 index 0000000000000000000000000000000000000000..79eb4957bf7dc8c7384265406d98a78ae39c96f8 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_BN*6+U0oGeG zZ|%RmEfI=Xp9Q>B-*f80ui=8-u}Pd(+tS-+$Nl+XuYVH-CTZvi<)M7h%5q bcX0b>%>;p$_Gud)%$@SC4K9xEGITxwPo7sE literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7705.npy b/app/service/outfit_matcher/color/MPO_SP7705.npy new file mode 100644 index 0000000000000000000000000000000000000000..845046a481d7875387e617510db400e0e36cce19 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_NuB|7xhWJvA@CnXj)6=Q~QJaj8|Mg z{@i|&iYE{~vY#~*1YX+z|8ZrT&gJd)fBu8O{r#(bB3@K&dkr@irfyQ^{B1qA`k~?o Xdtv6m+~eJv|1>3|8?GPSW$1hW#Q|2s literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7706.npy b/app/service/outfit_matcher/color/MPO_SP7706.npy new file mode 100644 index 0000000000000000000000000000000000000000..4dddb95f6df05efe54d47f67e167e30639dc82f3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_C7zHZ5sBxuy0_fGWz55e*c>Yr!_a{ ioZ3H0#S@4g+0U8@0x#_^%6;Jb&wCb!Iq2q6pAP`c$~P_m literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7711.npy b/app/service/outfit_matcher/color/MPO_SP7711.npy new file mode 100644 index 0000000000000000000000000000000000000000..ef3bfe3e596825ae5bcfdbfaf658c419f8eae4cf GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_ATr)G|RYN*)RVxeRlcdm;2+RN?DZ8 zKeC^s;t52L?2WCNKshc$u1YX*|5}079N3BKro0Dx*I>@Atona9VS7&M6G@>_wyb%f0&S0i+yZng9R* literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7712.npy b/app/service/outfit_matcher/color/MPO_SP7712.npy new file mode 100644 index 0000000000000000000000000000000000000000..963f9f34da58316acc988fbc9f6fecd7538cd1a3 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_WJMJ1k1O-w7EwLQeVllI%5+h_XhZ?gvg&m3+R literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7717.npy b/app/service/outfit_matcher/color/MPO_SP7717.npy new file mode 100644 index 0000000000000000000000000000000000000000..f79ac9bf70921f393d2c278d43292177a8bf4d6f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_H*XtFPwh=x&5^I|LYE0zqP+0#isa^ g{nq|TDxN^}2&(Uc{qaKzdoMU#z+n!$xzy(a07ytQA^-pY literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7722.npy b/app/service/outfit_matcher/color/MPO_SP7722.npy new file mode 100644 index 0000000000000000000000000000000000000000..c1c9592d3254bb17ce39993dae788500ada5ba64 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_HDdZ&dvYv+9flpzuX@iRm!4# i{?Y#1+j4>Ewf(G_AaK(D>yz-L1AG^7n1gOE_4xqD6grFm literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7723.npy b/app/service/outfit_matcher/color/MPO_SP7723.npy new file mode 100644 index 0000000000000000000000000000000000000000..e76a9be9f7f62f3202c8fbf31abd2c17c6defaf2 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_G}9jZEkIU36;mCj)9?Oro+}2<)ik0 n{)52%{i}TiE zes6z!TP_IM&zcDWFYO=3^Q7B-yJ8>kQs4ajvCH=VLtKRU^54PDg{k{X}{vj^x5T)U+#~MDrHeV z|7id1ZMi`7+J4qd5V&b?RQ&cw^x{MI%c1JxA?o1fLe#yq|D~IInO$NfTpZm-a`^zE CJxk93 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7731.npy b/app/service/outfit_matcher/color/MPO_SP7731.npy new file mode 100644 index 0000000000000000000000000000000000000000..bc76d71e40c3ad43506ae9c957f382d4acee5d6a GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_U^?@pDl!5*-xwgzwWU0Tl))AY>GeG zZ|%RmEf<8K`aalaST5Uqs`n6_4>M_!iYE|VvY#~*1YX*|d1}w-wsZ*&`(V0Arvckw BK>h## literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MPO_SP7732.npy b/app/service/outfit_matcher/color/MPO_SP7732.npy new file mode 100644 index 0000000000000000000000000000000000000000..386747666e114fe9a12068dad82d0f00fd956433 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_Ngx>ztP_F*uH_G%IJ^J`~6=doYvf& zbIShqwpfTUWInY&u+MnK_2bX?-`fTUWInY&u+MnK_2bX?-` znfLb7>i@4hZ2i{$f)tzLPxf2;C#iS>(Ifj=GeO{`y~_GC%C~CfK=na%(~|@MJ`O{_ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_57987.npy b/app/service/outfit_matcher/color/MSE_57987.npy new file mode 100644 index 0000000000000000000000000000000000000000..ed9c678dad4ecf14a4808ea19526552709c4185b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWK`jc{6XbIvLI+uL$M$bQyL5O`_N00tkR JG=w)8NdWyBFH`^k literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_57988.npy b/app/service/outfit_matcher/color/MSE_57988.npy new file mode 100644 index 0000000000000000000000000000000000000000..ed9c678dad4ecf14a4808ea19526552709c4185b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWK`jc{6XbIvLI+uL$M$bQyL5O`_N00tkR JG=w)8NdWyBFH`^k literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58044.npy b/app/service/outfit_matcher/color/MSE_58044.npy new file mode 100644 index 0000000000000000000000000000000000000000..00d0b2c4657208242d7626317c7e4e5c39bcd220 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAn?+j0SrDs JX$WsHk^oZZFUtS` literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58045.npy b/app/service/outfit_matcher/color/MSE_58045.npy new file mode 100644 index 0000000000000000000000000000000000000000..6824da6574b8bc6052a7f75cca9b7bbecc55c6f5 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAn?+jL*ewg g`jYqd=;|h^cmmNQsJff>{QqaGaTQFoXBZ#=048xpmjD0& literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58057.npy b/app/service/outfit_matcher/color/MSE_58057.npy new file mode 100644 index 0000000000000000000000000000000000000000..8587ef235b264fe584a0aab4bb5c490a589c5e63 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`y^#73 hwodam_UP(vZ_5QCdt)$oY@c)7?!fTUWInY&xX*aS_2bX&C#iS>(ItChFnDaw00tkR JG=w)8NdRy|E0F*I literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58106.npy b/app/service/outfit_matcher/color/MSE_58106.npy new file mode 100644 index 0000000000000000000000000000000000000000..d04aa93191edeca855905fc629e72e0b671e531f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cWG_O@IQvY#~*1YX*22(}fR zpa0zc2KS?BEtya45AHKwasBvnG<7HK1$y`R&3Jjzo&gL#KxqgMnT+w6bK~0j4LIeI I)sn&n0G(=0vj6}9 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58107.npy b/app/service/outfit_matcher/color/MSE_58107.npy new file mode 100644 index 0000000000000000000000000000000000000000..420f2f442e455f816f27d53938f18fd40aa8c625 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cWG_O@IQvY#~*1YX+b1wJ~n zr2UqCQn=0RghRXbA5Z@=MgH=8`$;OEKy=8S0SrFaXNT=(%CR^H=R?FXN%1#HdxORH v+uz`RG_57`sr|uy#w)HLe~xDFNqf=Dank=!>?2^_2YYuvyLXNgciRI19wKBO literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58112.npy b/app/service/outfit_matcher/color/MSE_58112.npy new file mode 100644 index 0000000000000000000000000000000000000000..3ad24e747ead0336401ff728af42cfa89b258c83 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)tvqeXA#2i+l=|$EEIry$}0z*Ra}s_RGIa zpI!d=<^K4nQWoX&kL+)6%LO60{?i9`^1gh#2SXjq=2Q369+jBnbOWsO*0Oq%2EC2ui literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58114.npy b/app/service/outfit_matcher/color/MSE_58114.npy new file mode 100644 index 0000000000000000000000000000000000000000..81a8b400bfcb76253f69865fc1c40eab878ac65a GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)twzDU-K6u6PBN$EEIrz4>k19Sdc)+b{nz oeRlcdm;2+RN?DZ8KeE5QEf<8~`u+Z^Eq0LEiqk$!7Z4``0ER+3SpWb4 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58132.npy b/app/service/outfit_matcher/color/MSE_58132.npy new file mode 100644 index 0000000000000000000000000000000000000000..a8e04510dd52cd1941de67f5e66334601099405f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0{U#8D4fBbTPd{ilm^7%*h3{Ws@CJ4N=k2+*``{ApL zQ1K6Nd6+r~{lQ+FaV^Uhp$ql_FZIpeAG>V-Kg30tFaMqWBo$8}dSnkXZ&$?~Mf0`i z?N>nUjfL2|A7&m*UDXAD)4Eyv?32Q6W+xolwf}hfk16t(-`j7`y}d2>_A`59FnDbL MN8f{ekH{{20E-fB6aWAK literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58133.npy b/app/service/outfit_matcher/color/MSE_58133.npy new file mode 100644 index 0000000000000000000000000000000000000000..966b8ef0387916eedf03a6c3cae439c98e72bb21 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~0|3TpX{?$GaFRHe^wr7BXSu;W4rM-~N+?!RhkL;7e zZDuDN+O_|9`j08{m*3mp-j)kO_Aqr~iNE!>Jhq?k=E?1j)D?1M{JtH~Lxu)o3mXj)6=Q~QJaj8|Mg{v6HTllHr>e}BFF@j`n5HuHJP literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58174.npy b/app/service/outfit_matcher/color/MSE_58174.npy new file mode 100644 index 0000000000000000000000000000000000000000..1bbfbe0a419076f4710d0d3116b37233af930f35 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(q0z|?_TP1ikA&zywNDDSnVoQG*Z$+_Kc>iE beh*haYbFT1v=>??Ssu3VDqI}hBwF(UeNr;( literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58183.npy b/app/service/outfit_matcher/color/MSE_58183.npy new file mode 100644 index 0000000000000000000000000000000000000000..ac0e8b27ebdd7d3fecbf793972df1af713efc08b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAaK+EeOF8y z+tP>jfBu8O{r#(bB3@K&du`7E1rT*F?Zu+jUj3?Y6)OG#E)P=&qm>^|t`)wqg@C#b T_I$gRd_4Gl5l(Yp=D}zHHAYk^ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58184.npy b/app/service/outfit_matcher/color/MSE_58184.npy new file mode 100644 index 0000000000000000000000000000000000000000..5cbe32b7d4856b3065b6530fca83c50ee5bf90cc GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTD%TP_Ge?LBFqwchHVkHHe0=E2!_0I3^n9{>OV literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58185.npy b/app/service/outfit_matcher/color/MSE_58185.npy new file mode 100644 index 0000000000000000000000000000000000000000..1fe2aabaf78fee68e25e8c5b4292c6e4e7531d94 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz}ejko~NgAaK&&C%Q;3 z)!~VKQn=0RghRXbA5Z@=MgH=8dj=?gsC#K2p8u(Wzws(m`~zGbrVc`Xu;*XcyC~(+ Md>rzqs!8Di09vIr$}K?++{P!N;veAhFm(|6gZ=qU|2L>k MK7m6XRW&I*05ro(8vp&DZsQDTa9vdoRJ&%`iwj)WW&g9sno;T=M_` literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58198.npy b/app/service/outfit_matcher/color/MSE_58198.npy new file mode 100644 index 0000000000000000000000000000000000000000..ff4a5f6cbdb3085022aaf5291476a2c3c83a9a21 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)pBTq4}w6K0UGzc&Tsx{@7*v{~<2IeEIL} zC#iS>(INX;GeO{`z05KO>F(02P;+pZ_rc!b$?4*P=oR)ixF1bx$$V;maG&vt>&Ktl a-`M literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58199.npy b/app/service/outfit_matcher/color/MSE_58199.npy new file mode 100644 index 0000000000000000000000000000000000000000..647c4d5af04880ea643eef25fc5294240820df0e GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p)tu*lYYKP61i_5@KWFW{jtmT|3h4a`SRb{ zPg3y&qC@txW`e*=d&kCD(Qngk+uz`RG_57`sr|uy#w)HLe{O$!TP_Ge)t$7zxPCF) OoS>~Z?Zb2daUuYk>P!&; literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58203.npy b/app/service/outfit_matcher/color/MSE_58203.npy new file mode 100644 index 0000000000000000000000000000000000000000..93e5010e921f18cc1cf0e26c115ba96392c5eefd GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= mXCxM+0{I%IItr$mItsN4WCJb+F!*2(p>dIf(IL2bk|t55 v9T{uwZ*V`F){^28KAB_B00tkRG=zstPFpH> ObAs3uobt$OL2Lk8$77!W literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58276.npy b/app/service/outfit_matcher/color/MSE_58276.npy new file mode 100644 index 0000000000000000000000000000000000000000..19b266b9689c4a3bc83b0dfb207f13b839c37233 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWLxiEvtTbIz&#lTMKo l&&Rj+=<2rT-rkmb`t=gdBG|V9zi>004U@NHYKc literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58361.npy b/app/service/outfit_matcher/color/MSE_58361.npy new file mode 100644 index 0000000000000000000000000000000000000000..93e5010e921f18cc1cf0e26c115ba96392c5eefd GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= mXCxM+0{I%IItr$mItsN4WCJb+F!*2(p>dIf~;kx1r*g=0Vimv^UMpbX4M84%d%vBe{G4riwj2 literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58451.npy b/app/service/outfit_matcher/color/MSE_58451.npy new file mode 100644 index 0000000000000000000000000000000000000000..93e5010e921f18cc1cf0e26c115ba96392c5eefd GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= mXCxM+0{I%IItr$mItsN4WCJb+F!*2(p>dIfz~{0Snqz^8f$< literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MSE_58499.npy b/app/service/outfit_matcher/color/MSE_58499.npy new file mode 100644 index 0000000000000000000000000000000000000000..d1d0fb36f6fbeab258962152b4c51a0d0b1b3daf GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCO0GaGTi)hj#5hp8jKs{N?xdlTiE qeh*haYbFT1wEwc?&A!*S&p^d-na9A8yS(UAV8txBesmkjI{;@!-qptcU`v!(8qdz|H_rHm7T61&Gsr{2w ZJb~ztJdIffTUWInY&xX*aS_2bX&C#iS>(Ifj=GeO{_Jp&kg KfYK1&U?c$vvn}iZ literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27191.npy b/app/service/outfit_matcher/color/MWSS27191.npy new file mode 100644 index 0000000000000000000000000000000000000000..4138f1ba88a6e28444d689c4ed76d9a4214315d4 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cUwl8Pq~9kQP_69it`Gl0Pd KC=KBaMiKzAvMd|` literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27193.npy b/app/service/outfit_matcher/color/MWSS27193.npy new file mode 100644 index 0000000000000000000000000000000000000000..4b2eeedc956662c9d55d505a25c4b9f44c2794d8 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&C#iS>(INX;GeO{`z1o~N zt0yjbV;}HR-~9ct%l7|6T!i`Z-`U^ZmJ32~bsel}vR$HE>>0q|1C)mF5ab7Yq0}op Oi^ON+kVmK_l?4D`>q_qc literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27195.npy b/app/service/outfit_matcher/color/MWSS27195.npy new file mode 100644 index 0000000000000000000000000000000000000000..4436f185966250cdb207bdbab5ccec17ce338484 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cV50Sac#1c8_Ko0F%ftoM9l uzx>Pe+2xO4?vIZuWl=u=$o}@WToAH{sJm&O^~mLR%ci|>{V;RrMFRkHMMIbX literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27200.npy b/app/service/outfit_matcher/color/MWSS27200.npy new file mode 100644 index 0000000000000000000000000000000000000000..8c7706f73112dd55beee115f9a4edc3116b930cd GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&8K7X+Ob~c!ue$aB*_nIZ dLB&77eikc_6%U~0ZK!7$mCH~=M8;k MJ8{Y*t0jdE0G8!Tod5s; literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27211.npy b/app/service/outfit_matcher/color/MWSS27211.npy new file mode 100644 index 0000000000000000000000000000000000000000..e13311af3ffefea045820e4507b95133ca9fc09b GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN~%m-^=Kk6pI^AL1g+m;cWG_O@IQvY#~*1YX)RfWZeS J4dD$&5&$g`E;9fC literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MWSS27212.npy b/app/service/outfit_matcher/color/MWSS27212.npy new file mode 100644 index 0000000000000000000000000000000000000000..eec3e8284624c62fa77ad3ab1c033ef9a47f05e4 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCJb+F!*2(p&1x%Z_5QC`&lzV;HCZD=e*}zB3{~0tN*|5 hu=QK}3sP)~KiO~XM_1RKaN_Wrxu@Xfz|5l;4FFQ$LXZFe literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MZOS27178.npy b/app/service/outfit_matcher/color/MZOS27178.npy new file mode 100644 index 0000000000000000000000000000000000000000..93d0886fdad0305681f9b14f366565e81ab4a591 GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}ShAN{!KJWK`jc{6XbIvJy1~B+wKWiokoU}jMw4WtV w`Mv$}FVkn2KYqDCKB|;O`TQgM+uL%1=rvT`P5aR0{2BMB&W7rTm_kny07kDwbN~PV literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/color/MZOS27179.npy b/app/service/outfit_matcher/color/MZOS27179.npy new file mode 100644 index 0000000000000000000000000000000000000000..24a3d23d0f286b5cf7665128eb64aea19f9c1b5f GIT binary patch literal 328 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IItr$mItsN4WCN}n+>fTUWInY&xX*aS_2bX&Z*R*5A$wymcx=xA1|Og_ Igf|#T0N`^im;e9( literal 0 HcmV?d00001 diff --git a/app/service/outfit_matcher/config/fashion_categories.json b/app/service/outfit_matcher/config/fashion_categories.json new file mode 100644 index 0000000..9c3c12a --- /dev/null +++ b/app/service/outfit_matcher/config/fashion_categories.json @@ -0,0 +1,242 @@ +[ + "ACCECSSORY/BAG", + "ACCECSSORY/HAT", + "ACCESSORY/ACCESSORY", + "ACCESSORY/BAG", + "ACCESSORY/BELT", + "ACCESSORY/BOOTS", + "ACCESSORY/BANGLE", + "ACCESSORY/COMBO SET", + "ACCESSORY/BRACELET", + "ACCESSORY/BRA TOP", + "ACCESSORY/BIB", + "ACCESSORY/GIFT", + "ACCESSORY/FESTIVAL SET", + "ACCESSORY/CAPE", + "ACCESSORY/BLANKET", + "ACCESSORY/HAIR BAND", + "ACCESSORY/GLOVES", + "ACCESSORY/FUR SCARF", + "ACCESSORY/BROOCH", + "ACCESSORY/HAT", + "ACCESSORY/HAIR CLIPS", + "ACCESSORY/SCARF", + "ACCESSORY/CLIP", + "ACCESSORY/HEAD BAND", + "ACCESSORY/NECKLACE", + "ACCESSORY/SOCKS", + "ACCESSORY/EARING", + "ACCESSORY/KEYRING", + "ACCESSORY/OTHERS", + "ACCESSORY/TOY", + "ACCESSORY/HAIR CLIP", + "ACCESSORY/RING", + "ACCESSORY/SANDALS", + "ACCESSORY/SUN GLASS", + "ACCESSORY/MASK", + "ACCESSORY/Test Kit", + "ACCESSORY/MUG", + "ACCESSORY/TOWEL", + "ACCESSORY/SCARF TOP", + "ACCESSORY/SHOES", + "ACCESSORY/SWIMSUIT", + "ACCESSORY/TIE", + "BOTTOM/BOTTOM", + "BOTTOM/CAPRI", + "BOTTOM/", + "BOTTOM/COAT", + "BOTTOM/CARDIGAN", + "BOTTOM/JEANS SHORTS", + "BOTTOM/BOOTS", + "BOTTOM/JEANS", + "BOTTOM/CARPI", + "BOTTOM/JUMPSUIT", + "BOTTOM/JEANS SKIRT", + "BOTTOM/JEANS CARPI", + "BOTTOM/JACKET", + "BOTTOM/LEATHER JACKET", + "BOTTOM/LEATHER PANTS", + "BOTTOM/JEANS PANTS", + "BOTTOM/PANTS", + "BOTTOM/LEATHER SHORTS", + "BOTTOM/LEATHER SKIRT", + "BOTTOM/OVERALL", + "BOTTOM/SHORTS", + "BOTTOM/LEGGING", + "BOTTOM/UNDERWEAR", + "BOTTOM/SKIRT", + "BOTTOM/TUTA", + "BOTTOM/SANDALS", + "BOTTOM/TEE", + "BOTTOM/SHOES", + "BOTTOM/SPORTSWEAR PANTS", + "BOTTON/PANTS", + "DRESS/JEANS JACKET", + "DRESS/", + "DRESS/ONE PIECE", + "DRESS/DRESS", + "DRESS/LEATHER DRESS", + "DRESS/JEANS SKIRT", + "DRESS/OVERALL", + "DRESS/EVENING DRESS", + "DRESS/SKIRT", + "DRESS/LEATHER SKIRT", + "DRESS/JEANS DRESS", + "DRESS/SHORTS", + "DRESS/JUMPSUIT", + "DRESS/VEST", + "DRESS/SHIRT", + "DRESS/TUTA", + "FUR/DOWN COAT", + "FUR/HAT", + "FUR/FUR CAPE", + "FUR/FUR COAT", + "FUR/FUR DOWN JACKET", + "FUR/FUR GILET", + "FUR/FUR CARDIGAN", + "FUR/FUR JACKET", + "FUR/FUR HAT", + "FUR/FUR SCARF", + "FUR/FUR VEST", + "GIFT/GIFT", + "GIFT/SCARF", + "JEANS/GILET", + "JEANS/JEANS CARPI", + "JEANS/DRESS", + "JEANS/JEANS BLOUSE", + "JEANS/JEANS", + "JEANS/JEANS OVERALL", + "JEANS/JEANS BLAZER", + "JEANS/JEANS DRESS", + "JEANS/SHIRT", + "JEANS/JEANS SHORTS", + "JEANS/JEANS GILET", + "JEANS/JEANS JACKET", + "JEANS/SKIRT", + "JEANS/TWIN SET", + "JEANS/JEANS PANTS", + "JEANS/JEANS SHIRT", + "JEANS/JEANS SKIRT", + "JEANS/JEANS VEST", + "JEANS/JEANS TOP", + "JEANS/OVERALL", + "JEANS/PANTS", + "JEANS/SHORTS", + "KNIT/CARDGAIN", + "KNIT/ONE PIECE", + "KNIT/CARDIGAN", + "KNIT/BRA TOP", + "KNIT/JACKET", + "KNIT/PULLOVER", + "KNIT/DRESS", + "KNIT/CAPE", + "KNIT/KNIT TOP", + "KNIT/CARDGIAN", + "KNIT/PANTS", + "KNIT/GILET", + "KNIT/LONG TOP", + "KNIT/SKIRT", + "KNIT/SHORTS", + "KNIT/SWEATER", + "KNIT/SWEATPR", + "KNIT/VEST", + "KNIT/TANK", + "KNIT/TOP", + "KNIT/TUTA", + "KNIT/TWIN SET", + "LEATHER/BLAZER", + "LEATHER/LEATHER BLAZER", + "LEATHER/LEATHER COAT", + "LEATHER/LEATHER PANTS", + "LEATHER/HAT", + "LEATHER/LEATHER BLOUSE", + "LEATHER/LEATHER DRESS", + "LEATHER/LEATHER SHORTS", + "LEATHER/LEATHER SKIRT", + "LEATHER/LEATHER GILET", + "LEATHER/LEATHER JACKET", + "LEATHER/LEATHER VEST", + "LEATHER/LEATHERSKIRT", + "LEATHER/LEATHERSHIRT", + "LEATHER/LEATHER TOP", + "ONE PIECE/BODYSUIT", + "ONE PIECE/COMBO SET", + "ONE PIECE/BODY", + "ONE PIECE/JUMPSUIT", + "ONE PIECE/DRESS", + "ONE PIECE/OVERALL", + "ONE PIECE/SWIMSUIT", + "ONE PIECE/TWIN SET", + "OUTERWEAR/CARDIGAN", + "OUTERWEAR/BLAZER", + "OUTERWEAR/DOWN COAT", + "OUTERWEAR/", + "OUTERWEAR/DOWN JACKET", + "OUTERWEAR/COAT", + "OUTERWEAR/DOWN GILET", + "OUTERWEAR/CAPE", + "OUTERWEAR/DOWN VEST", + "OUTERWEAR/FUR JACKET", + "OUTERWEAR/FUR VEST", + "OUTERWEAR/CAPE COAT", + "OUTERWEAR/LEATHER VEST", + "OUTERWEAR/PULLOVER", + "OUTERWEAR/GILET", + "OUTERWEAR/FUR COAT", + "OUTERWEAR/QUILTED JACKET", + "OUTERWEAR/SPORTSWEAR JACKET", + "OUTERWEAR/JACKET", + "OUTERWEAR/FUR GILET", + "OUTERWEAR/SHIRT", + "OUTERWEAR/TWIN SET", + "OUTERWEAR/LEATHER GILET", + "OUTERWEAR/JEANS JACKET", + "OUTERWEAR/TRENCH COAT", + "OUTERWEAR/LEATHER COAT", + "OUTERWEAR/ONE PIECE", + "OUTERWEAR/LEATHER JACKET", + "OUTERWEAR/SCARF", + "OUTERWEAR/SOCKS", + "OUTERWEAR/TOP", + "OUTERWEAR/UNIFORM", + "OUTERWEAR/VEST", + "OUTERWEAR/WINDBREAKER", + "OUTERWEAR/WINDERBREAKER", + "OUTPRWEAR/BLAZER", + "SHOES/PUMPS", + "SHOES/BOOTS", + "SHOES/SHOES", + "SHOES/SANDALS", + "TOP/BLOUSE", + "TOP/BLAZER", + "TOP/BAR TOP", + "TOP/BRA TOP", + "TOP/CARDIGAN", + "TOP/BODY", + "TOP/COAT", + "TOP/PANTS", + "TOP/DOWN VEST", + "TOP/JACKET", + "TOP/GILET", + "TOP/TWIN SET", + "TOP/LONG SLEEVES TEE", + "TOP/LONG TOP", + "TOP/KNIT TOP", + "TOP/VEST", + "TOP/ONE PIECE", + "TOP/TANK", + "TOP/PULLOVER", + "TOP/TOP", + "TOP/OVERALL", + "TOP/UNDERWEAR", + "TOP/SKIRT", + "TOP/UNIFORM", + "TOP/SHIRT", + "TOP/SWEATER", + "TOP/TUTA", + "TOP/TEE", + "TOP/TUNIC", + "TUTA/OVERALL", + "TUTA/TWIN SET", + "TUTA/TUTA" +] \ No newline at end of file diff --git a/app/service/outfit_matcher/config/fashion_category_mapping.json b/app/service/outfit_matcher/config/fashion_category_mapping.json new file mode 100644 index 0000000..abdb4be --- /dev/null +++ b/app/service/outfit_matcher/config/fashion_category_mapping.json @@ -0,0 +1,242 @@ +{ + "ACCECSSORY/BAG": "bags", + "ACCECSSORY/HAT": "hats", + "ACCESSORY/ACCESSORY": "accessories", + "ACCESSORY/BAG": "bags", + "ACCESSORY/BELT": "accessories", + "ACCESSORY/BOOTS": "shoes", + "ACCESSORY/BANGLE": "accessories", + "ACCESSORY/COMBO SET": "accessories", + "ACCESSORY/BRACELET": "accessories", + "ACCESSORY/BRA TOP": "tops", + "ACCESSORY/BIB": "accessories", + "ACCESSORY/GIFT": "accessories", + "ACCESSORY/FESTIVAL SET": "accessories", + "ACCESSORY/CAPE": "outerwear", + "ACCESSORY/BLANKET": "accessories", + "ACCESSORY/HAIR BAND": "accessories", + "ACCESSORY/GLOVES": "accessories", + "ACCESSORY/FUR SCARF": "accessories", + "ACCESSORY/BROOCH": "accessories", + "ACCESSORY/HAT": "hats", + "ACCESSORY/HAIR CLIPS": "accessories", + "ACCESSORY/SCARF": "scarves", + "ACCESSORY/CLIP": "accessories", + "ACCESSORY/HEAD BAND": "accessories", + "ACCESSORY/NECKLACE": "jewellery", + "ACCESSORY/SOCKS": "accessories", + "ACCESSORY/EARING": "jewellery", + "ACCESSORY/KEYRING": "accessories", + "ACCESSORY/OTHERS": "accessories", + "ACCESSORY/TOY": "accessories", + "ACCESSORY/HAIR CLIP": "accessories", + "ACCESSORY/RING": "jewellery", + "ACCESSORY/SANDALS": "shoes", + "ACCESSORY/SUN GLASS": "sunglasses", + "ACCESSORY/MASK": "accessories", + "ACCESSORY/Test Kit": "accessories", + "ACCESSORY/MUG": "accessories", + "ACCESSORY/TOWEL": "accessories", + "ACCESSORY/SCARF TOP": "scarves", + "ACCESSORY/SHOES": "shoes", + "ACCESSORY/SWIMSUIT": "all-body", + "ACCESSORY/TIE": "accessories", + "BOTTOM/BOTTOM": "bottoms", + "BOTTOM/CAPRI": "bottoms", + "BOTTOM/": "bottoms", + "BOTTOM/COAT": "outerwear", + "BOTTOM/CARDIGAN": "outerwear", + "BOTTOM/JEANS SHORTS": "bottoms", + "BOTTOM/BOOTS": "shoes", + "BOTTOM/JEANS": "bottoms", + "BOTTOM/CARPI": "bottoms", + "BOTTOM/JUMPSUIT": "all-body", + "BOTTOM/JEANS SKIRT": "bottoms", + "BOTTOM/JEANS CARPI": "bottoms", + "BOTTOM/JACKET": "outerwear", + "BOTTOM/LEATHER JACKET": "outerwear", + "BOTTOM/LEATHER PANTS": "bottoms", + "BOTTOM/JEANS PANTS": "bottoms", + "BOTTOM/PANTS": "bottoms", + "BOTTOM/LEATHER SHORTS": "bottoms", + "BOTTOM/LEATHER SKIRT": "bottoms", + "BOTTOM/OVERALL": "all-body", + "BOTTOM/SHORTS": "bottoms", + "BOTTOM/LEGGING": "bottoms", + "BOTTOM/UNDERWEAR": "bottoms", + "BOTTOM/SKIRT": "bottoms", + "BOTTOM/TUTA": "all-body", + "BOTTOM/SANDALS": "shoes", + "BOTTOM/TEE": "tops", + "BOTTOM/SHOES": "shoes", + "BOTTOM/SPORTSWEAR PANTS": "bottoms", + "BOTTON/PANTS": "bottoms", + "DRESS/JEANS JACKET": "outerwear", + "DRESS/": "all-body", + "DRESS/ONE PIECE": "all-body", + "DRESS/DRESS": "all-body", + "DRESS/LEATHER DRESS": "all-body", + "DRESS/JEANS SKIRT": "bottoms", + "DRESS/OVERALL": "all-body", + "DRESS/EVENING DRESS": "all-body", + "DRESS/SKIRT": "bottoms", + "DRESS/LEATHER SKIRT": "bottoms", + "DRESS/JEANS DRESS": "all-body", + "DRESS/SHORTS": "bottoms", + "DRESS/JUMPSUIT": "all-body", + "DRESS/VEST": "tops", + "DRESS/SHIRT": "tops", + "DRESS/TUTA": "all-body", + "FUR/DOWN COAT": "outerwear", + "FUR/HAT": "hats", + "FUR/FUR CAPE": "outerwear", + "FUR/FUR COAT": "outerwear", + "FUR/FUR DOWN JACKET": "outerwear", + "FUR/FUR GILET": "outerwear", + "FUR/FUR CARDIGAN": "outerwear", + "FUR/FUR JACKET": "outerwear", + "FUR/FUR HAT": "hats", + "FUR/FUR SCARF": "accessories", + "FUR/FUR VEST": "outerwear", + "GIFT/GIFT": "accessories", + "GIFT/SCARF": "accessories", + "JEANS/GILET": "outerwear", + "JEANS/JEANS CARPI": "bottoms", + "JEANS/DRESS": "all-body", + "JEANS/JEANS BLOUSE": "tops", + "JEANS/JEANS": "bottoms", + "JEANS/JEANS OVERALL": "all-body", + "JEANS/JEANS BLAZER": "outerwear", + "JEANS/JEANS DRESS": "all-body", + "JEANS/SHIRT": "tops", + "JEANS/JEANS SHORTS": "bottoms", + "JEANS/JEANS GILET": "outerwear", + "JEANS/JEANS JACKET": "outerwear", + "JEANS/SKIRT": "bottoms", + "JEANS/TWIN SET": "all-body", + "JEANS/JEANS PANTS": "bottoms", + "JEANS/JEANS SHIRT": "tops", + "JEANS/JEANS SKIRT": "bottoms", + "JEANS/JEANS VEST": "outerwear", + "JEANS/JEANS TOP": "tops", + "JEANS/OVERALL": "all-body", + "JEANS/PANTS": "bottoms", + "JEANS/SHORTS": "bottoms", + "KNIT/CARDGAIN": "outerwear", + "KNIT/ONE PIECE": "all-body", + "KNIT/CARDIGAN": "outerwear", + "KNIT/BRA TOP": "tops", + "KNIT/JACKET": "outerwear", + "KNIT/PULLOVER": "tops", + "KNIT/DRESS": "all-body", + "KNIT/CAPE": "outerwear", + "KNIT/KNIT TOP": "tops", + "KNIT/CARDGIAN": "outerwear", + "KNIT/PANTS": "bottoms", + "KNIT/GILET": "outerwear", + "KNIT/LONG TOP": "tops", + "KNIT/SKIRT": "bottoms", + "KNIT/SHORTS": "bottoms", + "KNIT/SWEATER": "tops", + "KNIT/SWEATPR": "tops", + "KNIT/VEST": "outerwear", + "KNIT/TANK": "tops", + "KNIT/TOP": "tops", + "KNIT/TUTA": "all-body", + "KNIT/TWIN SET": "all-body", + "LEATHER/BLAZER": "outerwear", + "LEATHER/LEATHER BLAZER": "outerwear", + "LEATHER/LEATHER COAT": "outerwear", + "LEATHER/LEATHER PANTS": "bottoms", + "LEATHER/HAT": "hats", + "LEATHER/LEATHER BLOUSE": "tops", + "LEATHER/LEATHER DRESS": "all-body", + "LEATHER/LEATHER SHORTS": "bottoms", + "LEATHER/LEATHER SKIRT": "bottoms", + "LEATHER/LEATHER GILET": "outerwear", + "LEATHER/LEATHER JACKET": "outerwear", + "LEATHER/LEATHER VEST": "outerwear", + "LEATHER/LEATHERSKIRT": "bottoms", + "LEATHER/LEATHERSHIRT": "tops", + "LEATHER/LEATHER TOP": "tops", + "ONE PIECE/BODYSUIT": "all-body", + "ONE PIECE/COMBO SET": "all-body", + "ONE PIECE/BODY": "all-body", + "ONE PIECE/JUMPSUIT": "all-body", + "ONE PIECE/DRESS": "all-body", + "ONE PIECE/OVERALL": "all-body", + "ONE PIECE/SWIMSUIT": "all-body", + "ONE PIECE/TWIN SET": "all-body", + "OUTERWEAR/CARDIGAN": "outerwear", + "OUTERWEAR/BLAZER": "outerwear", + "OUTERWEAR/DOWN COAT": "outerwear", + "OUTERWEAR/": "outerwear", + "OUTERWEAR/DOWN JACKET": "outerwear", + "OUTERWEAR/COAT": "outerwear", + "OUTERWEAR/DOWN GILET": "outerwear", + "OUTERWEAR/CAPE": "outerwear", + "OUTERWEAR/DOWN VEST": "outerwear", + "OUTERWEAR/FUR JACKET": "outerwear", + "OUTERWEAR/FUR VEST": "outerwear", + "OUTERWEAR/CAPE COAT": "outerwear", + "OUTERWEAR/LEATHER VEST": "outerwear", + "OUTERWEAR/PULLOVER": "outerwear", + "OUTERWEAR/GILET": "outerwear", + "OUTERWEAR/FUR COAT": "outerwear", + "OUTERWEAR/QUILTED JACKET": "outerwear", + "OUTERWEAR/SPORTSWEAR JACKET": "outerwear", + "OUTERWEAR/JACKET": "outerwear", + "OUTERWEAR/FUR GILET": "outerwear", + "OUTERWEAR/SHIRT": "tops", + "OUTERWEAR/TWIN SET": "all-body", + "OUTERWEAR/LEATHER GILET": "outerwear", + "OUTERWEAR/JEANS JACKET": "outerwear", + "OUTERWEAR/TRENCH COAT": "outerwear", + "OUTERWEAR/LEATHER COAT": "outerwear", + "OUTERWEAR/ONE PIECE": "all-body", + "OUTERWEAR/LEATHER JACKET": "outerwear", + "OUTERWEAR/SCARF": "accessories", + "OUTERWEAR/SOCKS": "accessories", + "OUTERWEAR/TOP": "tops", + "OUTERWEAR/UNIFORM": "outerwear", + "OUTERWEAR/VEST": "outerwear", + "OUTERWEAR/WINDBREAKER": "outerwear", + "OUTERWEAR/WINDERBREAKER": "outerwear", + "OUTPRWEAR/BLAZER": "outerwear", + "SHOES/PUMPS": "shoes", + "SHOES/BOOTS": "shoes", + "SHOES/SHOES": "shoes", + "SHOES/SANDALS": "shoes", + "TOP/BLOUSE": "tops", + "TOP/BLAZER": "outerwear", + "TOP/BAR TOP": "tops", + "TOP/BRA TOP": "tops", + "TOP/CARDIGAN": "outerwear", + "TOP/BODY": "all-body", + "TOP/COAT": "outerwear", + "TOP/PANTS": "bottoms", + "TOP/DOWN VEST": "outerwear", + "TOP/JACKET": "outerwear", + "TOP/GILET": "outerwear", + "TOP/TWIN SET": "tops", + "TOP/LONG SLEEVES TEE": "tops", + "TOP/LONG TOP": "tops", + "TOP/KNIT TOP": "tops", + "TOP/VEST": "outerwear", + "TOP/ONE PIECE": "all-body", + "TOP/TANK": "tops", + "TOP/PULLOVER": "outerwear", + "TOP/TOP": "tops", + "TOP/OVERALL": "all-body", + "TOP/UNDERWEAR": "bottoms", + "TOP/SKIRT": "bottoms", + "TOP/UNIFORM": "tops", + "TOP/SHIRT": "tops", + "TOP/SWEATER": "tops", + "TOP/TUTA": "all-body", + "TOP/TEE": "tops", + "TOP/TUNIC": "tops", + "TUTA/OVERALL": "all-body", + "TUTA/TWIN SET": "all-body", + "TUTA/TUTA": "all-body" +} \ No newline at end of file diff --git a/app/service/outfit_matcher/dataset.py b/app/service/outfit_matcher/dataset.py new file mode 100644 index 0000000..4718688 --- /dev/null +++ b/app/service/outfit_matcher/dataset.py @@ -0,0 +1,141 @@ +import json +import random +import itertools +import difflib +from copy import deepcopy + +from app.core.config import FASHION_CATEGORIES, FASHION_CATEGORIES_MAPPING + + +# Helper function to calculate the edit distance similarity between two file names +def sim_score(a, b): + return difflib.SequenceMatcher(None, a, b).ratio() + + +class FashionDataset(object): + fashion_categories = json.load(open(FASHION_CATEGORIES, "r")) + fashion_categories_mapping = json.load(open(FASHION_CATEGORIES_MAPPING, "r")) + + def __init__(self, item_metadata): + self.item_metadat = item_metadata + self.item2cate = self.get_item2cate(item_metadata) + self.cate2item = self.get_cate2item(item_metadata) + self.cate2num = {k: len(v) for k, v in self.cate2item.items()} + + # def generate_outfit(self, query_item, topk, max_outfits): + # query_item["mapped_cate"] = self.fashion_categories_mapping[query_item["semantic_category"]] + # possible_outfits = self.count_possible(query_item["mapped_cate"]) + # + # if possible_outfits < topk: + # raise ValueError(f"Cannot generate more than {topk} outfits!") + # + # outfit_list = self.get_possible_outfit(query_item) + # if possible_outfits > max_outfits: + # outfit_list = random.sample(outfit_list, max_outfits) + # return outfit_list + + def count_possible(self, given_cate): + possible = 0 + if given_cate == 'tops': + if self.cate2num['outerwear'] == 0: + possible = self.cate2num['bottoms'] + else: + possible = self.cate2num['bottoms'] * self.cate2num['outerwear'] + elif given_cate == 'bottoms': + if self.cate2num['outerwear'] == 0: + possible = self.cate2num['tops'] + else: + possible = self.cate2num['tops'] * self.cate2num['outerwear'] + elif given_cate == 'outerwear': + possible = self.cate2num['tops'] * self.cate2num['bottoms'] + self.cate2num['all-body'] + elif given_cate == 'all-body': + possible = self.cate2num['outerwear'] + return possible + + def generate_outfit(self, query_item, topk, max_outfits): + query_item["mapped_cate"] = self.fashion_categories_mapping[query_item["semantic_category"]] + given_cate = query_item["mapped_cate"] + + if given_cate == 'tops' or given_cate == "bottoms": + complementary_cate = "bottoms" if given_cate == "tops" else "tops" + # check bottom num + if complementary_cate not in self.cate2num.keys() or not self.cate2num[complementary_cate]: + raise ValueError(f"Not enough {complementary_cate} available to generate outfits.") + + complementary_items = deepcopy(self.cate2item[complementary_cate]) + sim_scores = [sim_score(item["item_name"], query_item["item_name"]) for item in complementary_items] + outfit_list = [] + used_items = set() + + while len(outfit_list) < max_outfits: + if not complementary_items: + break + + # 根据权重从bottoms中选择一个元素 + item_index = random.choices(range(len(complementary_items)), weights=sim_scores)[0] + item = complementary_items.pop(item_index) + sim_scores.pop(item_index) + + if item["item_name"] not in used_items: + used_items.add(item["item_name"]) + outfit = [query_item, item] + outfit_list.append(tuple(outfit)) + if "outerwear" in self.cate2item.keys(): + # 20% chance to include an outerwear + if self.cate2num['outerwear'] > 0 and random.random() < 0.2: + outerwear = random.choice(self.cate2item['outerwear']) + outfit.append(outerwear) + outfit_list.append(tuple(outfit)) + if len(outfit_list) < topk: + raise ValueError(f"Cannot generate more than {topk} outfits!") + + return outfit_list + elif given_cate == 'outerwear': + top_bottom_combination = [(x[0], x[1]) for x in + itertools.product(self.cate2item['tops'], self.cate2item['bottoms'])] + sim_scores = [sim_score(x[0]["item_name"], x[1]["item_name"]) for x in top_bottom_combination] + outfit_list = [] + used_items = set() + + while len(outfit_list) < max_outfits: + if not top_bottom_combination: + break + + # 根据权重从top bottom的组合中选择一个,根据top和bottom之间的文件名相似度选择 + top_bottom_index = random.choices(range(len(top_bottom_combination)), weights=sim_scores)[0] + top_bottom = top_bottom_combination.pop(top_bottom_index) + sim_scores.pop(top_bottom_index) + + top_name, bottom_name = top_bottom[0]["item_name"], top_bottom[1]["item_name"] + if top_name + bottom_name not in used_items: + used_items.add(top_name + bottom_name) + outfit = [query_item] + list(top_bottom) + outfit_list.append(tuple(outfit)) + + if len(outfit_list) < topk: + raise ValueError(f"Cannot generate more than {topk} outfits!") + + return outfit_list + elif given_cate == 'all-body': + outfit_list = [(query_item, x) for x in self.cate2item['outerwear']] + return outfit_list + + def get_item2cate(self, item_metadata): + item2cate = {} + for metadata in item_metadata: + cate = metadata["semantic_category"] + mapped_cate = self.fashion_categories_mapping[cate] + item2cate[metadata["item_name"]] = mapped_cate + return item2cate + + def get_cate2item(self, item_metadata): + cate2item = {} + for metadata in item_metadata: + cate = metadata["semantic_category"] + mapped_cate = self.fashion_categories_mapping[cate] + metadata["mapped_cate"] = mapped_cate + if mapped_cate not in cate2item.keys(): + cate2item[mapped_cate] = [metadata] + else: + cate2item[mapped_cate].append(metadata) + return cate2item diff --git a/app/service/outfit_matcher/foco.py b/app/service/outfit_matcher/foco.py new file mode 100644 index 0000000..f2f40fc --- /dev/null +++ b/app/service/outfit_matcher/foco.py @@ -0,0 +1,251 @@ +import operator +from numba import jit +import numpy as np +from skimage import transform, color + + +@jit(nopython=True) +def h_unit(h): + """ + The unit value (1-15) of hue + """ + for i, u in [(0, 1), (14, 2), (33, 3), (44, 4), (62, 5), (88, 6), (165, 7), (194, 8), (219, 9), (241, 10), + (266, 11), (292, 12), (307, 13), (327, 14), (344, 15), (360, 1)]: + if h <= i: + return u + return 0 + + +@jit(nopython=True) +def s_unit(s): + """ + The unit value (1-8) of saturation + """ + for i, u in [(0, 1), (5, 1), (10, 2), (14, 3), (34, 4), (53, 5), (63, 6), (80, 7), (100, 8)]: + if s <= i: + return u + return 0 + + +@jit(nopython=True) +def b_unit(b): + """ + The unit value (1-6) of brightness + """ + for i, u in [(0, 1), (20, 1), (39, 2), (55, 3), (72, 4), (90, 5), (100, 6)]: + if b <= i: + return u + return 0 + + +@jit(nopython=True) +def encode_foco(hsb): + h, s, b = hsb + theta = (h - 1) / 15 * np.pi * 2 + return np.array([np.cos(theta), np.sin(theta), (s - 1) / 7, (b - 1) / 5]) + + +@jit(nopython=True) +def is_white(hsb_unit): + """ + Whether an hsb color unit is white + """ + _, s, b = hsb_unit + return s == 1 and b == 6 + + +@jit(nopython=True) +def is_rice(hsb_unit): + """ + Whether an hsb color unit is rice + """ + h, s, b = hsb_unit + return h in [3, 4, 5] and s in [2, 3, 4] and b in [5, 6] + + +@jit(nopython=True) +def is_blue_netrual(hsb_unit): + """ + Whether an hsb color is blue netrual + """ + h, s, b = hsb_unit + return h in [9, 10] and s in [2, 3, 4, 5, 6] and b in [2, 3, 4] + + +@jit(nopython=True) +def is_pastel(hsb_unit): + """ + Whether an hsb color unit is pastel + """ + _, s, b = hsb_unit + return s == 1 and b in [4, 5] + + +@jit(nopython=True) +def is_black(hsb_unit): + """ + Whether an hsb color unit is black + """ + _, _, b = hsb_unit + return b == 1 + + +@jit(nopython=True) +def is_gray(hsb_unit): + """ + Whether an hsb color unit is gray + """ + _, s, b = hsb_unit + return s == 1 and b in [2, 3] + + +@jit(nopython=True) +def foco_merge(hsb_foco): + """ + Merge multiple black/white/gray foco unit to one + """ + if is_white(hsb_foco): return (1, 1, 6) + if is_black(hsb_foco): return (1, 1, 1) + if is_gray(hsb_foco): return (1, hsb_foco[1], hsb_foco[2]) + return hsb_foco[0], hsb_foco[1], hsb_foco[2] + + +def color_foco(img): + """ + transform an hsb image to color units + + input: (height, width, 3) array + output: an uint8 array with same shape + """ + img = img.copy() + h, w, c = img.shape + # print(h, w, c) + assert c == 3 + for i in range(h): + for j in range(w): + img[i, j, 0] = h_unit(img[i, j, 0]) + img[i, j, 1] = s_unit(img[i, j, 1]) + img[i, j, 2] = b_unit(img[i, j, 2]) + return img.astype(np.uint8) + + +@jit(nopython=True) +def is_ignore(hsb, eps=1): + """ + Ignore white background + """ + _, s, b = hsb + return s < eps and b > 100 - eps + + +@jit(nopython=True) +def ignore_list(hsb_img, ignore=is_ignore): + """ + Given an hsb image (ranges 360, 100, 100), output a dict of ignored pixel locations + + Input: + is_ignore: a lambda that determines whether a hsb pixel should be ignored + Output: + set of ignore pixel coordinate + """ + h, w, _ = hsb_img.shape + ign = set() + for i in range(h): + for j in range(w): + if ignore(hsb_img[i, j, :]): + ign.add((i, j)) + return ign + + +def color_histogram(img, merge=None, threshold=None, ignore=None): + """ + color histogram of an image + """ + h, w, c = img.shape + # print(h, w, c) + if merge is None: + merge = foco_merge + if threshold is None: + threshold = h + w + if ignore is None: + ignore = {} + hist = {} + assert c == 3 + for i in range(h): + for j in range(w): + if (i, j) in ignore: + continue + k = merge(tuple(img[i, j])) + if k in hist: + hist[k] += 1 + else: + hist[k] = 1 + + return {k: v for k, v in hist.items() if v > threshold} + + +def main_colors(img, n=1, frequency=False, hist=False, merge=True): + """ + return the list of main colors of a hsb image. + + img: a hsb image + n: number of main colors to return + frequency: whether return freqency + """ + if hist: + hist = img + else: + hist = color_histogram(color_foco(img), ignore=ignore_list(img)) + if merge: + newhist = {} + oldk = {} + ks = sorted(hist.items(), key=operator.itemgetter(1), reverse=True) + # print(ks) + for k, v in ks: + if k in oldk: + continue + near = {kk: hist[kk] for kk in hist if np.abs(np.sum(np.abs(np.array(k) - np.array(kk)))) <= 2} + # print(near) + newhist[k] = sum(v for k, v in near.items()) + for kk in near: + oldk[kk] = None + hist.pop(kk) + hist = newhist + items = sorted(hist.items(), key=operator.itemgetter(1), reverse=True)[:n] + return items if frequency else [k for k, v in items] + + +def rgb2hsb(rgb_img): + """ + Transform an rgb image (unit 8 np array, ranges 255, 255, 255) to hsb (float np array, ranges 360, 100, 100) + """ + rgb_img = np.array(rgb_img).astype('uint8') + return color.rgb2hsv(rgb_img) * np.array([360, 100, 100]).reshape(1, 1, 3) + + +def extract_main_colors(img, n=5): + """ + Args: + img: Numpy array (height, width, channel) + n: number of main colors wants to extract + + return: + Features of main colors: Numpy array (n, 5) + """ + # Convert to hsb + img = img.astype("uint8") + height = img.shape[0] + width = img.shape[1] + ratio = (512 * 512) / (height * width) + if ratio < 1.0: + img = transform.resize(img, (int(height * ratio), int(width * ratio))) + img = color.rgb2hsv(img) * np.array([360, 100, 100]).reshape(1, 1, 3) + + # Extract main colors + cf = main_colors(img, n, frequency=True) + s = sum(f for c, f in cf) + features = np.zeros((n, 5)) + for i, (c, f) in enumerate(cf): + features[i, :4] = encode_foco(c) + features[i, 4] = f / s + return features diff --git a/app/service/outfit_matcher/outfit_evaluator.py b/app/service/outfit_matcher/outfit_evaluator.py new file mode 100644 index 0000000..0392414 --- /dev/null +++ b/app/service/outfit_matcher/outfit_evaluator.py @@ -0,0 +1,338 @@ +import io +from PIL import Image +import cv2 +import numpy as np +import tritonclient.http as httpclient +import torch +from matplotlib import pyplot as plt, image as mpimg +from minio import Minio +from torchvision import transforms + +from app.core.config import * +from app.service.outfit_matcher.foco import extract_main_colors +from app.service.utils.decorator import RunTime + + +class OutfitMatcher(object): + def __init__(self): + self.tritonclient = httpclient.InferenceServerClient(url=f"{OM_TRITON_IP}:{OM_TRITON_PORT}") + self.minio_client = Minio( + f"{MINIO_IP}:{MINIO_PORT}", + access_key=MINIO_ACCESS, + secret_key=MINIO_SECRET, + secure=MINIO_SECURE) + + @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 + + @RunTime + 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] # 这五个的分数 + + # 是否画出来 + if output_path: + # 设置子图的行列数 + 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() + else: + return outfits, scores.numpy().flatten().tolist() + + +class OutfitMatcherHon(OutfitMatcher): + def __init__(self): + super().__init__() + + def load_image(self, img_path): + try: + # 从 MinIO 中获取对象(图像文件) + image_data = self.minio_client.get_object(img_path.split("/", 1)[0], img_path.split("/", 1)[1]) + + # 读取图像数据并转换为 PIL 图像对象 + pil_image = Image.open(io.BytesIO(image_data.read())) + + # 将 PIL 图像转换为 NumPy 数组 + image_array = np.array(pil_image) + + return image_array + except Exception as e: + print(f"An error occurred: {e}") + return None + # 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 + + def preprocess(self, outfits): + outfit_images = [] + 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) + + +class OutfitMaterTypeAware(OutfitMatcher): + base_fashion_categories = [ + 'accessories', 'all-body', 'bags', 'bottoms', 'hats', 'jewellery', + 'outerwear', 'scarves', 'shoes', 'sunglasses', 'tops' + ] + + @RunTime + def __init__(self): + super().__init__() + + @RunTime + # TODO 用多线程读图片 + def load_image(self, img_path): + try: + # 从 MinIO 中获取对象(图像文件) + image_data = self.minio_client.get_object(img_path.split("/", 1)[0], img_path.split("/", 1)[1]) + + # 读取图像数据并转换为 PIL 图像对象 + pil_image = Image.open(io.BytesIO(image_data.data)).convert("RGB") + + # 将 PIL 图像转换为 NumPy 数组 + # image_array = np.array(pil_image) + + return pil_image + except Exception as e: + print(f"An error occurred: {e}") + return None + # 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) + """ + 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): + 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) + category = self.base_fashion_categories.index(item["mapped_cate"]) + 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 + + @RunTime + def get_result(self, 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 + """ + image, category, mask = self.preprocess(outfits) + client = httpclient.InferenceServerClient(url=f"{OM_TRITON_IP}:{OM_TRITON_PORT}") + # 输入集 + 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), + httpclient.InferRequestedOutput("output__1", 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")) # Shape (N, 1) + features = torch.from_numpy(results.as_numpy("output__1")) # Shape (N, 64) + + return scores, features diff --git a/app/service/outfit_matcher/service.py b/app/service/outfit_matcher/service.py new file mode 100644 index 0000000..59961cb --- /dev/null +++ b/app/service/outfit_matcher/service.py @@ -0,0 +1,37 @@ +import json +import os +from pprint import pprint + +from app.service.outfit_matcher.dataset import FashionDataset +from app.service.outfit_matcher.outfit_evaluator import OutfitMaterTypeAware + +if __name__ == '__main__': + with open("./test_param/recommendation_test.json", "r") as f: + param = json.load(f) + fashion_dataset = FashionDataset(param["database"]) + service = OutfitMaterTypeAware() + best_list = [] + bad_list = [] + for item in param["query"]: + outfits = fashion_dataset.generate_outfit(item, param["topk"], param["max_outfits"]) + scores, features = service.get_result(outfits) + # save features + + # 链接milvus + + # 存入数据库 + # 关闭链接 + + # print(scores) + # print(len(scores)) + best_outfits, best_scores = service.visualize(outfits, scores, param["topk"], best=True, + # output_path=os.path.join(r"E:\workspace\outfit_matcher\2024 SS Outfit", f"{item['item_name']}_best_{param['topk']}.png") + ) + bad_outfits, bad_scores = service.visualize(outfits, scores, param["topk"], best=False, + # output_path=os.path.join(r"E:\workspace\outfit_matcher\2024 SS Outfit", f"{item['item_name']}_worst_{param['topk']}.png") + ) + best_list.append({"best_outfits": best_outfits, "best_scores": best_scores}) + bad_list.append({"bad_outfits": bad_outfits, "bad_scores": bad_scores}) + + pprint(best_list) + pprint(bad_list) diff --git a/app/service/outfit_matcher/test_param/recommendation_test.json b/app/service/outfit_matcher/test_param/recommendation_test.json new file mode 100644 index 0000000..6e6f624 --- /dev/null +++ b/app/service/outfit_matcher/test_param/recommendation_test.json @@ -0,0 +1,29 @@ +{ + "topk": 1, + "max_outfits": 100, + "is_best": true, + "query": [ + { + "item_name": "MWSS27212", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MWSS27212.jpg" + } + ], + "database": [ + { + "item_name": "MLSS27162", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MLSS27162.jpg" + }, + { + "item_name": "MKTS27017", + "semantic_category": "OUTERWEAR/WINDBREAKER", + "image_path": "test/2024 SS/MKTS27017.jpg" + }, + { + "item_name": "MLSS27160", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MLSS27160.jpg" + } + ] +} \ No newline at end of file diff --git a/app/service/outfit_matcher/test_param/recommendation_test_pkc.json b/app/service/outfit_matcher/test_param/recommendation_test_pkc.json new file mode 100644 index 0000000..9290de8 --- /dev/null +++ b/app/service/outfit_matcher/test_param/recommendation_test_pkc.json @@ -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" + } + ] +} \ No newline at end of file diff --git a/app/service/outfit_matcher/test_param/recommendation_test_zcr.json b/app/service/outfit_matcher/test_param/recommendation_test_zcr.json new file mode 100644 index 0000000..8a29976 --- /dev/null +++ b/app/service/outfit_matcher/test_param/recommendation_test_zcr.json @@ -0,0 +1,849 @@ +{ + "topk": 1, + "max_outfits": 10, + "is_best": true, + "query": [ + { + "item_name": "MKTS27047", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27047.jpg" + }, + { + "item_name": "MKTS27028", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MKTS27028.jpg" + }, + { + "item_name": "MSE_58057", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_58057.jpg" + }, + { + "item_name": "MSE_58107", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58107.jpg" + }, + { + "item_name": "MSE_58495", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58495.jpg" + } + ], + "database": [ + { + "item_name": "MKTS27017", + "semantic_category": "OUTERWEAR/WINDBREAKER", + "image_path": "test/2024 SS/MKTS27017.jpg" + }, + { + "item_name": "MKTS27047", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27047.jpg" + }, + { + "item_name": "MKTS27000", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MKTS27000.jpg" + }, + { + "item_name": "MKTS27001", + "semantic_category": "BOTTOM/SHORTS", + "image_path": "test/2024 SS/MKTS27001.jpg" + }, + { + "item_name": "MZOS27178", + "semantic_category": "KNIT/CARDIGAN", + "image_path": "test/2024 SS/MZOS27178.jpg" + }, + { + "item_name": "MZOS27179", + "semantic_category": "KNIT/KNIT TOP", + "image_path": "test/2024 SS/MZOS27179.jpg" + }, + { + "item_name": "MWSS27184", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MWSS27184.jpg" + }, + { + "item_name": "MWSS27191", + "semantic_category": "OUTERWEAR/TWIN SET", + "image_path": "test/2024 SS/MWSS27191.jpg" + }, + { + "item_name": "MWSS27193", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MWSS27193.jpg" + }, + { + "item_name": "MWSS27195", + "semantic_category": "OUTERWEAR/GILET", + "image_path": "test/2024 SS/MWSS27195.jpg" + }, + { + "item_name": "MWSS27200", + "semantic_category": "KNIT/VEST", + "image_path": "test/2024 SS/MWSS27200.jpg" + }, + { + "item_name": "MWSS27209", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MWSS27209.jpg" + }, + { + "item_name": "MWSS27210", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MWSS27210.jpg" + }, + { + "item_name": "MWSS27211", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MWSS27211.jpg" + }, + { + "item_name": "MWSS27212", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MWSS27212.jpg" + }, + { + "item_name": "MKTS27008", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MKTS27008.jpg" + }, + { + "item_name": "MKTS27009", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MKTS27009.jpg" + }, + { + "item_name": "MKTS27010", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MKTS27010.jpg" + }, + { + "item_name": "MKTS27012", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MKTS27012.jpg" + }, + { + "item_name": "MKTS27013", + "semantic_category": "BOTTOM/SHORTS", + "image_path": "test/2024 SS/MKTS27013.jpg" + }, + { + "item_name": "MKTS27014", + "semantic_category": "ONE PIECE/TWIN SET", + "image_path": "test/2024 SS/MKTS27014.jpg" + }, + { + "item_name": "MKTS27015", + "semantic_category": "OUTERWEAR/GILET", + "image_path": "test/2024 SS/MKTS27015.jpg" + }, + { + "item_name": "MKTS27016", + "semantic_category": "BOTTOM/SHORTS", + "image_path": "test/2024 SS/MKTS27016.jpg" + }, + { + "item_name": "MKTS27027", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MKTS27027.jpg" + }, + { + "item_name": "MKTS27028", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MKTS27028.jpg" + }, + { + "item_name": "MKTS27029", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27029.jpg" + }, + { + "item_name": "MKTS27030", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27030.jpg" + }, + { + "item_name": "MKTS27031", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MKTS27031.jpg" + }, + { + "item_name": "MKTS27034", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MKTS27034.jpg" + }, + { + "item_name": "MKTS27035", + "semantic_category": "ONE PIECE/TWIN SET", + "image_path": "test/2024 SS/MKTS27035.jpg" + }, + { + "item_name": "MKTS27038", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MKTS27038.jpg" + }, + { + "item_name": "MKTS27039", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MKTS27039.jpg" + }, + { + "item_name": "MKTS27040", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MKTS27040.jpg" + }, + { + "item_name": "MKTS27045", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27045.jpg" + }, + { + "item_name": "MKTS27046", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MKTS27046.jpg" + }, + { + "item_name": "MKTS27050", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MKTS27050.jpg" + }, + { + "item_name": "MKTS27059", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MKTS27059.jpg" + }, + { + "item_name": "MKTS27061", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MKTS27061.jpg" + }, + { + "item_name": "MKTS27062", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MKTS27062.jpg" + }, + { + "item_name": "MKTS27066", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27066.jpg" + }, + { + "item_name": "MKTS27067", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MKTS27067.jpg" + }, + { + "item_name": "MKTS27068", + "semantic_category": "ONE PIECE/TWIN SET", + "image_path": "test/2024 SS/MKTS27068.jpg" + }, + { + "item_name": "MKTS27002", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MKTS27002.jpg" + }, + { + "item_name": "MKTS27003", + "semantic_category": "OUTERWEAR/GILET", + "image_path": "test/2024 SS/MKTS27003.jpg" + }, + { + "item_name": "MKTS27004", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MKTS27004.jpg" + }, + { + "item_name": "MKTS27011", + "semantic_category": "TOP/VEST", + "image_path": "test/2024 SS/MKTS27011.jpg" + }, + { + "item_name": "MKTS27018", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MKTS27018.jpg" + }, + { + "item_name": "MKTS27019", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MKTS27019.jpg" + }, + { + "item_name": "MKTS27058", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MKTS27058.jpg" + }, + { + "item_name": "MLSS27101", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27101.jpg" + }, + { + "item_name": "MLSS27102", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27102.jpg" + }, + { + "item_name": "MLSS27103", + "semantic_category": "OUTERWEAR/GILET", + "image_path": "test/2024 SS/MLSS27103.jpg" + }, + { + "item_name": "MLSS27104", + "semantic_category": "BOTTOM/SHORTS", + "image_path": "test/2024 SS/MLSS27104.jpg" + }, + { + "item_name": "MLSS27107", + "semantic_category": "JEANS/JEANS", + "image_path": "test/2024 SS/MLSS27107.jpg" + }, + { + "item_name": "MLSS27109", + "semantic_category": "JEANS/JEANS JACKET", + "image_path": "test/2024 SS/MLSS27109.jpg" + }, + { + "item_name": "MLSS27110", + "semantic_category": "JEANS/JEANS JACKET", + "image_path": "test/2024 SS/MLSS27110.jpg" + }, + { + "item_name": "MLSS27111", + "semantic_category": "JEANS/JEANS PANTS", + "image_path": "test/2024 SS/MLSS27111.jpg" + }, + { + "item_name": "MLSS27112", + "semantic_category": "JEANS/JEANS PANTS", + "image_path": "test/2024 SS/MLSS27112.jpg" + }, + { + "item_name": "MLSS27113", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27113.jpg" + }, + { + "item_name": "MLSS27119", + "semantic_category": "JEANS/JEANS SKIRT", + "image_path": "test/2024 SS/MLSS27119.jpg" + }, + { + "item_name": "MLSS27122", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27122.jpg" + }, + { + "item_name": "MLSS27123", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MLSS27123.jpg" + }, + { + "item_name": "MLSS27128", + "semantic_category": "JEANS/JEANS JACKET", + "image_path": "test/2024 SS/MLSS27128.jpg" + }, + { + "item_name": "MLSS27129", + "semantic_category": "JEANS/JEANS SHORTS", + "image_path": "test/2024 SS/MLSS27129.jpg" + }, + { + "item_name": "MLSS27132", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MLSS27132.jpg" + }, + { + "item_name": "MLSS27133", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MLSS27133.jpg" + }, + { + "item_name": "MLSS27136", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27136.jpg" + }, + { + "item_name": "MLSS27137", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MLSS27137.jpg" + }, + { + "item_name": "MLSS27140", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MLSS27140.jpg" + }, + { + "item_name": "MLSS27141", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MLSS27141.jpg" + }, + { + "item_name": "MLSS27142", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MLSS27142.jpg" + }, + { + "item_name": "MLSS27145", + "semantic_category": "OUTERWEAR/WINDBREAKER", + "image_path": "test/2024 SS/MLSS27145.jpg" + }, + { + "item_name": "MLSS27146", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MLSS27146.jpg" + }, + { + "item_name": "MLSS27147", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MLSS27147.jpg" + }, + { + "item_name": "MLSS27148", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MLSS27148.jpg" + }, + { + "item_name": "MLSS27149", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MLSS27149.jpg" + }, + { + "item_name": "MLSS27150", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MLSS27150.jpg" + }, + { + "item_name": "MLSS27152", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MLSS27152.jpg" + }, + { + "item_name": "MLSS27154", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MLSS27154.jpg" + }, + { + "item_name": "MLSS27156", + "semantic_category": "TOP/VEST", + "image_path": "test/2024 SS/MLSS27156.jpg" + }, + { + "item_name": "MLSS27157", + "semantic_category": "OUTERWEAR/WINDBREAKER", + "image_path": "test/2024 SS/MLSS27157.jpg" + }, + { + "item_name": "MLSS27159", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MLSS27159.jpg" + }, + { + "item_name": "MLSS27160", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MLSS27160.jpg" + }, + { + "item_name": "MLSS27161", + "semantic_category": "KNIT/CARDIGAN", + "image_path": "test/2024 SS/MLSS27161.jpg" + }, + { + "item_name": "MLSS27162", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MLSS27162.jpg" + }, + { + "item_name": "MLSS27167", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MLSS27167.jpg" + }, + { + "item_name": "MLSS27173", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MLSS27173.jpg" + }, + { + "item_name": "MLSS27174", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MLSS27174.jpg" + }, + { + "item_name": "MLSS27175", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MLSS27175.jpg" + }, + { + "item_name": "MLSS27176", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MLSS27176.jpg" + }, + { + "item_name": "MKTS27073", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MKTS27073.jpg" + }, + { + "item_name": "MLSS27226", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MLSS27226.jpg" + }, + { + "item_name": "MPO_SP7685", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MPO_SP7685.jpg" + }, + { + "item_name": "MPO_SP7686", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7686.jpg" + }, + { + "item_name": "MPO_SP7687", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7687.jpg" + }, + { + "item_name": "MPO_SP7692", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MPO_SP7692.jpg" + }, + { + "item_name": "MPO_SP7693", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MPO_SP7693.jpg" + }, + { + "item_name": "MPO_SP7694", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MPO_SP7694.jpg" + }, + { + "item_name": "MPO_SP7696", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MPO_SP7696.jpg" + }, + { + "item_name": "MPO_SP7697", + "semantic_category": "JEANS/JEANS", + "image_path": "test/2024 SS/MPO_SP7697.jpg" + }, + { + "item_name": "MPO_SP7704", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MPO_SP7704.jpg" + }, + { + "item_name": "MPO_SP7705", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MPO_SP7705.jpg" + }, + { + "item_name": "MPO_SP7706", + "semantic_category": "JEANS/JEANS JACKET", + "image_path": "test/2024 SS/MPO_SP7706.jpg" + }, + { + "item_name": "MPO_SP7711", + "semantic_category": "TOP/VEST", + "image_path": "test/2024 SS/MPO_SP7711.jpg" + }, + { + "item_name": "MPO_SP7712", + "semantic_category": "TOP/TANK", + "image_path": "test/2024 SS/MPO_SP7712.jpg" + }, + { + "item_name": "MPO_SP7717", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MPO_SP7717.jpg" + }, + { + "item_name": "MPO_SP7722", + "semantic_category": "TOP/TOP", + "image_path": "test/2024 SS/MPO_SP7722.jpg" + }, + { + "item_name": "MPO_SP7723", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MPO_SP7723.jpg" + }, + { + "item_name": "MPO_SP7726", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7726.jpg" + }, + { + "item_name": "MPO_SP7729", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7729.jpg" + }, + { + "item_name": "MPO_SP7731", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MPO_SP7731.jpg" + }, + { + "item_name": "MPO_SP7732", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7732.jpg" + }, + { + "item_name": "MPO_SP7735", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MPO_SP7735.jpg" + }, + { + "item_name": "MSE_58197", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58197.jpg" + }, + { + "item_name": "MSE_58198", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58198.jpg" + }, + { + "item_name": "MSE_58199", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MSE_58199.jpg" + }, + { + "item_name": "MSE_58112", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58112.jpg" + }, + { + "item_name": "MSE_58114", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58114.jpg" + }, + { + "item_name": "MSE_58241", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58241.jpg" + }, + { + "item_name": "MSE_57987", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MSE_57987.jpg" + }, + { + "item_name": "MSE_57988", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_57988.jpg" + }, + { + "item_name": "MSE_58203", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_58203.jpg" + }, + { + "item_name": "MSE_58106", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MSE_58106.jpg" + }, + { + "item_name": "MSE_58107", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58107.jpg" + }, + { + "item_name": "MSE_58132", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58132.jpg" + }, + { + "item_name": "MSE_58133", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58133.jpg" + }, + { + "item_name": "MSE_58057", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_58057.jpg" + }, + { + "item_name": "MSE_58058", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MSE_58058.jpg" + }, + { + "item_name": "MSE_58222", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MSE_58222.jpg" + }, + { + "item_name": "MSE_58317", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58317.jpg" + }, + { + "item_name": "MSE_58045", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58045.jpg" + }, + { + "item_name": "MSE_58275", + "semantic_category": "JEANS/JEANS DRESS", + "image_path": "test/2024 SS/MSE_58275.jpg" + }, + { + "item_name": "MSE_58276", + "semantic_category": "JEANS/JEANS JACKET", + "image_path": "test/2024 SS/MSE_58276.jpg" + }, + { + "item_name": "MSE_58277", + "semantic_category": "JEANS/JEANS SKIRT", + "image_path": "test/2024 SS/MSE_58277.jpg" + }, + { + "item_name": "MSE_58183", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58183.jpg" + }, + { + "item_name": "MSE_58184", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58184.jpg" + }, + { + "item_name": "MSE_58185", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58185.jpg" + }, + { + "item_name": "MSE_58188", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MSE_58188.jpg" + }, + { + "item_name": "MSE_54385", + "semantic_category": "BOTTOM/PANTS", + "image_path": "test/2024 SS/MSE_54385.jpg" + }, + { + "item_name": "MSE_56720", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_56720.jpg" + }, + { + "item_name": "MSE_58174", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MSE_58174.jpg" + }, + { + "item_name": "MSE_58044", + "semantic_category": "OUTERWEAR/JACKET", + "image_path": "test/2024 SS/MSE_58044.jpg" + }, + { + "item_name": "MSE_58361", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58361.jpg" + }, + { + "item_name": "MSE_58495", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58495.jpg" + }, + { + "item_name": "MSE_58536", + "semantic_category": "ACCESSORY/BAG", + "image_path": "test/2024 SS/MSE_58536.jpg" + }, + { + "item_name": "MSE_58653", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58653.jpg" + }, + { + "item_name": "MSE_58287", + "semantic_category": "BOTTOM/SHORTS", + "image_path": "test/2024 SS/MSE_58287.jpg" + }, + { + "item_name": "MSE_58289", + "semantic_category": "OUTERWEAR/BLAZER", + "image_path": "test/2024 SS/MSE_58289.jpg" + }, + { + "item_name": "MSE_58323", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58323.jpg" + }, + { + "item_name": "MSE_58421", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58421.jpg" + }, + { + "item_name": "MSE_58451", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58451.jpg" + }, + { + "item_name": "MSE_58473", + "semantic_category": "KNIT/KNIT TOP", + "image_path": "test/2024 SS/MSE_58473.jpg" + }, + { + "item_name": "MSE_58498", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58498.jpg" + }, + { + "item_name": "MSE_58499", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58499.jpg" + }, + { + "item_name": "MSE_58510", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58510.jpg" + }, + { + "item_name": "MSE_58516", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58516.jpg" + }, + { + "item_name": "MSE_58518", + "semantic_category": "BOTTOM/SKIRT", + "image_path": "test/2024 SS/MSE_58518.jpg" + }, + { + "item_name": "MSE_58530", + "semantic_category": "ONE PIECE/DRESS", + "image_path": "test/2024 SS/MSE_58530.jpg" + }, + { + "item_name": "MSE_58540", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58540.jpg" + }, + { + "item_name": "MSE_58547", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MSE_58547.jpg" + }, + { + "item_name": "MSE_58618", + "semantic_category": "TOP/BLOUSE", + "image_path": "test/2024 SS/MSE_58618.jpg" + }, + { + "item_name": "MSE_58655", + "semantic_category": "TOP/SHIRT", + "image_path": "test/2024 SS/MSE_58655.jpg" + }, + { + "item_name": "MSE_58658", + "semantic_category": "TOP/TEE", + "image_path": "test/2024 SS/MSE_58658.jpg" + } + ] +} \ No newline at end of file diff --git a/app/service/outfit_matcher/test_param/test.json b/app/service/outfit_matcher/test_param/test.json new file mode 100644 index 0000000..a62fd97 --- /dev/null +++ b/app/service/outfit_matcher/test_param/test.json @@ -0,0 +1,19 @@ +{ + "topk": 1, + "max_outfits": 5, + "is_best": true, + "query": [ + { + "image_path": "mi-tu/26/BOTTOM/PANTS/MKTS27000_0BLK.jpg/3f4676db-98a1-44d4-947f-9d1f59828629.jpg", + "item_name": "MKTS27000", + "semantic_category": "BOTTOM/PANTS" + } + ], + "database": [ + { + "image_path": "mi-tu/26/TOP/BLOUSE/MKTS27002_0WHT.jpg/131cc29e-8f70-4134-a0e8-82f826b00058.jpg", + "item_name": "MKTS27002", + "semantic_category": "TOP/BLOUSE" + } + ] +} \ No newline at end of file diff --git a/app/service/similar_match/__init__.py b/app/service/similar_match/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/service/similar_match/service.py b/app/service/similar_match/service.py new file mode 100644 index 0000000..34495d9 --- /dev/null +++ b/app/service/similar_match/service.py @@ -0,0 +1,114 @@ +import io +import json +from pprint import pprint + +import numpy as np +import tritonclient.http as httpclient +from PIL import Image +from minio import Minio +from pymilvus import MilvusClient + +from app.core.config import * +from torchvision import transforms + +from app.schemas.similar_match import SimilarMatchMItem +from app.service.utils.decorator import RunTime + + +class SimilarMatch: + def __init__(self, request_data): + self.minio_client = Minio( + f"{MINIO_IP}:{MINIO_PORT}", + access_key=MINIO_ACCESS, + secret_key=MINIO_SECRET, + secure=MINIO_SECURE) + self.triton_client = httpclient.InferenceServerClient(url=f"{OM_TRITON_IP}:{OM_TRITON_PORT}") + self.image_path = request_data.image_path + self.result_number = request_data.result_number + self.features = self.get_features() + + @staticmethod + def resize_image(img): + """ + 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 load_image(self, img_path): + # 从 MinIO 中获取对象(图像文件) + image_data = self.minio_client.get_object(img_path.split("/", 1)[0], img_path.split("/", 1)[1]) + # 读取图像数据并转换为 PIL 图像对象 + pil_image = Image.open(io.BytesIO(image_data.data)).convert("RGB") + # 将 PIL 图像转换为 NumPy 数组 + # image_array = np.array(pil_image) + return pil_image + + def preprocess(self, img_path): + image = self.load_image(img_path) + image = self.resize_image(image) + image = np.stack([[image]], axis=0) + + category = np.stack([[1, 6]], axis=0) + + mask = np.zeros((1, 1), dtype=np.float32) + return image, category, mask + + def get_features(self): + image, category, mask = self.preprocess(self.image_path) + # 输入集 + 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), + httpclient.InferRequestedOutput("output__1", binary_data=True) + ] + results = self.triton_client.infer(model_name="outfit_matcher_type_aware", inputs=inputs, outputs=outputs) + # 推理 + # 取结果 + features = results.as_numpy("output__1") # Shape (N, 64) + return features + + @RunTime + def match_features(self): + # 连接milvus + # 连接milvus + client = MilvusClient(uri="http://10.1.1.240:19530", db_name="mixi") + try: + search_response = client.search( + collection_name="mixi_outfit", # Replace with the actual name of your collection + # Replace with your query vector + data=[self.features[0]], + limit=self.result_number, # Max. number of search results to return + output_fields=["id", "image_path"], # Search parameters + ) + return search_response + finally: + client.close() + + +if __name__ == '__main__': + request_data = SimilarMatchMItem(image_path="test/top/test_top1.jpg", result_number=10) + + service = SimilarMatch(request_data) + search_response = service.match_features() + response_data = [] + for response in search_response[0]: + response_data.append(response['entity']) + + pprint(response_data) diff --git a/app/service/utils/decorator.py b/app/service/utils/decorator.py new file mode 100644 index 0000000..2e563fc --- /dev/null +++ b/app/service/utils/decorator.py @@ -0,0 +1,15 @@ +import time +import logging + + +def RunTime(func): + def wrapper(*args, **kwargs): + t1 = time.time() + res = func(*args, **kwargs) + t2 = time.time() + if t2 - t1 > 0.05: + logging.info(f"function:【{func.__name__}】,runtime:【{str(t2 - t1)}】s") + print(f"function:【{func.__name__}】,runtime:【{str(t2 - t1)}】s") + return res + + return wrapper diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b3dfd4d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +version: "3" +services: + trinity_mixi: + image: "trinity_client_mixi:latest" + container_name: trinity_mixi + volumes: + - ./trinity_client_mixi:/trinity + ports: + - "10100:4562" \ No newline at end of file diff --git a/gunicorn_config.py b/gunicorn_config.py new file mode 100644 index 0000000..c85e8ad --- /dev/null +++ b/gunicorn_config.py @@ -0,0 +1,38 @@ +# 多进程 + +"""gunicorn+gevent 的配置文件""" + +# 预加载资源 +preload_app = True +# 绑定 ip + 端口 +bind = "0.0.0.0:4562" +# 进程数 = cup数量 * 2 + 1 +workers = 1 + +# 线程数 = cup数量 * 2 +threads = 2 + +# 等待队列最大长度,超过这个长度的链接将被拒绝连接 +backlog = 2048 + +# 工作模式--协程 +worker_class = "uvicorn.workers.UvicornWorker" + +# 最大客户客户端并发数量,对使用线程和协程的worker的工作有影响 +# 服务器配置设置的值 1200:中小型项目 上万并发: 中大型 +# 服务器硬件:宽带+数据库+内存 +# 服务器的架构:集群 主从 +worker_connections = 1200 + +# 进程名称 +proc_name = 'gunicorn.pid' +# 进程pid记录文件 +pidfile = 'app_run.log' +# 日志等级 +loglevel = 'info' +# 日志文件名 +logfile = 'info.log' +# 访问记录 +accesslog = 'access.log' +# 访问记录格式 +access_log_format = '%(h)s %(t)s %(U)s %(q)s' diff --git a/logging_env.py b/logging_env.py new file mode 100644 index 0000000..ce4e9da --- /dev/null +++ b/logging_env.py @@ -0,0 +1,51 @@ +from app.core.config import LOGS_PATH + +LOGGER_CONFIG_DICT = { + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "simple": {"format": "%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s"} + }, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "level": "DEBUG", + "formatter": "simple", + "stream": "ext://sys.stdout", + }, + "info_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "INFO", + "formatter": "simple", + "filename": LOGS_PATH, + "maxBytes": 10485760, + "backupCount": 50, + "encoding": "utf8", + }, + "error_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "ERROR", + "formatter": "simple", + "filename": LOGS_PATH, + "maxBytes": 10485760, + "backupCount": 20, + "encoding": "utf8", + }, + "debug_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "DEBUG", + "formatter": "simple", + "filename": LOGS_PATH, + "maxBytes": 10485760, + "backupCount": 50, + "encoding": "utf8", + }, + }, + "loggers": { + "my_module": {"level": "INFO", "handlers": ["console"], "propagate": "no"} + }, + "root": { + "level": "INFO", + "handlers": ["error_file_handler", "info_file_handler", "debug_file_handler", "console"], + }, +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..0eb1ed8aa87a511d859a46dc713c3dfa76dfe559 GIT binary patch literal 986 zcmZXTTTjA35QXR2#Q)HQ=W;6un)pkM59OwfP>?Ple_s90Y!`^8*`=M!nKNgGpYNSj zw&vN|$)0%z*0-(=IeojgJM24KT5WSXTF(2~g1uv{J$gjkqsMk_+GYgXgBd(#4szxB z!CtKNO0S-&3L`5nb>^U!WG;vfUU|cJprW`1$C-Jia;BW3jjG^M5hL~!>_Q&9uYq-C zAI>J{7UCQDii}-e`&4HO{57>I@}d^qiyqRVwgVV5q7uT`yB~P9oo5T9alf#2qIc!? zz%9j7{-DK=S|89@wYTUH^^Gi}!eVf%e-2+Mqv;$ke3cO^?(uxWcnP0y!>PcZrYp>j zSFFAJjQX|5$5~}j**HzQ!+J*PSfvf%v%Fao?m& X>S^fSQM+$vF!k>}!sNPh>bq~h$z_@Y literal 0 HcmV?d00001