From 8db1cb378012bcec23131712aac6833aca4dea29 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 15:30:35 +0000 Subject: [PATCH 01/18] Cleaned some commented code. --- skills/src/lasr_skills/describe_people.py | 57 ----------------------- 1 file changed, 57 deletions(-) diff --git a/skills/src/lasr_skills/describe_people.py b/skills/src/lasr_skills/describe_people.py index 1bbe83484..2cc2a5516 100755 --- a/skills/src/lasr_skills/describe_people.py +++ b/skills/src/lasr_skills/describe_people.py @@ -218,11 +218,6 @@ def execute(self, userdata): head_mask_data, head_mask_shape, head_mask_dtype = numpy2message(head_mask) full_frame = cv2_img.cv2_img_to_msg(img) - # features.extend(self.torch_face_features( - # full_frame, - # head_mask_data, head_mask_shape, head_mask_dtype, - # torso_mask_data, torso_mask_shape, torso_mask_dtype, - # ).detected_features) rst = self.torch_face_features( full_frame, @@ -230,58 +225,6 @@ def execute(self, userdata): torso_mask_data, torso_mask_shape, torso_mask_dtype, ).description - # # process part masks - # for (bodypix_mask, part) in zip(userdata.bodypix_masks, ['torso', 'head']): - # part_mask = np.array(bodypix_mask.mask).reshape( - # bodypix_mask.shape[0], bodypix_mask.shape[1]) - - # # filter out part for current person segmentation - # try: - # part_mask[mask_bin == 0] = 0 - # except Exception: - # rospy.logdebug('|> Failed to check {part} is visible') - # continue - - # if part_mask.any(): - # rospy.logdebug(f'|> Person has {part} visible') - # else: - # rospy.logdebug( - # f'|> Person does not have {part} visible') - # continue - - # # do colour processing on the torso - # if part == 'torso': - # try: - # features.append(FeatureWithColour("torso", [ - # ColourPrediction(colour, distance) - # for colour, distance - # in closest_colours(np.median(img[part_mask == 1], axis=0), RGB_COLOURS) - # ])) - # except Exception as e: - # rospy.logerr(f"Failed to process colour: {e}") - - # # do feature extraction on the head - # if part == 'head': - # try: - # # crop out face - # face_mask = np.array(userdata.bodypix_masks[1].mask).reshape( - # userdata.bodypix_masks[1].shape[0], userdata.bodypix_masks[1].shape[1]) - - # mask_image_only_face = mask_image.copy() - # mask_image_only_face[face_mask == 0] = 0 - - # face_region = cv2_img.extract_mask_region( - # img, mask_image_only_face) - # if face_region is None: - # raise Exception( - # "Failed to extract mask region") - - # msg = cv2_img.cv2_img_to_msg(face_region) - # features.extend(self.torch_face_features( - # msg, False).detected_features) - # except Exception as e: - # rospy.logerr(f"Failed to process extraction: {e}") - people.append({ 'detection': person, 'features': rst From 5765e667174f632eb0dbb635b7b493208a522b66 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:25:16 +0000 Subject: [PATCH 02/18] removed loading the pretrained parameters --- .../helpers/torch_module/src/torch_module/modules/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/helpers/torch_module/src/torch_module/modules/__init__.py b/common/helpers/torch_module/src/torch_module/modules/__init__.py index 694f93924..334b94f35 100644 --- a/common/helpers/torch_module/src/torch_module/modules/__init__.py +++ b/common/helpers/torch_module/src/torch_module/modules/__init__.py @@ -35,7 +35,7 @@ class UNetWithResnetEncoder(nn.Module): def __init__(self, num_classes, in_channels=3, freeze_bn=False, sigmoid=True): super(UNetWithResnetEncoder, self).__init__() self.sigmoid = sigmoid - self.resnet = models.resnet34(pretrained=True) # Initialize with a ResNet model + self.resnet = models.resnet34(pretrained=False) # Initialize with a ResNet model if in_channels != 3: self.resnet.conv1 = nn.Conv2d(in_channels, 64, kernel_size=7, stride=2, padding=3, bias=False) @@ -99,7 +99,7 @@ def unfreeze_bn(self): class MultiLabelResNet(nn.Module): def __init__(self, num_labels, input_channels=3, sigmoid=True, pretrained=False,): super(MultiLabelResNet, self).__init__() - self.model = models.resnet34(pretrained=pretrained) + self.model = models.resnet34(pretrained=False) self.sigmoid = sigmoid if input_channels != 3: From dc3868eb50318257570b3cf605f69f85fc891e1b Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:26:37 +0000 Subject: [PATCH 03/18] removed load pretrained parameter. --- .../helpers/torch_module/src/torch_module/modules/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/helpers/torch_module/src/torch_module/modules/__init__.py b/common/helpers/torch_module/src/torch_module/modules/__init__.py index 334b94f35..90d65f61b 100644 --- a/common/helpers/torch_module/src/torch_module/modules/__init__.py +++ b/common/helpers/torch_module/src/torch_module/modules/__init__.py @@ -97,7 +97,7 @@ def unfreeze_bn(self): class MultiLabelResNet(nn.Module): - def __init__(self, num_labels, input_channels=3, sigmoid=True, pretrained=False,): + def __init__(self, num_labels, input_channels=3, sigmoid=True): super(MultiLabelResNet, self).__init__() self.model = models.resnet34(pretrained=False) self.sigmoid = sigmoid From 703b3e841186a471f1c5ba2f45abb4bfd9ce6553 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:32:06 +0000 Subject: [PATCH 04/18] renamed torch_module into feature_extractor (Recompile needed!!!) --- common/helpers/numpy2message/CMakeLists.txt | 2 +- common/helpers/numpy2message/package.xml | 2 +- common/helpers/torch_module/CMakeLists.txt | 10 +++++----- common/helpers/torch_module/package.xml | 4 ++-- common/helpers/torch_module/setup.py | 2 +- common/vision/lasr_vision_torch/nodes/service | 2 +- common/vision/lasr_vision_torch/package.xml | 2 +- .../src/lasr_vision_torch/__init__.py | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/common/helpers/numpy2message/CMakeLists.txt b/common/helpers/numpy2message/CMakeLists.txt index b5898aff7..fa6585225 100644 --- a/common/helpers/numpy2message/CMakeLists.txt +++ b/common/helpers/numpy2message/CMakeLists.txt @@ -193,7 +193,7 @@ include_directories( ############# ## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_torch_module.cpp) +# catkin_add_gtest(${PROJECT_NAME}-test test/test_feature_extractor.cpp) # if(TARGET ${PROJECT_NAME}-test) # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) # endif() diff --git a/common/helpers/numpy2message/package.xml b/common/helpers/numpy2message/package.xml index aa9384c64..0146eb113 100644 --- a/common/helpers/numpy2message/package.xml +++ b/common/helpers/numpy2message/package.xml @@ -19,7 +19,7 @@ - + diff --git a/common/helpers/torch_module/CMakeLists.txt b/common/helpers/torch_module/CMakeLists.txt index 30963cd1d..5c5d54e74 100644 --- a/common/helpers/torch_module/CMakeLists.txt +++ b/common/helpers/torch_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.0.2) -project(torch_module) +project(feature_extractor) ## Compile as C++11, supported in ROS Kinetic and newer # add_compile_options(-std=c++11) @@ -100,7 +100,7 @@ catkin_python_setup() ## DEPENDS: system dependencies of this project that dependent projects also need catkin_package( # INCLUDE_DIRS include -# LIBRARIES torch_module +# LIBRARIES feature_extractor # CATKIN_DEPENDS other_catkin_pkg # DEPENDS system_lib ) @@ -118,7 +118,7 @@ include_directories( ## Declare a C++ library # add_library(${PROJECT_NAME} -# src/${PROJECT_NAME}/torch_module.cpp +# src/${PROJECT_NAME}/feature_extractor.cpp # ) ## Add cmake target dependencies of the library @@ -129,7 +129,7 @@ include_directories( ## Declare a C++ executable ## With catkin_make all packages are built within a single CMake context ## The recommended prefix ensures that target names across packages don't collide -# add_executable(${PROJECT_NAME}_node src/torch_module_node.cpp) +# add_executable(${PROJECT_NAME}_node src/feature_extractor_node.cpp) ## Rename C++ executable without prefix ## The above recommended prefix causes long target names, the following renames the @@ -193,7 +193,7 @@ include_directories( ############# ## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_torch_module.cpp) +# catkin_add_gtest(${PROJECT_NAME}-test test/test_feature_extractor.cpp) # if(TARGET ${PROJECT_NAME}-test) # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) # endif() diff --git a/common/helpers/torch_module/package.xml b/common/helpers/torch_module/package.xml index 622e78778..aec2fd25f 100644 --- a/common/helpers/torch_module/package.xml +++ b/common/helpers/torch_module/package.xml @@ -1,6 +1,6 @@ - torch_module + feature_extractor 0.0.0 Various PyTorch helpers and utilties @@ -19,7 +19,7 @@ - + diff --git a/common/helpers/torch_module/setup.py b/common/helpers/torch_module/setup.py index 2151223c9..77ae31a50 100644 --- a/common/helpers/torch_module/setup.py +++ b/common/helpers/torch_module/setup.py @@ -4,7 +4,7 @@ from catkin_pkg.python_setup import generate_distutils_setup setup_args = generate_distutils_setup( - packages=['torch_module'], + packages=['feature_extractor'], package_dir={'': 'src'} ) diff --git a/common/vision/lasr_vision_torch/nodes/service b/common/vision/lasr_vision_torch/nodes/service index 7d1e54e84..b6cf0f392 100644 --- a/common/vision/lasr_vision_torch/nodes/service +++ b/common/vision/lasr_vision_torch/nodes/service @@ -1,7 +1,7 @@ from lasr_vision_msgs.srv import TorchFaceFeatureDetection, TorchFaceFeatureDetectionRequest, TorchFaceFeatureDetectionResponse, TorchFaceFeatureDetectionDescription, TorchFaceFeatureDetectionDescriptionRequest, TorchFaceFeatureDetectionDescriptionResponse from lasr_vision_msgs.msg import FeatureWithColour, ColourPrediction from cv2_img import msg_to_cv2_img -from torch_module.helpers import binary_erosion_dilation, median_color_float +from feature_extractor.helpers import binary_erosion_dilation, median_color_float from numpy2message import message2numpy import numpy as np diff --git a/common/vision/lasr_vision_torch/package.xml b/common/vision/lasr_vision_torch/package.xml index 975aa03e4..23c130106 100644 --- a/common/vision/lasr_vision_torch/package.xml +++ b/common/vision/lasr_vision_torch/package.xml @@ -52,7 +52,7 @@ catkin_virtualenv lasr_vision_msgs cv2_img - torch_module + feature_extractor colour_estimation diff --git a/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py b/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py index af5a00448..beb1335f4 100644 --- a/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py +++ b/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py @@ -1,5 +1,5 @@ -from torch_module.modules import UNetWithResnetEncoder, MultiLabelResNet, CombinedModel # DeepLabV3PlusMobileNetV3, MultiLabelMobileNetV3Large, CombinedModelNoRegression -from torch_module.helpers import load_torch_model, binary_erosion_dilation +from feature_extractor.modules import UNetWithResnetEncoder, MultiLabelResNet, CombinedModel # DeepLabV3PlusMobileNetV3, MultiLabelMobileNetV3Large, CombinedModelNoRegression +from feature_extractor.helpers import load_torch_model, binary_erosion_dilation from colour_estimation import load_images_to_dict, generate_colour_table, count_colours_in_masked_area, compare_colour_distributions from colour_estimation import SPESIFIC_COLOURS, DETAILED_COLOURS From 5480abc61878d6ea9a545680f11933cc9b283389 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:33:32 +0000 Subject: [PATCH 05/18] renamed torch_module into feature_extractor --- common/helpers/{torch_module => feature_extractor}/CMakeLists.txt | 0 .../{torch_module => feature_extractor}/doc/PREREQUISITES.md | 0 common/helpers/{torch_module => feature_extractor}/package.xml | 0 common/helpers/{torch_module => feature_extractor}/setup.py | 0 .../src/torch_module/__init__.py | 0 .../src/torch_module/helpers/__init__.py | 0 .../src/torch_module/modules/__init__.py | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename common/helpers/{torch_module => feature_extractor}/CMakeLists.txt (100%) rename common/helpers/{torch_module => feature_extractor}/doc/PREREQUISITES.md (100%) rename common/helpers/{torch_module => feature_extractor}/package.xml (100%) rename common/helpers/{torch_module => feature_extractor}/setup.py (100%) rename common/helpers/{torch_module => feature_extractor}/src/torch_module/__init__.py (100%) rename common/helpers/{torch_module => feature_extractor}/src/torch_module/helpers/__init__.py (100%) rename common/helpers/{torch_module => feature_extractor}/src/torch_module/modules/__init__.py (100%) diff --git a/common/helpers/torch_module/CMakeLists.txt b/common/helpers/feature_extractor/CMakeLists.txt similarity index 100% rename from common/helpers/torch_module/CMakeLists.txt rename to common/helpers/feature_extractor/CMakeLists.txt diff --git a/common/helpers/torch_module/doc/PREREQUISITES.md b/common/helpers/feature_extractor/doc/PREREQUISITES.md similarity index 100% rename from common/helpers/torch_module/doc/PREREQUISITES.md rename to common/helpers/feature_extractor/doc/PREREQUISITES.md diff --git a/common/helpers/torch_module/package.xml b/common/helpers/feature_extractor/package.xml similarity index 100% rename from common/helpers/torch_module/package.xml rename to common/helpers/feature_extractor/package.xml diff --git a/common/helpers/torch_module/setup.py b/common/helpers/feature_extractor/setup.py similarity index 100% rename from common/helpers/torch_module/setup.py rename to common/helpers/feature_extractor/setup.py diff --git a/common/helpers/torch_module/src/torch_module/__init__.py b/common/helpers/feature_extractor/src/torch_module/__init__.py similarity index 100% rename from common/helpers/torch_module/src/torch_module/__init__.py rename to common/helpers/feature_extractor/src/torch_module/__init__.py diff --git a/common/helpers/torch_module/src/torch_module/helpers/__init__.py b/common/helpers/feature_extractor/src/torch_module/helpers/__init__.py similarity index 100% rename from common/helpers/torch_module/src/torch_module/helpers/__init__.py rename to common/helpers/feature_extractor/src/torch_module/helpers/__init__.py diff --git a/common/helpers/torch_module/src/torch_module/modules/__init__.py b/common/helpers/feature_extractor/src/torch_module/modules/__init__.py similarity index 100% rename from common/helpers/torch_module/src/torch_module/modules/__init__.py rename to common/helpers/feature_extractor/src/torch_module/modules/__init__.py From 109201aaa88152c0c8d94b11294922bd52326b23 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:38:51 +0000 Subject: [PATCH 06/18] renamed lasr_vision_torch to lasr_vision_feature_extraction --- .../.gitignore | 0 .../CMakeLists.txt | 10 +++++----- .../launch/service.launch | 2 +- .../models/.gitkeep | 0 .../nodes/service | 12 ++++++------ .../package.xml | 4 ++-- .../requirements.in | 0 .../requirements.txt | 0 .../setup.py | 2 +- .../src/lasr_vision_torch/__init__.py | 16 ++++++++-------- .../categories_and_attributes.py | 0 .../image_with_masks_and_attributes.py | 2 +- skills/launch/unit_test_describe_people.launch | 2 +- tasks/receptionist/launch/setup.launch | 2 +- 14 files changed, 26 insertions(+), 26 deletions(-) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/.gitignore (100%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/CMakeLists.txt (95%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/launch/service.launch (52%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/models/.gitkeep (100%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/nodes/service (82%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/package.xml (95%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/requirements.in (100%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/requirements.txt (100%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/setup.py (81%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/src/lasr_vision_torch/__init__.py (95%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/src/lasr_vision_torch/categories_and_attributes.py (100%) rename common/vision/{lasr_vision_torch => lasr_vision_feature_extraction}/src/lasr_vision_torch/image_with_masks_and_attributes.py (98%) diff --git a/common/vision/lasr_vision_torch/.gitignore b/common/vision/lasr_vision_feature_extraction/.gitignore similarity index 100% rename from common/vision/lasr_vision_torch/.gitignore rename to common/vision/lasr_vision_feature_extraction/.gitignore diff --git a/common/vision/lasr_vision_torch/CMakeLists.txt b/common/vision/lasr_vision_feature_extraction/CMakeLists.txt similarity index 95% rename from common/vision/lasr_vision_torch/CMakeLists.txt rename to common/vision/lasr_vision_feature_extraction/CMakeLists.txt index da57acfe7..1d4613622 100644 --- a/common/vision/lasr_vision_torch/CMakeLists.txt +++ b/common/vision/lasr_vision_feature_extraction/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.0.2) -project(lasr_vision_torch) +project(lasr_vision_feature_extraction) ## Compile as C++11, supported in ROS Kinetic and newer # add_compile_options(-std=c++11) @@ -104,7 +104,7 @@ catkin_generate_virtualenv( ## DEPENDS: system dependencies of this project that dependent projects also need catkin_package( # INCLUDE_DIRS include -# LIBRARIES lasr_vision_torch +# LIBRARIES lasr_vision_feature_extraction # CATKIN_DEPENDS other_catkin_pkg # DEPENDS system_lib ) @@ -122,7 +122,7 @@ include_directories( ## Declare a C++ library # add_library(${PROJECT_NAME} -# src/${PROJECT_NAME}/lasr_vision_torch.cpp +# src/${PROJECT_NAME}/lasr_vision_feature_extraction.cpp # ) ## Add cmake target dependencies of the library @@ -133,7 +133,7 @@ include_directories( ## Declare a C++ executable ## With catkin_make all packages are built within a single CMake context ## The recommended prefix ensures that target names across packages don't collide -# add_executable(${PROJECT_NAME}_node src/lasr_vision_torch_node.cpp) +# add_executable(${PROJECT_NAME}_node src/lasr_vision_feature_extraction_node.cpp) ## Rename C++ executable without prefix ## The above recommended prefix causes long target names, the following renames the @@ -197,7 +197,7 @@ catkin_install_python(PROGRAMS ############# ## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_lasr_vision_torch.cpp) +# catkin_add_gtest(${PROJECT_NAME}-test test/test_lasr_vision_feature_extraction.cpp) # if(TARGET ${PROJECT_NAME}-test) # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) # endif() diff --git a/common/vision/lasr_vision_torch/launch/service.launch b/common/vision/lasr_vision_feature_extraction/launch/service.launch similarity index 52% rename from common/vision/lasr_vision_torch/launch/service.launch rename to common/vision/lasr_vision_feature_extraction/launch/service.launch index 96af5a527..11bdbbebb 100644 --- a/common/vision/lasr_vision_torch/launch/service.launch +++ b/common/vision/lasr_vision_feature_extraction/launch/service.launch @@ -2,5 +2,5 @@ Start the torch service - + \ No newline at end of file diff --git a/common/vision/lasr_vision_torch/models/.gitkeep b/common/vision/lasr_vision_feature_extraction/models/.gitkeep similarity index 100% rename from common/vision/lasr_vision_torch/models/.gitkeep rename to common/vision/lasr_vision_feature_extraction/models/.gitkeep diff --git a/common/vision/lasr_vision_torch/nodes/service b/common/vision/lasr_vision_feature_extraction/nodes/service similarity index 82% rename from common/vision/lasr_vision_torch/nodes/service rename to common/vision/lasr_vision_feature_extraction/nodes/service index b6cf0f392..0c896a64e 100644 --- a/common/vision/lasr_vision_torch/nodes/service +++ b/common/vision/lasr_vision_feature_extraction/nodes/service @@ -9,7 +9,7 @@ import cv2 import torch import rospy import rospkg -import lasr_vision_torch +import lasr_vision_feature_extraction from os import path @@ -21,11 +21,11 @@ def detect(request: TorchFaceFeatureDetectionDescriptionRequest) -> TorchFaceFea head_mask_data, head_mask_shape, head_mask_dtype = request.head_mask_data, request.head_mask_shape, request.head_mask_dtype torso_mask = message2numpy(torso_mask_data, torso_mask_shape, torso_mask_dtype) head_mask = message2numpy(head_mask_data, head_mask_shape, head_mask_dtype) - head_frame = lasr_vision_torch.extract_mask_region(full_frame, head_mask.astype(np.uint8), expand_x=0.4, expand_y=0.5) - torso_frame = lasr_vision_torch.extract_mask_region(full_frame, torso_mask.astype(np.uint8), expand_x=0.2, expand_y=0.0) + head_frame = lasr_vision_feature_extraction.extract_mask_region(full_frame, head_mask.astype(np.uint8), expand_x=0.4, expand_y=0.5) + torso_frame = lasr_vision_feature_extraction.extract_mask_region(full_frame, torso_mask.astype(np.uint8), expand_x=0.2, expand_y=0.0) - # class_pred, colour_pred = lasr_vision_torch.predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask, lasr_vision_torch.model, lasr_vision_torch.thresholds_mask, lasr_vision_torch.erosion_iterations, lasr_vision_torch.dilation_iterations, lasr_vision_torch.thresholds_pred) - rst_str = lasr_vision_torch.predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask,) + # class_pred, colour_pred = lasr_vision_feature_extraction.predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask, lasr_vision_feature_extraction.model, lasr_vision_feature_extraction.thresholds_mask, lasr_vision_feature_extraction.erosion_iterations, lasr_vision_feature_extraction.dilation_iterations, lasr_vision_feature_extraction.thresholds_pred) + rst_str = lasr_vision_feature_extraction.predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask,) response = TorchFaceFeatureDetectionDescriptionResponse() response.description = rst_str @@ -51,7 +51,7 @@ def detect(request: TorchFaceFeatureDetectionDescriptionRequest) -> TorchFaceFea # # 'hair', 'hat', 'glasses', 'face' # input_image = torch.from_numpy(frame).permute(2, 0, 1).unsqueeze(0).float() # input_image /= 255.0 -# masks_batch_pred, pred_classes = lasr_vision_torch.model(input_image) +# masks_batch_pred, pred_classes = lasr_vision_feature_extraction.model(input_image) # thresholds_mask = [ # 0.5, 0.75, 0.25, 0.5, # 0.5, 0.5, 0.5, 0.5, diff --git a/common/vision/lasr_vision_torch/package.xml b/common/vision/lasr_vision_feature_extraction/package.xml similarity index 95% rename from common/vision/lasr_vision_torch/package.xml rename to common/vision/lasr_vision_feature_extraction/package.xml index 23c130106..4019a147a 100644 --- a/common/vision/lasr_vision_torch/package.xml +++ b/common/vision/lasr_vision_feature_extraction/package.xml @@ -1,6 +1,6 @@ - lasr_vision_torch + lasr_vision_feature_extraction 0.0.0 Serivce providing custom vision models using PyTorch @@ -19,7 +19,7 @@ - + diff --git a/common/vision/lasr_vision_torch/requirements.in b/common/vision/lasr_vision_feature_extraction/requirements.in similarity index 100% rename from common/vision/lasr_vision_torch/requirements.in rename to common/vision/lasr_vision_feature_extraction/requirements.in diff --git a/common/vision/lasr_vision_torch/requirements.txt b/common/vision/lasr_vision_feature_extraction/requirements.txt similarity index 100% rename from common/vision/lasr_vision_torch/requirements.txt rename to common/vision/lasr_vision_feature_extraction/requirements.txt diff --git a/common/vision/lasr_vision_torch/setup.py b/common/vision/lasr_vision_feature_extraction/setup.py similarity index 81% rename from common/vision/lasr_vision_torch/setup.py rename to common/vision/lasr_vision_feature_extraction/setup.py index b59bbda5e..9df7d2505 100644 --- a/common/vision/lasr_vision_torch/setup.py +++ b/common/vision/lasr_vision_feature_extraction/setup.py @@ -4,7 +4,7 @@ from catkin_pkg.python_setup import generate_distutils_setup setup_args = generate_distutils_setup( - packages=['lasr_vision_torch'], + packages=['lasr_vision_feature_extraction'], package_dir={'': 'src'} ) diff --git a/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py similarity index 95% rename from common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py rename to common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py index beb1335f4..86321d294 100644 --- a/common/vision/lasr_vision_torch/src/lasr_vision_torch/__init__.py +++ b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py @@ -3,15 +3,15 @@ from colour_estimation import load_images_to_dict, generate_colour_table, count_colours_in_masked_area, compare_colour_distributions from colour_estimation import SPESIFIC_COLOURS, DETAILED_COLOURS -from lasr_vision_torch.categories_and_attributes import CategoriesAndAttributes, CelebAMaskHQCategoriesAndAttributes -from lasr_vision_torch.image_with_masks_and_attributes import ImageWithMasksAndAttributes, ImageOfPerson +from lasr_vision_feature_extraction.categories_and_attributes import CategoriesAndAttributes, CelebAMaskHQCategoriesAndAttributes +from lasr_vision_feature_extraction.image_with_masks_and_attributes import ImageWithMasksAndAttributes, ImageOfPerson import numpy as np import cv2 import torch import rospy import rospkg -import lasr_vision_torch +import lasr_vision_feature_extraction from os import path # import matplotlib.pyplot as plt @@ -71,7 +71,7 @@ def load_face_classifier_model(): r = rospkg.RosPack() model, _, _, _ = load_torch_model(model, None, path=path.join(r.get_path( - "lasr_vision_torch"), "models", "model.pth"), cpu_only=True) + "lasr_vision_feature_extraction"), "models", "model.pth"), cpu_only=True) return model @@ -174,7 +174,7 @@ def extract_mask_region(frame, mask, expand_x=0.5, expand_y=0.5): # # try: # # r = rospkg.RosPack() # # _head_frame_bgr = cv2.cvtColor(head_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_torch"), 'head_frame.jpg'), _head_frame_bgr) +# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'head_frame.jpg'), _head_frame_bgr) # # except Exception as ignore: # # pass @@ -307,11 +307,11 @@ def predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask,): # # try: # # r = rospkg.RosPack() # # _full_frame_bgr = cv2.cvtColor(full_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_torch"), 'full_frame.jpg'), _full_frame_bgr) +# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'full_frame.jpg'), _full_frame_bgr) # # _head_frame_bgr = cv2.cvtColor(head_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_torch"), 'head_frame.jpg'), _head_frame_bgr) +# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'head_frame.jpg'), _head_frame_bgr) # # _torso_frame_bgr = cv2.cvtColor(torso_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_torch"), 'torso_frame.jpg'), _torso_frame_bgr) +# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'torso_frame.jpg'), _torso_frame_bgr) # # except Exception as ignore: # # pass diff --git a/common/vision/lasr_vision_torch/src/lasr_vision_torch/categories_and_attributes.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/categories_and_attributes.py similarity index 100% rename from common/vision/lasr_vision_torch/src/lasr_vision_torch/categories_and_attributes.py rename to common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/categories_and_attributes.py diff --git a/common/vision/lasr_vision_torch/src/lasr_vision_torch/image_with_masks_and_attributes.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py similarity index 98% rename from common/vision/lasr_vision_torch/src/lasr_vision_torch/image_with_masks_and_attributes.py rename to common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py index 6a5e363e5..56e2efe0f 100644 --- a/common/vision/lasr_vision_torch/src/lasr_vision_torch/image_with_masks_and_attributes.py +++ b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py @@ -1,5 +1,5 @@ import numpy as np -from lasr_vision_torch.categories_and_attributes import CategoriesAndAttributes +from lasr_vision_feature_extraction.categories_and_attributes import CategoriesAndAttributes def _softmax(x: list[float]) -> list[float]: diff --git a/skills/launch/unit_test_describe_people.launch b/skills/launch/unit_test_describe_people.launch index 978faaa7b..0e9b2cfbd 100644 --- a/skills/launch/unit_test_describe_people.launch +++ b/skills/launch/unit_test_describe_people.launch @@ -9,7 +9,7 @@ - + diff --git a/tasks/receptionist/launch/setup.launch b/tasks/receptionist/launch/setup.launch index ff9b7b015..94b78e340 100644 --- a/tasks/receptionist/launch/setup.launch +++ b/tasks/receptionist/launch/setup.launch @@ -56,7 +56,7 @@ - + From a274cdcaddf6c7c83b13b522037b00c24b730dec Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:40:29 +0000 Subject: [PATCH 07/18] removed some unused code comments --- .../src/lasr_vision_torch/__init__.py | 269 ------------------ 1 file changed, 269 deletions(-) diff --git a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py index 86321d294..b7d0d6006 100644 --- a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py +++ b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py @@ -77,26 +77,6 @@ def load_face_classifier_model(): model = load_face_classifier_model() -# # setups -# face_th_rate = 0.05 -# thresholds_mask = [ -# 0.5, 0.75, 0.25, 0.5, # 0.5, 0.5, 0.5, 0.5, -# ] -# thresholds_pred = [ -# 0.6, 0.8, 0.1, 0.5, -# ] -# erosion_iterations = 1 -# dilation_iterations = 1 -# colour_distance_rate = 1.2 -# categories = ['hair', 'hat', 'glasses', 'face',] -# cat_layers = 4 - -# # prepare hair colour table -# r = rospkg.RosPack() -# image_dict = load_images_to_dict(path.join(r.get_path( -# "colour_estimation"), "hair_colours")) -# hair_colour_table = generate_colour_table(image_dict, SPESIFIC_COLOURS) - def pad_image_to_even_dims(image): # Get the current shape of the image @@ -144,110 +124,6 @@ def extract_mask_region(frame, mask, expand_x=0.5, expand_y=0.5): return None -# def process_head(head_frame, model, thresholds_mask, erosion_iterations, dilation_iterations, thresholds_pred): -# """ -# Processes the head frame to extract class counts and color information for head-related classes. - -# Args: -# - head_frame (np.ndarray): The head frame extracted by the BodyPix model. -# - model: A PyTorch model instance for classifying and predicting masks for head features. -# - thresholds_mask, erosion_iterations, dilation_iterations: Thresholds and iteration counts for binary erosion and dilation. -# - thresholds_pred: A list of prediction thresholds. - -# Returns: -# - Tuple[dict, dict]: A tuple containing two dictionaries: -# - head_class_count: A dictionary with counts for each head-related class. -# - head_class_colours: A dictionary with color information for each head-related class. -# """ -# head_class_count = { -# 'hair': 0, -# 'hat': 0, -# 'glasses': 0, -# } -# head_class_colours = { -# 'hair': {}, -# 'hat': {}, -# 'glasses': {}, -# } - -# if head_frame is not None: -# # try: -# # r = rospkg.RosPack() -# # _head_frame_bgr = cv2.cvtColor(head_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'head_frame.jpg'), _head_frame_bgr) -# # except Exception as ignore: -# # pass - -# # Convert head frame to PyTorch tensor and normalize -# head_frame_tensor = torch.from_numpy(head_frame).permute(2, 0, 1).unsqueeze(0).float() / 255.0 -# masks_batch_pred, pred_classes = model(head_frame_tensor) - -# # Apply binary erosion and dilation to the masks -# processed_masks = binary_erosion_dilation( -# masks_batch_pred, thresholds=thresholds_mask, -# erosion_iterations=erosion_iterations, dilation_iterations=dilation_iterations -# ) -# masks = processed_masks.detach().squeeze(0).numpy().astype(np.uint8) -# mask_list = [masks[i,:,:] for i in range(masks.shape[0])] -# pred_classes = pred_classes.detach().squeeze(0).numpy() - -# # Determine if each class is present -# class_list = [pred_classes[i].item() > thresholds_pred[i] for i in range(pred_classes.shape[0])] - -# # Update class count -# for each_class, k in zip(class_list[0:3], ['hair', 'hat', 'glasses']): -# head_class_count[k] = int(each_class) - -# # Update class colours -# for f, each_mask, k, c_map in zip([head_frame, head_frame, head_frame], mask_list[0:2], ['hair', 'hat', 'glasses'], [SPESIFIC_COLOURS, DETAILED_COLOURS, DETAILED_COLOURS]): -# colours = count_colours_in_masked_area(f, each_mask, c_map, sort=True)[1] -# # colours = [c in ] -# for colour in colours: -# head_class_colours[k][colour[0]] = colour[1] -# # if colour[0] not in head_class_colours[k]: -# # head_class_colours[k][colour[0]] = [colour[1]] -# # else: -# # head_class_colours[k][colour[0]].append(colour[1]) - -# return head_class_count, head_class_colours - - -# def process_cloth(full_frame, torso_mask): -# """ -# Processes the full frame with the torso mask to extract class counts and color information for cloth. - -# Args: -# - full_frame (np.ndarray): The full original frame from the video source. -# - torso_mask (np.ndarray): The torso mask extracted by the BodyPix model. - -# Returns: -# - Tuple[dict, dict]: A tuple containing two dictionaries: -# - cloth_class_count: A dictionary with counts for the cloth class. -# - cloth_class_colours: A dictionary with color information for the cloth class. -# """ -# cloth_class_count = { -# 'cloth': 0, -# } -# cloth_class_colours = { -# 'cloth': {}, -# } - -# # Check if cloth is detected -# if torso_mask is not None and np.sum(torso_mask) >= 50: -# cloth_class_count['cloth'] = 1 - -# # Update cloth colours -# colours = count_colours_in_masked_area(full_frame, torso_mask, DETAILED_COLOURS, sort=True)[1] -# for colour in colours: -# cloth_class_colours['cloth'][colour[0]] = colour[1] -# # if colour[0] not in cloth_class_colours['cloth']: -# # cloth_class_colours['cloth'][colour[0]] = [colour[1]] -# # else: -# # cloth_class_colours['cloth'][colour[0]].append(colour[1]) - -# return cloth_class_count, cloth_class_colours - - p = Predictor(model, torch.device('cpu'), CelebAMaskHQCategoriesAndAttributes) @@ -262,148 +138,3 @@ def predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask,): rst = ImageOfPerson.from_parent_instance(p.predict(head_frame)) return rst.describe() - - -# # you can use this function directly for prediction. -# def predict_frame(head_frame, torso_frame, full_frame, head_mask, torso_mask, model, thresholds_mask, erosion_iterations, dilation_iterations, thresholds_pred): -# """ -# Predicts classes and color information for a single processed video frame. - -# Args: -# - head_frame (np.ndarray): The head frame extracted by the BodyPix model. -# - full_frame (np.ndarray): The full original frame from the video source. -# - head_mask (np.ndarray): The head mask extracted by the BodyPix model. -# - torso_mask (np.ndarray): The torso mask extracted by the BodyPix model. -# - model: A PyTorch model instance for classifying and predicting masks for head features. -# - thresholds_mask, erosion_iterations, dilation_iterations: Thresholds and iteration counts for binary erosion and dilation. -# - thresholds_pred: A list of prediction thresholds. - -# Returns: -# - Tuple[dict, dict]: A tuple containing: -# - class_pred: A dictionary with predicted classes for the single frame. -# - colour_pred: A dictionary with predicted colors for the single frame. -# """ -# class_count = { -# 'hair': 0, -# 'hat': 0, -# 'glasses': 0, -# 'cloth': 0, -# } -# class_colours = { -# 'hair': {}, -# 'hat': {}, -# 'glasses': {}, -# 'cloth': {}, -# } - -# full_frame = cv2.cvtColor(full_frame, cv2.COLOR_BGR2RGB) -# head_frame = cv2.cvtColor(head_frame, cv2.COLOR_BGR2RGB) -# torso_frame = cv2.cvtColor(torso_frame, cv2.COLOR_BGR2RGB) - -# head_frame = pad_image_to_even_dims(head_frame) -# torso_frame = pad_image_to_even_dims(torso_frame) - -# # cv2 imshow is currently not working, not knowing why... -# # try: -# # r = rospkg.RosPack() -# # _full_frame_bgr = cv2.cvtColor(full_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'full_frame.jpg'), _full_frame_bgr) -# # _head_frame_bgr = cv2.cvtColor(head_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'head_frame.jpg'), _head_frame_bgr) -# # _torso_frame_bgr = cv2.cvtColor(torso_frame, cv2.COLOR_RGB2BGR) -# # cv2.imwrite(path.join(r.get_path("lasr_vision_feature_extraction"), 'torso_frame.jpg'), _torso_frame_bgr) -# # except Exception as ignore: -# # pass - -# # Process head and cloth separately for the single frame -# head_class_count, head_class_colours = process_head(head_frame, model, thresholds_mask, erosion_iterations, dilation_iterations, thresholds_pred) -# cloth_class_count, cloth_class_colours = process_cloth(full_frame, torso_mask) - -# # Update class counts and colours -# for k in head_class_count: -# class_count[k] = head_class_count[k] -# class_colours[k] = head_class_colours[k] - -# class_count['cloth'] = cloth_class_count['cloth'] -# class_colours['cloth'] = cloth_class_colours['cloth'] - -# # Compute final class predictions and colors for the single frame -# class_pred = {k: bool(class_count[k]) for k in class_count} -# colour_pred = {k: v for k, v in class_colours.items()} - -# rospy.loginfo(str(class_colours['hair'])) -# rospy.loginfo(str(hair_colour_table)) - -# # compare_colour_distributions([k,v class_colours['hair']], hair_colour_table) -# colour_pred['hair'] = compare_colour_distributions(class_colours['hair'], hair_colour_table) - -# # class_pred, colour_pred = None, None - -# return class_pred, colour_pred - - -# # if able to provide multiple frames (see __main__ seciton), then this should work better than the single frame version. -# def predict_frames(head_frames, torso_frames, full_frames, head_masks, torso_masks, model, thresholds_mask, erosion_iterations, dilation_iterations, thresholds_pred, SPESIFIC_COLOURS): -# """ -# Predicts classes and color information for a sequence of processed video frames. - -# Args: -# - head_frames (list[np.ndarray]): List of head frames extracted by the BodyPix model. -# - torso_frames (list[np.ndarray]): List of body frames extracted by the BodyPix model. -# - full_frames (list[np.ndarray]): List of full original frames from the video source. -# - head_masks (list[np.ndarray]): List of head masks extracted by the BodyPix model. -# - torso_masks (list[np.ndarray]): List of torso masks extracted by the BodyPix model. -# - model: A PyTorch model instance for classifying and predicting masks for head features. -# - thresholds_mask, erosion_iterations, dilation_iterations: Thresholds and iteration counts for binary erosion and dilation. -# - thresholds_pred: A list of prediction thresholds. -# - SPESIFIC_COLOURS: A dictionary of specific colors. - -# Returns: -# - Tuple[dict, dict]: A tuple containing: -# - class_pred: A dictionary with predicted classes. -# - colour_pred: A dictionary with predicted colors. -# """ -# total_class_count = { -# 'hair': [], -# 'hat': [], -# 'glasses': [], -# 'cloth': [], -# } -# total_class_colours = { -# 'hair': {}, -# 'hat': {}, -# 'glasses': {}, -# 'cloth': {}, -# } - -# for head_frame, torso_frame, full_frame, head_mask, torso_mask in zip(head_frames, torso_frames, full_frames, head_masks, torso_masks): -# head_frame = pad_image_to_even_dims(head_frame) -# torso_frame = pad_image_to_even_dims(torso_frame) - -# # Process head and cloth separately -# head_class_count, head_class_colours = process_head(head_frame, model, thresholds_mask, erosion_iterations, dilation_iterations, thresholds_pred) -# cloth_class_count, cloth_class_colours = process_cloth(full_frame, torso_mask) - -# # Accumulate class counts and colours -# for k in head_class_count: -# total_class_count[k].append(head_class_count[k]) -# if k in head_class_colours: -# for colour, count in head_class_colours[k].items(): -# if colour not in total_class_colours[k]: -# total_class_colours[k][colour] = count -# else: -# total_class_colours[k][colour].extend(count) - -# total_class_count['cloth'].append(cloth_class_count['cloth']) -# for colour, count in cloth_class_colours['cloth'].items(): -# if colour not in total_class_colours['cloth']: -# total_class_colours['cloth'][colour] = count -# else: -# total_class_colours['cloth'][colour].extend(count) - -# # Compute final class predictions and colors -# class_pred = {k: sum(v) >= len(v) / 2 for k, v in total_class_count.items()} -# colour_pred = average_colours_by_label(total_class_count, total_class_colours) - -# return class_pred, colour_pred - From d967c5150972c57a7baa3a8b45d1f35c56022535 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:44:09 +0000 Subject: [PATCH 08/18] removed colour estimation module --- .../helpers/colour_estimation/CMakeLists.txt | 202 ----------- common/helpers/colour_estimation/README.md | 63 ---- .../helpers/colour_estimation/doc/EXAMPLE.md | 10 - .../colour_estimation/doc/PREREQUISITES.md | 1 - common/helpers/colour_estimation/doc/USAGE.md | 12 - .../colour_estimation/hair_colours/black.jpg | Bin 4209 -> 0 bytes .../colour_estimation/hair_colours/blond.jpg | Bin 5211 -> 0 bytes .../colour_estimation/hair_colours/brown .jpg | Bin 6291 -> 0 bytes .../colour_estimation/hair_colours/brown.jpg | Bin 4041 -> 0 bytes .../colour_estimation/hair_colours/gray.png | Bin 54379 -> 0 bytes .../hair_colours/temp/beeline honey.jpg | Bin 5211 -> 0 bytes .../hair_colours/temp/blowout burgundy.jpg | Bin 6516 -> 0 bytes .../hair_colours/temp/butter scotch.jpg | Bin 4525 -> 0 bytes .../hair_colours/temp/caramel.jpg | Bin 5811 -> 0 bytes .../hair_colours/temp/chocolate brown.jpg | Bin 5239 -> 0 bytes .../hair_colours/temp/chocolate-cherry.jpg | Bin 5272 -> 0 bytes .../hair_colours/temp/copper-shimmer.jpg | Bin 6993 -> 0 bytes .../hair_colours/temp/crushedgarnet.jpg | Bin 5786 -> 0 bytes .../hair_colours/temp/dark golden brown.jpg | Bin 4041 -> 0 bytes .../hair_colours/temp/espresso.jpg | Bin 7104 -> 0 bytes .../hair_colours/temp/expresso.jpg | Bin 3804 -> 0 bytes .../hair_colours/temp/french-roast.jpg | Bin 6291 -> 0 bytes .../hair_colours/temp/gray.png | Bin 54379 -> 0 bytes .../hair_colours/temp/havanabrown.jpg | Bin 7081 -> 0 bytes .../hair_colours/temp/hot-toffee.jpg | Bin 7452 -> 0 bytes .../hair_colours/temp/jet black.jpg | Bin 3536 -> 0 bytes .../hair_colours/temp/leatherblack.jpg | Bin 5887 -> 0 bytes .../hair_colours/temp/light ash blonde.jpg | Bin 5223 -> 0 bytes .../hair_colours/temp/light auburn.jpg | Bin 4432 -> 0 bytes .../hair_colours/temp/light blonde.jpg | Bin 5039 -> 0 bytes .../hair_colours/temp/light brown.jpg | Bin 3611 -> 0 bytes .../hair_colours/temp/light cool brown.jpg | Bin 5323 -> 0 bytes .../hair_colours/temp/light golden blonde.jpg | Bin 5005 -> 0 bytes .../hair_colours/temp/light golden brown.jpg | Bin 4205 -> 0 bytes .../hair_colours/temp/medium ash brown.jpg | Bin 4209 -> 0 bytes .../hair_colours/temp/medium auburn.jpg | Bin 4801 -> 0 bytes .../hair_colours/temp/medium champagne.jpg | Bin 5302 -> 0 bytes .../hair_colours/temp/midnighrruby.jpg | Bin 5809 -> 0 bytes .../hair_colours/temp/pure-diamond.jpg | Bin 6282 -> 0 bytes .../hair_colours/temp/red hot cinnamon.jpg | Bin 3878 -> 0 bytes .../hair_colours/temp/reddish blonde.jpg | Bin 5022 -> 0 bytes .../hair_colours/temp/rubyfusion.jpg | Bin 5129 -> 0 bytes .../hair_colours/temp/sparkling-amber.jpg | Bin 6345 -> 0 bytes .../hair_colours/temp/sunflower-blonde.jpg | Bin 6002 -> 0 bytes common/helpers/colour_estimation/package.xml | 59 ---- common/helpers/colour_estimation/setup.py | 11 - .../src/colour_estimation/__init__.py | 324 ------------------ .../src/colour_estimation/rgb.py | 190 ---------- .../src/lasr_vision_torch/__init__.py | 3 - skills/src/lasr_skills/describe_people.py | 1 - 50 files changed, 876 deletions(-) delete mode 100644 common/helpers/colour_estimation/CMakeLists.txt delete mode 100644 common/helpers/colour_estimation/README.md delete mode 100644 common/helpers/colour_estimation/doc/EXAMPLE.md delete mode 100644 common/helpers/colour_estimation/doc/PREREQUISITES.md delete mode 100644 common/helpers/colour_estimation/doc/USAGE.md delete mode 100644 common/helpers/colour_estimation/hair_colours/black.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/blond.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/brown .jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/gray.png delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/beeline honey.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/blowout burgundy.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/butter scotch.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/caramel.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/chocolate brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/chocolate-cherry.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/copper-shimmer.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/crushedgarnet.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/dark golden brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/espresso.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/expresso.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/french-roast.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/gray.png delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/havanabrown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/hot-toffee.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/jet black.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/leatherblack.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light ash blonde.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light auburn.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light blonde.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light cool brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light golden blonde.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/light golden brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/medium ash brown.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/medium auburn.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/medium champagne.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/midnighrruby.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/pure-diamond.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/red hot cinnamon.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/reddish blonde.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/rubyfusion.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/sparkling-amber.jpg delete mode 100644 common/helpers/colour_estimation/hair_colours/temp/sunflower-blonde.jpg delete mode 100644 common/helpers/colour_estimation/package.xml delete mode 100644 common/helpers/colour_estimation/setup.py delete mode 100644 common/helpers/colour_estimation/src/colour_estimation/__init__.py delete mode 100644 common/helpers/colour_estimation/src/colour_estimation/rgb.py diff --git a/common/helpers/colour_estimation/CMakeLists.txt b/common/helpers/colour_estimation/CMakeLists.txt deleted file mode 100644 index e693284eb..000000000 --- a/common/helpers/colour_estimation/CMakeLists.txt +++ /dev/null @@ -1,202 +0,0 @@ -cmake_minimum_required(VERSION 3.0.2) -project(colour_estimation) - -## Compile as C++11, supported in ROS Kinetic and newer -# add_compile_options(-std=c++11) - -## Find catkin macros and libraries -## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) -## is used, also find other catkin packages -find_package(catkin REQUIRED) - -## System dependencies are found with CMake's conventions -# find_package(Boost REQUIRED COMPONENTS system) - - -## Uncomment this if the package has a setup.py. This macro ensures -## modules and global scripts declared therein get installed -## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html -catkin_python_setup() - -################################################ -## Declare ROS messages, services and actions ## -################################################ - -## To declare and build messages, services or actions from within this -## package, follow these steps: -## * Let MSG_DEP_SET be the set of packages whose message types you use in -## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). -## * In the file package.xml: -## * add a build_depend tag for "message_generation" -## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET -## * If MSG_DEP_SET isn't empty the following dependency has been pulled in -## but can be declared for certainty nonetheless: -## * add a exec_depend tag for "message_runtime" -## * In this file (CMakeLists.txt): -## * add "message_generation" and every package in MSG_DEP_SET to -## find_package(catkin REQUIRED COMPONENTS ...) -## * add "message_runtime" and every package in MSG_DEP_SET to -## catkin_package(CATKIN_DEPENDS ...) -## * uncomment the add_*_files sections below as needed -## and list every .msg/.srv/.action file to be processed -## * uncomment the generate_messages entry below -## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) - -## Generate messages in the 'msg' folder -# add_message_files( -# FILES -# Message1.msg -# Message2.msg -# ) - -## Generate services in the 'srv' folder -# add_service_files( -# FILES -# Service1.srv -# Service2.srv -# ) - -## Generate actions in the 'action' folder -# add_action_files( -# FILES -# Action1.action -# Action2.action -# ) - -## Generate added messages and services with any dependencies listed here -# generate_messages( -# DEPENDENCIES -# std_msgs # Or other packages containing msgs -# ) - -################################################ -## Declare ROS dynamic reconfigure parameters ## -################################################ - -## To declare and build dynamic reconfigure parameters within this -## package, follow these steps: -## * In the file package.xml: -## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" -## * In this file (CMakeLists.txt): -## * add "dynamic_reconfigure" to -## find_package(catkin REQUIRED COMPONENTS ...) -## * uncomment the "generate_dynamic_reconfigure_options" section below -## and list every .cfg file to be processed - -## Generate dynamic reconfigure parameters in the 'cfg' folder -# generate_dynamic_reconfigure_options( -# cfg/DynReconf1.cfg -# cfg/DynReconf2.cfg -# ) - -################################### -## catkin specific configuration ## -################################### -## The catkin_package macro generates cmake config files for your package -## Declare things to be passed to dependent projects -## INCLUDE_DIRS: uncomment this if your package contains header files -## LIBRARIES: libraries you create in this project that dependent projects also need -## CATKIN_DEPENDS: catkin_packages dependent projects also need -## DEPENDS: system dependencies of this project that dependent projects also need -catkin_package( -# INCLUDE_DIRS include -# LIBRARIES colour_estimation -# CATKIN_DEPENDS other_catkin_pkg -# DEPENDS system_lib -) - -########### -## Build ## -########### - -## Specify additional locations of header files -## Your package locations should be listed before other locations -include_directories( -# include -# ${catkin_INCLUDE_DIRS} -) - -## Declare a C++ library -# add_library(${PROJECT_NAME} -# src/${PROJECT_NAME}/colour_estimation.cpp -# ) - -## Add cmake target dependencies of the library -## as an example, code may need to be generated before libraries -## either from message generation or dynamic reconfigure -# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -## Declare a C++ executable -## With catkin_make all packages are built within a single CMake context -## The recommended prefix ensures that target names across packages don't collide -# add_executable(${PROJECT_NAME}_node src/colour_estimation_node.cpp) - -## Rename C++ executable without prefix -## The above recommended prefix causes long target names, the following renames the -## target back to the shorter version for ease of user use -## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" -# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") - -## Add cmake target dependencies of the executable -## same as for the library above -# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -## Specify libraries to link a library or executable target against -# target_link_libraries(${PROJECT_NAME}_node -# ${catkin_LIBRARIES} -# ) - -############# -## Install ## -############# - -# all install targets should use catkin DESTINATION variables -# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html - -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -# catkin_install_python(PROGRAMS -# scripts/my_python_script -# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark executables for installation -## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html -# install(TARGETS ${PROJECT_NAME}_node -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark libraries for installation -## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html -# install(TARGETS ${PROJECT_NAME} -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} -# ) - -## Mark cpp header files for installation -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -# FILES_MATCHING PATTERN "*.h" -# PATTERN ".svn" EXCLUDE -# ) - -## Mark other files for installation (e.g. launch and bag files, etc.) -# install(FILES -# # myfile1 -# # myfile2 -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -# ) - -############# -## Testing ## -############# - -## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_colour_estimation.cpp) -# if(TARGET ${PROJECT_NAME}-test) -# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) -# endif() - -## Add folders to be run by python nosetests -# catkin_add_nosetests(test) diff --git a/common/helpers/colour_estimation/README.md b/common/helpers/colour_estimation/README.md deleted file mode 100644 index 0d579ad70..000000000 --- a/common/helpers/colour_estimation/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# colour_estimation - -Python utilities for estimating the name of given colours. - -This package is maintained by: -- [Paul Makles](mailto:me@insrt.uk) - -## Prerequisites - -This package depends on the following ROS packages: -- catkin (buildtool) - -Ensure numpy is available wherever this package is imported. - -## Usage - -Find the closest colours to a given colour: - -```python -import numpy as np -from colour_estimation import closest_colours, RGB_COLOURS, RGB_HAIR_COLOURS - -# find the closest colour from RGB_COLOURS dict -closest_colours(np.array([255, 0, 0]), RGB_COLOURS) - -# find the closest colour from RGB_HAIR_COLOURS dict -closest_colours(np.array([200, 150, 0]), RGB_HAIR_COLOURS) -``` - -## Example - -Find the name of the median colour in an image: - -```python -import numpy as np -from colour_estimation import closest_colours, RGB_COLOURS - -# let `img` be a cv2 image / numpy array - -closest_colours(np.median(img, axis=0), RGB_COLOURS) -``` - -## Technical Overview - -Ask the package maintainer to write a `doc/TECHNICAL.md` for their package! - -## ROS Definitions - -### Launch Files - -This package has no launch files. - -### Messages - -This package has no messages. - -### Services - -This package has no services. - -### Actions - -This package has no actions. diff --git a/common/helpers/colour_estimation/doc/EXAMPLE.md b/common/helpers/colour_estimation/doc/EXAMPLE.md deleted file mode 100644 index 5092381b8..000000000 --- a/common/helpers/colour_estimation/doc/EXAMPLE.md +++ /dev/null @@ -1,10 +0,0 @@ -Find the name of the median colour in an image: - -```python -import numpy as np -from colour_estimation import closest_colours, RGB_COLOURS - -# let `img` be a cv2 image / numpy array - -closest_colours(np.median(img, axis=0), RGB_COLOURS) -``` diff --git a/common/helpers/colour_estimation/doc/PREREQUISITES.md b/common/helpers/colour_estimation/doc/PREREQUISITES.md deleted file mode 100644 index 693e4d848..000000000 --- a/common/helpers/colour_estimation/doc/PREREQUISITES.md +++ /dev/null @@ -1 +0,0 @@ -Ensure numpy is available wherever this package is imported. diff --git a/common/helpers/colour_estimation/doc/USAGE.md b/common/helpers/colour_estimation/doc/USAGE.md deleted file mode 100644 index 20741b2f2..000000000 --- a/common/helpers/colour_estimation/doc/USAGE.md +++ /dev/null @@ -1,12 +0,0 @@ -Find the closest colours to a given colour: - -```python -import numpy as np -from colour_estimation import closest_colours, RGB_COLOURS, RGB_HAIR_COLOURS - -# find the closest colour from RGB_COLOURS dict -closest_colours(np.array([255, 0, 0]), RGB_COLOURS) - -# find the closest colour from RGB_HAIR_COLOURS dict -closest_colours(np.array([200, 150, 0]), RGB_HAIR_COLOURS) -``` diff --git a/common/helpers/colour_estimation/hair_colours/black.jpg b/common/helpers/colour_estimation/hair_colours/black.jpg deleted file mode 100644 index 1cfb60d55918ca2d27f62c62797742394f6b8260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4209 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 Q9I~2vY+eFtJ?At31w#B?-v9sr diff --git a/common/helpers/colour_estimation/hair_colours/brown .jpg b/common/helpers/colour_estimation/hair_colours/brown .jpg deleted file mode 100644 index ac3368aa8884918b1775b5e78b5a712c91da2ded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6291 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 Ly7zxbyITBzU#B&; diff --git a/common/helpers/colour_estimation/hair_colours/brown.jpg b/common/helpers/colour_estimation/hair_colours/brown.jpg deleted file mode 100644 index 8005d3391d7b206d3091c5d2a708e68f0b1328d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4041 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 Q9I~2vY+eFtJ?At31w#B?-v9sr diff --git a/common/helpers/colour_estimation/hair_colours/temp/blowout burgundy.jpg b/common/helpers/colour_estimation/hair_colours/temp/blowout burgundy.jpg deleted file mode 100644 index e2918952490abbf863be54f3bb1623c55207a483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6516 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 VJ~H3I$~hvu;2#^U&!l-X|6kqEm|g$? diff --git a/common/helpers/colour_estimation/hair_colours/temp/butter scotch.jpg b/common/helpers/colour_estimation/hair_colours/temp/butter scotch.jpg deleted file mode 100644 index 090d91ad1c669e5b250e9c6a37ac18eae4f6280d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4525 zcmbuB`8U*$_s3r|V=RNoHuinVl6@I5Dr7CPWRxu#ne0L+BKy9LJt9kJtTQrW3E7tr zN!F302l;@f@x@I zXu*(wa}XE;u+p%JDCt-@LD@xpm31RvzbOdJD#G@cr0fLo6)my!i@=@D0Zf1AfLS4|z!l(xUF+JMf${eIgdax# z>nORC*MxjNG)v~r8E|90(MLuJ+g9JnJ6#}@;wV>CmRm(X6X%gP2_j-YXDbJ{)4XvE zaW!+ll9})ve3Ym}8sMOq_b2)pR?5%kzex@zj3n%L`)3TOyhvPscWHB0nG;GChv{Z7(PZ|nRDXCIf zjdOPls;RJ%5)&DKZbi$koS7m+eJCDd?#e7W5Mbw4T|}p2t5<>fHU|%FwUV;zU~EfS za(Y`sVa_>Kkle8~mCnb$3uCQxBC&HR#(?ElJumWujF-ABxwm`QFQ39bm~IzP4FZVQ z6wM!Bqm8i{gEkA9ZhDT&Rwa5fLh115kL$0~Xlsxw@sc-9PTU`tdg^c*eIp7o`YoDP z7j*kw2*d^TX3bxmn(dgT87Geanz70bl45AG8vn$F?!8)364~@&YEl7y^D_K)?N0pX zh5qPJkH~?!`_}%Jed~I48oVKi+EjEdjymlC=b+7@<+9dDPr1=bxl{Zo7G|_celce- zf+Ph-e`pwJ`j>k_tit%nDIh;y^W)F-jN@1A1;IDdRG>%R{ByJ;JRxjzU_Jr zDR+Vv7*eg)8}&QL2xf-rn$`?SY)-ZQy_MgxligP{|EGhNUgDXXvuWC@wlgwv4H7&3 z3bl1~b5$}*^GEOzmMktzmF8A(=QgwqC=AeqIm%Jlr*GQiI#?0;g^a4J7YMJppYeSX zar&Si!;xG%qIY-4+l+vy2pV<~F%pTB1t+aLRBHl}RebBe&hfJO5-Yo3lx9@ReiRc`-Exl*7H z(+S_u88}~>G2CU{Wyte9Ek{CKav#ky%p2taB9y4&1}bv-AJ7Hc=j2fXcWnNIEQ=Db z*zDmZhf7f{X)rmD9IWf$hg`B|IF}WkbSU^ZF_O8xJDKA!tQXn{~MESLjf=cC>nH^X`vO~|KXOxfm6l>~Mgkqz5 zod*YP(ZFXEZ5X6P3s(l$cL{WqXXQOtq!sQiEN(vX&XWdw2J9i+aOPA_HU0zYxDh5m z*bWy=x_AZ%&5m9Fnw{?lza5jtXWim^!^?%{sh5R|=*D}oxg6I8GWJ-sPT4{9;ctu_ z)4Xb5nzrW!9WZ2vh&og~-fKYF6E20S5xS9Ujawe*9f#N#x+yrdiBA7^_xs5#H!34; zoB<4MI~WfqUdbNbRO+1+->uhH(N|67x(&3owxz0R4MukTkaXJ8v3H^M#T3}Y=#OyJ z!LO;w9au`&mQv|Dw#mP8F46@zP>i_K_M+Wujav7);!;4pZ718Jc3@4_5m|H#mchtZ z*qw+PNl&wASu*I(wGp(wKrdeSW8cbYZ>CJpTe>cYF&Mktws-gYYNAO3;_@_aAI{Y;6v7SwzS?r4w6_RSN0 zHJvWgz@l#F8dlnI`C93k1Nd8TQTEK!<Wz zPmlDG;;)*;+7*&q`g*eMF3>WidTsj2GQ4FbRw&&lov0}OKG1w+xn*ljiRk*C$~4b9 zKFt+5WyIZLt8kI#a?a~s)qCCx)l$v9+^Zwe3|Zk_WYLC#G*MbdW^#o^Sdzc-P)q{6 zsyE<#^>Q}Av#)y!1+3PMd|YBy36#v^n&)p|4(#_><)<11lI?4+d-ALPOMkzx(iLea^!q@Qmh6z2H$bBR9Y|W|rK?W_#eDt+@6AI5c>KeU(snl>vT`+1g20@Z~oP1z| zis);_BmIld)JE+%U5$_UG9K0<+E#KpNpZl$!-Gry1in_cO)xvv>ue;6K}5(=@u_H8a%23u8>xqpfF^W;kJQ={N8@ zW+$FQF$4M<<5-^d1bh-UU8W$0l4`1=9G#{hhu^)94tIEAae&L}A262>Nu{rQ%3q-_ z5}`zH6?nKB#G#*aGp^g@_I;%bLIIG&GP4XRr*N&Ryb=$@>gGBM|E1B%-Ev z-=aZ@NuiD+c$oc&uEp`>b`~Z4@z0d7^+XY@usCLc^gGi*D~uDjuu5p+oBy2AJ4O@4 z*kl^&@Dsr?KFdr<=KR4I(OInO{#@q!wwG&jvgZUvM<8zbqt49{HjI#%irM)ks~O<& z`34mTQsUf86;iI9jXvIY!-zgsF^MR4TDU!VncEmf#r=@)p?r#OQ`3fq6L$9SUp1=C zUS4;2ofg+~$3RRP6Xs01mDW?z1AKIU92j+7D;}(T(8?F2`m9G0TCTxT2%;R5%nJ~-+*xVAGW-k?N-G7Noh<|uvv=rQ ze|>reUrq^O#~{&-P3b_h!jz%aog;*PnN{m6CWGB(y2{`?cej=658?UW4?q5>asaX> zWCOvwVs1{D-l>EbtmlOLz#5-IOQlG6j6~LbE#k*Jkt9DX2KPibnBwIfS!gdBO0?D} z5XWp_7Qeu}6qh)UK2}PSEV}M`mfqsAVhj(0ME$m&Nz*M<-m2};{{rK0MhF_ccI~@$ z^QjGA$hiaKyg3PZ!`gc1iQffilO#4eU+m@LLaww!y*SteInb_%4*J#!U4_da%AOY* zw){?*T&z1PQQ?u0APbfTgRF=#81ux3eE+zzXxnPnDEL@Kd(FE0JmwjQ4!A8l8qpKA zAEVAs*@lY5^|3y?eM(~==pF>K*=tZ-aA~KK>Mp#HI`u zUUceJpRB)6$i=nRHtaDk{;P+KA2O{NLsWTRmoAyjJ>HfxIy1lasveBne#4H((96xh zHlMsu4WHGf)8D+P;lafeQSZ_Iv!jW;-rt(x9|s<-cCcccaRrvw3wplrc8S<0wMZ7N zPG5zyw3T@I88{UbZIH~<==c+PBDh`D`FU*50M^}c>xuiKsuvNlDo%F;h!OLEM z#@z>=5q_h{D|5(IeS1r5-A9Uq4z0)U$bK1!vm{1UlXv?%t9By}J~?!y!DWX8;+0ts*eBvr znYmNx8*#ZQE9PpFEz87sc8(rG6s*Enn}~U6`AC2|MRaX`&a~v&87Z;A;hB)s)v`0^LHZ@e& zg?jQKyp?}?qn4LIluy2}C2ehGs9i??FGK%d`JbZL_p$s^vOgTyCr1fb6l`5@H^o_{ zcJBk}hkS|{o36rl+efJqZDt%|@$>NLbi3k(6yygb#ihIPNx>Ed$EeKD`NmMP2b_o4 z9DCoR%KaNsZagfqdL$_}ah{(HDXt(qQes0~`Iu5?6Np`fr7ho%lN608Ot6ADD0t-O zX5`Q(n`Cm5x(iXn8MM)Zbv2d?!DINrseymY_XstPqbU8-%sMx|7f$F0#OP$B?%9-B zpN@*0Bk16&`>UdB%;axIbvOIs4xYtsc0y)Jh%knT`-N#`_vq5$8=qUoI9wk8NMU3Q zy=5!59(zZ2zv#1l(qK(7ehiGH&ZI_L-_pO%oIXaBCG;nY9p2s!DI5qEzFXXuk1Nqu z@bCU}D5H^GU;vQ|r^BzuH>ats$b<^BX^8lE{3gz|WCdJwy($eimb5X_-1)Is&d3$d z^e#SBbB-znc!$7DiTzsgtxDo)cF3z&3*16BBv-fm%IS-U7WVzu~Are#^ZVE5g*z7mYd#Pw|*j;i*>ZQ zbAEhyi{lwFUKrFQeuYOS(8mHU@3%tqZ z=i!x-WF(ixDbkmY-Enev(`6dJ^(yjE=61JF4BtGga~>e>%D(8*n--3Jj&H#($!msT zpZBl4jAW~ppeSj?ja~2#%}rbvvkz}57`#nQZE|j@nx(aqaw;*=obAMPR04N)LuCG8 zes~!Xbswv+8Ax+oWU~Ja3+gAnSxZ_^R}EC}e}J5(-qM>OLtq??rsu0@k4WEqY+Dr1 zvGw<`JvL`bV#cvoKdl}0GshRX@hL(h(AY^S6v->KPxXDee7H1CMAy{f(K;zBSydOI zj@!*U`T}EH4doC+_YQGbB+~|6hWe++UF6Bk_7sXKhwZCCCF&)w4j8bO+j`tijF=E-oKwhwas!X+Jl;0&m zqoX{5CchvpkF24aG_&=y?k)dQiJya6*-y)5d7p{&N|D;82sO2*0$n-RzuK9d0czR9 Ot0eW**vnF9v;POG92gA% diff --git a/common/helpers/colour_estimation/hair_colours/temp/caramel.jpg b/common/helpers/colour_estimation/hair_colours/temp/caramel.jpg deleted file mode 100644 index 1a26d62c67506143964b8eb2f9148116649dfac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5811 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/chocolate brown.jpg b/common/helpers/colour_estimation/hair_colours/temp/chocolate brown.jpg deleted file mode 100644 index 7db8c90c971dd03aca732c4f05a83f2d2d782592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5239 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/chocolate-cherry.jpg b/common/helpers/colour_estimation/hair_colours/temp/chocolate-cherry.jpg deleted file mode 100644 index b7b9b2816182e6876311a494e2297eb156099aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5272 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/crushedgarnet.jpg b/common/helpers/colour_estimation/hair_colours/temp/crushedgarnet.jpg deleted file mode 100644 index 3723ce8cfe41ffc92d410c98acab0eaab856b12a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5786 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/expresso.jpg b/common/helpers/colour_estimation/hair_colours/temp/expresso.jpg deleted file mode 100644 index 7c64850a6203298f14edd7cb37594668016a9fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3804 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/french-roast.jpg b/common/helpers/colour_estimation/hair_colours/temp/french-roast.jpg deleted file mode 100644 index ac3368aa8884918b1775b5e78b5a712c91da2ded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6291 zcmbuCNVJe<57>>RwDl2ATAsN{8VQSs}_a&pQ#S~?C6 z5upF8;Hn2;rUF8NH{>8;fQ%VL&J4Qh2a*7Qj2!e|)c*wx`R|5;iU}Yi1CfI$$;rvd zAdtUZ5E(f$0A>-o!78j_>JpF+!IiMVnq)Q2#@z z!u(hEAE5t4{~r(;v(OCJ&&7OHI`l450>B2 z=N(`lc!&rols_!Ifh}vF5W45h&&_B%W+1BH4~PiBODJDm0dA_>lN2s?SthFaN2ed9 z-c}?YeJ8DQX;^yDwY8h>t}8*ex#-JW$_bFNZIYa|4{lBZP=?~oR5iwXghCPF8T^c~ z(OP`#S3o5-a-`R|h;^RM3M=Zs@Ui}SwHj(nDE!#(fjj@wa@_N{o^t`&N*V9WGY7vj z_CYgEjT~y*#HN-f^dApCKuZjyZ<5llfWUm%H`x_@4Q`O~R1v!tm%ID0Nwd;Icmn#k z`rWNXZm-n@TgB=5=qDTU7Hlj#KR9P)z8bl43Sl!m^C&{ZO`Z6Q zJHpc zn^<464*rm7EruBgL$-t^l8-l2l1g1O^ykp;!4aL@syMC$b zjvS;Y8!lDdhm)v~A5t!q>hLk8W&>}u&M^KSvS}ZgAAw5jHF4n07wfzB zc=NI5lJB8_OEFxor)aVV!}}_igM#URFCin&3skXJ&MVwKWWQD69^<`KuhmO9U9OqF z0u=Ef0r2KSu|B=juqBQ6BkO+D9!a(wvgMc!AMQuiufdP7$+;FpSfZy{sJ1xG+lTv3 z>fEx6s!zaUl~NJ|k@PyRX#9A7ejLMQD9=Z8SCNknHV$Xq)RsCDX>k;Y{w4$QOi4U! z^j+$fJ^_ngDAG|v`bAEvL@pV;@u(q4GOT-RviJG?)#Fl3I0EG9m2BJ82nfR zL(C=#jn3hSC?)0CR*Fa#x)}3lwnQbNIP?fACc*OMr(w!!_*#sL5S7z?#uZnUn%na# zibJ)YL1?4>-?Wa@mkf6@c(1jVd?RAbUe09&{~Hix$oY-)oxRh`D$32E;>d^}K_M^0 z!Z0lHyju}CmvO=M*Mp%nK|Y&j00kUsPy3l%mcD%6m;ZMGhZ+Oc+S@ZVD58KO)pWBm zZ6cMKWt^eZ!m++0lJwx^=$%=Qsz`mdcuMIm!gIyu6UKq)j1wPk2vSx95r{p2*nPr5 z8P9SC{YSZP8fFu?rm_wxdfdei2kA>@Rj&ZUZ;gk=<<9=&LEKk>pMv!GI#stRgo`Z9 z-{hjxJv_x5Fr*pjTD&(v6k&O_p)>KPw={WoE52RgxUBDbi6i|PJ2cr_3VjUm5LOmO zlpYj|XNymg`ZLVX99v9pF0{Het5^S2VoT){v9 zz3AY&0-PxCRU}zAEn1uAPX3b%qW>l7Mo|=syKB2d;t3epexOomi;UejErs!p!oigrKYg9gu?M2}SsLeFeUD8@9W z|13+-{u_YPCF?d0VFZWW^+#Hd7`_WZvii23&I8}8n2hkyuv>)#L>b$IMjq`T% ztxs0p-L92=d;JlY*oo^Yo?#MupcsDjXG?1Xt^4r*ufTk{2%*}XGT-$kTt(nk5@SGX5Kn4Q+Jm8^VUOl^cSsS8If357Sz3d0be-6m+B@?7L93$Yl|+p zhei+jvS{DR9*JhF=1QOP1NNTyJ@yd8o5~66bh<uLzUGBx!H@jx3>4VC-fS+Vw;`8xooYzkFxUPJQvuChacA;l z3S&RUM;L1^z2s=hYGH2+8j{-XyaN76C}nVurR&r{^1VoJk~6qsHs`Ci87B7!oye6; zT?coD#Bpv_#g}Rim2e_K@$votDpVye#q>QK%IWAlmT>6%9xo&;-W>( zxBihsln#YBG}c7Yx&XGhwPU60xl(|RiCi~(WcJJWan0#)(#kXQvRIhpl5Ct4fDvgr zIj+x>) z*3-fVjqKYkF3bWV6--a$TGK=VV*@x+5)>p4$hWG}kCRJ0Qtud5&_np}q{e@($HbGh zzV>{zZvwA;va#S^^CH?UGbikscNc~C)(=>_0Uy-D{q18y%%7x!z!69BT3*fl`*!w= zNOd1QO2X6EM~a$L2UvyjYJP9K?y^5zVN_G-Z=eH)c`2$kScWe-PoG>qCl9ax_W?M6 z-?(z^Y5inBdr2iCIjiS46T_g*q8hjdRGi-(xwvQ4Y6AgK8yYr%TFY z7uBBZpxt$$vKd97HQxB8Q(7gpFtJQuqVc4MkD0i_ywsQGr)C)>(h>{W?GFGRlXYYsG6yNq}j;a$$p!j*~Nk)`9aX;2kDtnsq&o%_ZdD_ zL3B?cy3XOgT>B+%CAewB&iI#@25=LP$fGy*eO9u$$cC58yc@}LMG31Wy2nd%1>WM8 zWE`$;S#^?b?i_l2XGgMK<--_-F238f^mOGIUkNjdBerW~^bB$z_7_{7%w}Z+XvYrX zdIpsE0ydX74iV!F@4&J)Qm(KhPkqi`T?4j}@+uyz$0Br-N}a;UyD7)-{y}0DFkSi! zvcrfM#&=;HFoU>GdREq;-YejlGDErV-vuUYnBfCYiV|;_K)Iu69QOJi{`|{`o7&^% z>rzinbEXaX99o1nel9%qrdk;!{R!KsmrHwY@_F|k#H!Ju5P&rI_t(AFjio(N%v7#K zPy5IRv*$~O(z+0HoxW$v&n1XWS3bnpm}>26_B`MZW1zkaSf=NGX5YnDhGE6cc)7IB zJzmFaKQm^sZK|YWM20NDj$^%?+MIQHQ`2=%{D}m#GJ+4*c%dioiPM>$SUdRh3NR^^ z0Y(=Z8{8av&W3vab(x;&g|SeZhRzc3C#9fH3l}}E8pS!s*|pmYI80dKr{TW37r>~Q zJqO2g#aH;2AzA5%CB!(~b{c99bt?@&ZL07glRgpbtmVMtEoI|5! z*JO2L%FHz@vsZ98Tb#7jdNfRjpUs$jYsvvhb`DML}GUH~oQ^!$VIwEu$PmWz~KG;SqSOaLSW_4XqLvPg@(9 zJK+zUtbDbNuk=Hu4?$F)1wPf*Orv)G+cQuu#rlnQRURyZyIt7Bc}xPQ5~;JW<`IH0 zleo;C`_wBh;z!M)M(n$MLH8(XU{)qWEO!1phQI=e$Uj<9C3`xDJ`$!d=_4q6C@7tN z_}YZ#(wvLgMP31>4#gkng2iOoO=pQHD=>uQEOxx!c@br2d6xa{&chQoBSu}J*S?%W z{GKo%X7@yOtg`3w#msz5sC1px6rShJ!Iku|MyJsWBcJ87MI&aZ zwhJs1X{fV3^f!y0+4tT`Tr^9nS4};iT%ad!ycHAugtWzz5QX5uV;Q*J?#~AsDmp#> z&^WeIHnLYVV<#8*SQ||`YQC?_xt~8|SmR7WJc@<#t}k_eH?A9G8ewA+CY0r?Hj<@E zKE%XY^GN9>9ko3D_+W9!;IuPT99#M9b?H(>!^5wcX}^YX0|TAj&JlO|)aR(FrZ0WtEM!@3<0abwJDvJ8_FM11VwMw1LIQ`RMWy*(0xxy{+FCDqz z(x5!X!o{qw@66sI+)Pgu>X3Vn4ISte1sml?A&Us3yFfLSlNdmD%VIL!sL7BxgZ7Q~xtF~4z*h%3W`$L9)DZgJwQ%ZeRd%Obmwm-FMHz)3 zh;C=|?P1+rEuPb|)L$+^xlAT0?FmVja<$PE%d+S;pc;&c^^Ed6hg3)B6lW+mg>1gV zV8)6Qe9OS5?K5!3{`FO69jUR*kSRH)EOS?rK9o3#1pLxAGmn523;Qw(oLn!o7aP96|M>v2fOPN>?zTFKMw zz4;C|IW27E$g?5%B{N3hp=Y1rr6WY=L@o&;5Mv?h zDM3G*8gbK-*t|&of*jRMue-Wez{jR*#l{A1C3zpCBSP1gJ~Emv5U6ggA6;1Ancf#Z zwv<9VO>Ye2M~hDyf8L`}Cwp}5Zp1DddCHIaaWL;67A-|Qlz!MpV;rI0EFN&i;Zw9d za}ThXtYh9pbxk1a0!GS@MxD=UhD=+ev*SgIR8wQA8nwS!DrGTcWEk^X5vSg7@N8~< z!FNhB7tc_Zi*(#+`S^wMdnTY`osLn3H_tm#7!-E1J0Q~5(j`|qTxu*NbcE_p)K7XV z6Wcm}cYx!BjKOiGI@@%FX8N$8UN2AKNRE)E+Fu{qOyb`)Dh7J!V8zF?B0+t@m-y^* zMYDeHIb#_Vi2(XGiM;jaT?0q7RkiuxV)m<-c=CdCQm3%knPaj{^CX5E8jQr0J1CswRuR3orD~+evKot(%UnN;2tgj)4jy#naMby?(wfut=2Fjn3iwm5l@A zzCq5nFbWsoZV5)LmUw{0>mpH_jaR;*S)86p*SCP>MdeT!N@Z~LWto1|)|y9<7# zRH(b;@D>ntoD^EF#0hDTb^ju}QBlcxEz3qULOHfvupOJlqNJ#a_Z0Phrg`YFVMZQ$ zUabK*Qp5R6wUBywFj(lED=^_$69v0)};PZKcv-4Yx{gW&jGd9eB!$e&dX7zt+7p6 z^Vp9V0&g>29yHz%)ibEmoH$$rB04?c&dnTmCDw-%tP`(*xtXOVLBAnmD7ZArugOEv zvfe4}HOr=S_MNSg*&NrGy%^(L7XjgL5rdIUf`FDt;=8fPhd&1)y(=n%!K17KTA7;n z(v2isvmQi9TG}3z^Y)x%%;Ry?)p z_PWxO(pj~8uWO1ib|>N`6IlA(A1xBg9HBnzJsAamCir4TB|J($OAjzu75-S_ZV<<= zxYK9PGU*Buxjns}dh%Fr*u1OYZHMN1SUNF{H%?svU8?Lx{+c0BYaQLu(QNEpNhK|^CtTnmgJUR-G!TtBdI5t*3+d`sQXyiGI4bicJ#wp z*0uQ0JY_?$+OydqZ5~ur!P|0|zw;JCh)_3y2jFuJW`;Y{VX?_0W&PAK6t^M;wu%jKBs;K@ql6JGZH zO&jEP3!7K;w?~3462qB{nuAmqsoD7Hpc3Ig9fWdLtC2a`@d@ zpV6p8_Kxn(#ewzat{ezg$Q5gSJ6WwUAzRbd+tZTe7 zvPfainQ&uir)?($mrKO8bv`C5Fh{sAc4ib@d^E@{n<&-y`aTkZVN%U@RU6n?0oU{E z2P!;4T>;<444T0qc35shdpnd^kKp5h{IynZV~Vxg|JDp=BEv-5t~;CPj*uMgYo~U| Ly7zxbyITBzU#B&; diff --git a/common/helpers/colour_estimation/hair_colours/temp/gray.png b/common/helpers/colour_estimation/hair_colours/temp/gray.png deleted file mode 100644 index 97b47262a1f0a345af179b6e378a382b6fdb1cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54379 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 aD*SPR)sBESC9-j6egSZ}Vtn-Z(*FUJ6p^6- diff --git a/common/helpers/colour_estimation/hair_colours/temp/jet black.jpg b/common/helpers/colour_estimation/hair_colours/temp/jet black.jpg deleted file mode 100644 index 2a56c66e494215d9f14e24c5b58148c1333b79a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3536 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 YTybjlT81jCwE_%OgD(qZ1g_@(3%#jFwEzGB diff --git a/common/helpers/colour_estimation/hair_colours/temp/light auburn.jpg b/common/helpers/colour_estimation/hair_colours/temp/light auburn.jpg deleted file mode 100644 index 7dd3c79f091360df0cd9e41374e5f1a9c2e3c1a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4432 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 S>UBIZJ>A~vU#*7A&;JFsdhT!l diff --git a/common/helpers/colour_estimation/hair_colours/temp/light blonde.jpg b/common/helpers/colour_estimation/hair_colours/temp/light blonde.jpg deleted file mode 100644 index bb8fe425d36573a5fe5082fbcb5667506d76fd16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5039 zcmbtXX*d*)w;pD!5o2qNouS5--3-Fm*D#m}zw9FGXk__W$Ck!2)@0wZgiM8@?8}TL zCDg=-P$J0|igLUE``qWb-|u*r&CKRuvoky5TA~Tvu;xnikn3jU63V32y43j=G0RFQ5 zAG-gPF@wPWAp`xNP7Gj131uFX9nd2zQBsA79ypr^Z~z(pN&|ucdH{ZpYofu3>cUA4 zMv)WVf112Gome_Juild^eSH5KGjO z<(+w>2iY4|o7k^SD9z3ZC>!dZ7pynTj845{Li>|iYN-CA-{)WWl`#O=qUr%MN3}9n zbxdgWN>9T;uo6c&Gg{-?T8!^QkdC!Jw@pcDDA$Mx-#~#OVV$tbGAsP%T*L#_+NgYN z=6D6(x~kZlg)K+7R;@L8w)*)ozIx=*aWWw%yuo`7`ltkPkj(8bRVW{p9r(_HOK8-N zdXpZwj;+spX|I)e&zV;O&49QqIG8uUvey~Vk%yLb8S-%s^3KdxixQ!Nz8zMlJgd4_ z-S~qlz8sSwiEMEN#fIT4(6t#Fh#=pI0U4(bR*di)QqWWRZ9JD&E^5IXM2MiM?VU^L z=hI3Y5PZe*`b~|$WQa^9B`8=4b$Deng!v{-Gp!-<8Hw{^oI1Ro@u|rDmbG6t$u?56 zCj|G`ofvb8Oh^F|$|h)X*rKrgLSByhd|c&u-A(@|)`FrqW{vl|Wf#|=2A(!Y5wO~^ zmHxQug=N3q_-Mai%d&_k0d{?<6c|^4w}OXq1#4nv+whZBI@ofpJ!`SuUt?SIZJNW4 zFbAv09-JKEIW2;&?x|wqv8cNJgS`x#qP@1R>cbLL=t$q(4Q_&`(b{^&138QCq7+N!3$sw6B%SdOt9(4Xw?Y$A{Ml}p{28{h z_P-TccPgAWW}nK}6Eqz3NsHo6CvLLVe0*D}d6$F$m2FtEdaE9E8AcX1&kt@nCXqyw zL+3<#4%##nub~7vjwM{;Ki~MIyHaj4{<1Dr%&TP$$Hb|x{srs1-R|1TdhWaHKK1w_gg4;fewWW<^CwP~Y?h(NJEMat7d4Yd{)iS{fmqlLfyk@dhyww5Lh5x!LfbyQk|iq+e8 zS0}jE?J9rolA4<@+?ClIq+|7ee}#_=lvBn-|Dn(4OtMPh4<2;Tew;+L71p?jqxt#hEx+y#3du>Yg=VQ_Cb8+Mf9sjJj%OO|$o?eHCLW499r`uf z1{nmnKWRj3h^7TA8yjJyQpXHC@YLg$Yi0zc{Sg{R>G@%35jM@@D`8uoPQV(QG1s*B zid-8`>5#qCf2`KKH+h$HuEX4;p>?@5{DI11sVsSz7)B(`-@AvKgMK>y3kzg!fk#NZ zr!f!y^dXFh%c!Vz3v>8yU-{~r0O(8a#Qjb
1c=c7lRuKk zkcX$jyg)m~A)v&Btz8}!B(N0f;P@2Y(2Wc_GTs!h=lAjLr_PY2W_fK5=PqwSR0PVt$kLpRczr>aVpzIG#@%s?&9 zgO%zd&E<&@kH$=HH#rY@mIzEiVn-aJ<5z42F`G)s!aQ6BiNBi`I6t+l#czz|==X~} zhXyQD>&U6->juC}kYW?|6D6@8)M@tgq1pd3>P;w+FDoE=SELrrVU@A7#=Nj~!cK&X3(9Do{;FVq+Am*o& zH^!D5n=WX=JD4w);Qyn+ZoCV&zhT(qBFqc)BEjrq97(j2zzi&>_(?>%7xz3)+oMSzTUwk+!6f_Y@UPwZ335=)AJ2mHQ@@Ji^&ga zq^mwnzo^$;J<0G0(Xtvzl+~vQWfL*}l|iykjbI`P;~Kw5t)FBNW^9h>M5<=iF)+Q<$D~bY7E@CyVH2y#q{LR3&&6X5rjfNkI^Lf>%> zcr8Re19TM7=+eWSp!cJpVtaX}`lCziKY^k3WQzFPS#>`WKO8O+Qu(sUWt*5MvG~n= z?Fe2m-(cE2BzM16KrMDiu92l&lYddBGxNSqyk+Rsf9p%*S6%ma(>@Yss|ye1jAQPP zIT<@-Rsyg)1%BfZu&$$8h%bl8uK(nAAeimI`1ykNVVQMPCVoLIT@)gw2~=@ ztV^Bcw47E$@l`e{P?pK9BK1i{udouAf}q|0i#et}+G#D;Y>p4S3KoT157i$2%IAX@t{G+J*0WyCe~Ck%v_p- zm_1Hq{`0vx;;|g}n2t{ZU8TU?1|peaZ-P5m$8O7b11^BdCzT>9gFWvSO_ht9N)al; zEURxFFDUY5v7z;mTPQx~VvCPOgHlL3cWi%)`gk{nsiR`C-H9ofH3sKL=)2uc5LYR zqKioT&49clXwLcP$8z;Qd>{B^*4$qv8P*~x>eTLcAB7e)q`58n5aL-&>Ib=2nKduF zXqsLX8E&)PQL$)d>ROF^;!eQ4wdZitW6lbNc)>96&Sgn|{s@BwB}(AzBjuEom%Z0% zr55*TK$7n0b1~;r?U2}Wstf7&gqarvTkWH!zjwnXr<1;5TT4@~L&N+owL7eZ--?TN zVXNLBklgN~;Rl*)4=>jZvwpxpzb(b~sl-Q*Gje&3wp@(2@7pjnndW*~k>MgTZI}9* z<>A#??`ws0(i9SqF;|izW)wY{rrjkcugE1^!G()I z0Mqa}tbye%+7I{Z0(8h2D zHG!omLlTtMJ1soh$k0g#9!)ud_q#mxxcXsS_a4F$!iopA)$0K=}3DN`jdGh(fqP zo$G)wkgAJw%QlQluIA@*$Ke~(KC zP|nS$!Q7`xf@q8}&==%B7py-{X;QNiusQaTz-fZ1sL?Y(LDMwnhh|uYNu`6|Q_i-4 zL~gUcMIq7j3Wib~M!lFVtLJRHXA7B*t6 z-Hv|i1q`CqvAWJlKU2N{&j1qW=KW>F3l^I2?!MU_DW>r2YR=1l->ur2Su&prz35I8 zP>k8C;%QXY1^sfHkw|Ln3_ntQH zJazGC5R@)_Kc(`O5Og(u)5(B~`KL5fhp!AhJLrd0Tyk3-<{;%KO>n zD+JuF5{#+XW`aXS7+FnSB3rV~H*#EKSOg}r^L|9gOEW#a8JnAv#rpAG@NCV<833bl zs?6}JO340v*6Q)2M|YN)a=eI1D9I-yCM5!vnA`rg_`F>6bvWryfilC7KNxykF`r7? z1&Jl>L__@Ab7+aU+LwAMQ2mg1#_U9>dc0=Zgb51zyb%VrSAAj(8vl1%0BsW*19iSV z)rm^zhe<_qFLU2am*G(#>HT*&5Ggnsa3_HvpdC}C6PV_2%WM$kL0HM)S}_n7Q=;L& z(xDB_-`O&Zv>#4hX?n?lmnee5ex=pKpV)9ftmglbH><^OP!H7$HY+6Dvhwf`#^c8H H&ffnQ1u+Du diff --git a/common/helpers/colour_estimation/hair_colours/temp/light brown.jpg b/common/helpers/colour_estimation/hair_colours/temp/light brown.jpg deleted file mode 100644 index 3ae276b24a9b4f9a2f4417e4d8afce346a5d3c21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3611 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 Q3z;GdPP};Y^=SHk07tea00000 diff --git a/common/helpers/colour_estimation/hair_colours/temp/light cool brown.jpg b/common/helpers/colour_estimation/hair_colours/temp/light cool brown.jpg deleted file mode 100644 index 3c59c7ace3b0f4b229ea2ce6ff4f6bfab8794953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5323 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/light golden blonde.jpg b/common/helpers/colour_estimation/hair_colours/temp/light golden blonde.jpg deleted file mode 100644 index f02c77e3921ec48dff9d0583d8e91bbd7d2046ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5005 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 PKZa2hpDa%{d^7zYwN@Gn diff --git a/common/helpers/colour_estimation/hair_colours/temp/light golden brown.jpg b/common/helpers/colour_estimation/hair_colours/temp/light golden brown.jpg deleted file mode 100644 index 6592a4f7d09fb78503580173849af0586173515c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4205 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 WHQsBDAzN3-U!MHMZ~+Wm%>4(srKscp diff --git a/common/helpers/colour_estimation/hair_colours/temp/medium champagne.jpg b/common/helpers/colour_estimation/hair_colours/temp/medium champagne.jpg deleted file mode 100644 index 5c10df03711037976c279a48fbb8c292c06f0505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5302 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 C5L(s% diff --git a/common/helpers/colour_estimation/hair_colours/temp/midnighrruby.jpg b/common/helpers/colour_estimation/hair_colours/temp/midnighrruby.jpg deleted file mode 100644 index c057e82bc280c92704c28e6e05db180217625682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5809 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/pure-diamond.jpg b/common/helpers/colour_estimation/hair_colours/temp/pure-diamond.jpg deleted file mode 100644 index 80da260a644733efe92bc425c6622448d037f1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6282 zcmbuCi8mC`+s9|j7)$njUq`Z3j6GYTvF}?#VUV3c2-!_x1~U<5iR@dp>RWpA_4*;Qr9IVB(JL}D5&Y{ z={q|=2L68m7rg*hT0l6U4FnVeP_Y6*tiX$Y02TnC0s;RM>i-E${ci;Vq+tP20YP9O z6&3xz3G~kkqyhoJtZbt4I+pCN)M6asuv=Dc@x_gONChkjs%IUXu(PeWGE(;dKi9ndH`m&w*eGmB!k3F@u@);U_@X~bhmT1NuDk9IC9dU52&gs_#NUSo@usO;9z&fFD zq`=zdkqb`oxf6OV^)jxfT8uiEt&fm%kzII>yM#~1N zVG20rEoZ9SP1n6rHM{R<|CZnd!@{X|YB$C0a8O=ebgA*h*x&zM}HZQq>Mfu!i?P2$Ni;C@QFSmstwocA+$^(EHb zf;>TCMb4UL*~XCs_@(mOAa83T4eFq7!!QLm?m1l+5_sK8a#8z*&twj`8zg)A6XmoB ze_4kHb3l$zdVhD=S^qLS`uUKw>L>jzletL~6bu$Fu9?B1)Zy}&E>1ED@ht-Kgzp6Z zm-_0#b)J{(TShMOJ z>Jvr#nO36Eaf7!}E4(6Ay+5gm6rvMviwt!pjbnSfDm^g@!gagNpIIMo< zF?7N56AOr%sa0C#p0<~+d>AfTH(ZZWvg8m4;%v?^jT!#cO6l~oy!31{!>yYd=#~k-D&!Mry_T)pF92fifOnGp{QI=deFu(FI7zU0Fw?Oku`D7AGNe@NH(;kxKYvB_ zM%zA1#<#K_q=BxUj&(r;ZSUA$+dHOj`)t0;PqMI=3SWuYjN-7tHuY4C-)O`E2*uxk z=Q1}p`@^S;8ciLiN>=p>>Jc3AEclwo-HR zp2B9%#uRpj1lT`PV>V$;2?e;kqZDElb}T3 z$ZITx*CRJA#UICVeB(lSNg6J}09p~-hJ$=4DW_@J48}HCsMf^WX}UDD7u zA-pIfQZYH^%}?N;44M2VLbo{@&%`v=l{X%sVEzHh zG9x~{g54M=oAws&hB>lh&-7qZ;|fj5%g7q){kNIzBQQ*N)tK$b-M6hOjJ|S2XdGk2 z-@Su?md&(oT>p>ITY@?cKh(MIF|WP-q);bUAq_7Llp!$EkN=?D?ZiY(1&T`Oe)lUa zWVVg+m&)BH)xLs3mg!W*%GQgXU`j<}4taGcVSMFxZD|+$BeZUw4{(-d+2Bx2JX2o&gT{=x>gx^=pN8YxWrlJJD8@cPcZ=|_>e2=< zKw|_YkfJX&-T{jo`6sCBaWpOg1b56PgFCQ=f=VW{O`8b?j_wtz-I~Fq4DBa0#7yfP*-{#YSwc^KYnva83*G}<_}PrKjM7tUHXMopi%DiOt!;K z&Sn*Pt}Z-!{aq^^^bMpe6YvXJTKH7^B^tcOMg^O(*8rt6dJXfiqA>@%>YVpHx}pWk zgIR~DWb`E56N8g5KU{)H4QF9hj$;=9{V)%iEF=mL+hWvrwR~E*xX1ncliOTKpn~2} zpP%p_(wWz*l$pHw*s@#rX$*WNp#=G|WVM~<0wB^W&LbHpeo)S3LZT{Br4hF~5vrC+ zr=NbLHVyA?p$~2%=prd7QzzD+X6tLS-kcopBd`};Q z+P=;t+-m*4Y&OfY&Nu(-r)V;nwOZpOu)MnCz6c&HgQOvv;UM}hiH!@5I@N9XnJ)dj zaDRo>S(|MrsGi|Up7ASV}-+VHjD>{yagqwean;De8xA z{!}A$KtpL{Tv6da_Q$dT4Mf(V;@bNVJgCuIOYo7b^eiUDJq7g)JB(frnF{r=mmi}W zxz<4wy;LyRBGH9zpX?w4pMosM)twGn47R>3?$*d#B2*bZ75z~8bSdgO)~U4U_kOor zmQ&TP7UEKkj`UCEK2_qxOpyM5U)kRthL`JuVk1?L1CERG+@L(<{73w%TQ9XD=2Xyn zT8)P8G$@)4`nhS_;F6>tKUOmY;iKdKV{l@^`79wd(J>0k6Ws2{Fudf36J& zGmc%&47V~Xy0pRlB%hn0m^}LI>B30I#vR$q$iFOE{>BaBZa1{1vg_vM5m%`6T+(TJ z7&KqjAw)g)phG-IbSt2e&9{>M;!)mq%i@y&88Kv?I%nEcUfskE{yc-NjX5rmM)CH| z0dYNZ{fUA&`d$UO6Q}@HY@+G8aA=c0KeV$KFG`@ZwmD30Dt)~eOL|4gj z3e9;=4nJ_HEu$O!2w_Bu5YuhHe2+&J!wTMncdBaM zu2J45BHt?+*_n9tRYyJc9=50ckiaMoVZ6e5)p&(CtM;%MPhJC6f24|!d4`WEtflOe zjbAV^I=yccam6my@mR^~{qng0!B=;CRWPj=kZwn)y*{g5#zwGuNV_9_+DuTMra}B+ z(#N(yI|?l8>Rqi^I;J^1UPHg{Y#k(Pu;XEas($X^FdBaL-Df7kYjYQXcnODEh%R!i z>8ATcP@JM!$P=29TjbdRS==aty8%VErjNLus7tOU>RAcO@>8%8b{YXU6iu_q&zk4I zVpJN|$slRQUHOHV-5SR0=-PhUz|gBJQQmOYA&>?{dm>h;rCABRA#@YnTB<>fI8(a+ zgDVaB=ki7(`fQ&D8vD|L1GNi5!TW~_uA(VSJ126LBknonZlg$vSPEzGPr}xh6oYh~ z6ohcZH45`ccRkirw{}(FsSZPN;&qqp+Y$+j0gE`gc*DhsHHJ+M1LnWBO<_&#d-tih zRqrJjgcDEePxvUSE5m&?_sN;#zwgFtFw|U`mqZKcROwNR4t-bImA2h0=L&AKEA_OQ z?VIcmP+lDT>xfaoMt?-{%WX%BwKaF9|ME6{syetR8N|FCP#Ff9{@%o#c}Dt7gS1$U z$jM$W3l!KEYh|Cg|CpAIGxsBNg8sb8D~;3*fN?ILGB1N1((qi;r;Szr2164|Z~YB( zsNDsCzTGp;noZD*XTR|2fd+{qEB{_0>fV*A5Mue7WJ?e8>K4o!NtDe?&^8*UI{3pV zlS?5A`h|n`ls-qp@vEOvR^UXiFhf`BPgmJ7q@VrD{Xz-N#P>iY1v9p-VsvN8X@Sz4 z%wk=Z3a}92NO;|A+$611Ku%IRI{mh2Tl;4OQ;eaqRRoiYc%UN5aplVgq7D0@J3r`n z>heoHC6l^w7>o@6my5VZkW@oR88)1;c`ukoX;nnZp2v_$F6K8f6(W#Q7AFV`xK+5f z1h$&ex&RPmYj;i|UmayhEbX$TSyO`}D)7^~JF_Fx{*^xRD=Q2!{wS5xkAx_W+ui34 z;vhQ}A>K$aRDt=l^t!?E>u=^)7N+=(kh33i8~?nu2IPX&tJZQ%>^!{6z?`D3sPbp>8ZQUcj^9G%&JhBP&0b(I?645>nwo|B}UC)IfD zK}8WtnA)bfj#Qm0MNHn7B!g6%yt#FtmE@ewy>Lnf#X^NNR4z5SCX-+=e}`WnV`tR; z2kyOPbu=Rlks)GQ@p;O;@STFH(~mcu_5LDnL)lo7AWs?%^y7(p^9ouuVg6TZY}i7I zduOnV?Mi7Q+hpY)+~p%9#JW)z_N-2-x?)D^8%XxOWME9~SXQQhN#5z3671PD_x4-U zz1(!D6&)$>suJBVA7_mo_t> zMIJr@{HRgxawyIb(Hk^=f4Jbnyyw-~`X#t6d0VZei+Z%S=!I=C_rJd^W0U6OAFKFx zZQK?EVnnMu3u1bzGL?uxH)(svdv(an%Hz-Zgy|<=+S)#R|EaNFp(c;Jp;7!M0g`_F zO$xiu&8zR94j;I~#1rJD?f`DADPjoC%0kuw)e*#^qN(kVRZa#%8`#YOe(OzC8R|;yA{*?#SuFycRAz^E!qz z7=eU~fu2#`WC=n=}V(ua6#{9V9F)y=qO@xyzporsxKT zV#&ev@ch{(avwB=VGW{&+~^b9AN_E-sr~skWG1iOt%ywFM(GQ{#=<)_yS>ZP2CPIy zV#GKeb>>T}Tspr#>e+xhr&b{f)j*bWn4DdR1&}|~%`CSdaK4e&r4!dGjXfHNZ zN*vaulg|Oy6wSy9q`vNi$Qy+4qpSX4(_>#wF6QY_hn?uR3M53QvZmJ1zWq-51@+_E z>S?z1;=1`0{XvH=Loz#WKayIWTB^)exb9lSXUsKikZS=K&(ZnD1kZ0>|cI7!P-ZlJCu9(+-$N_i zuc5=Dpcol8v_P+&Z>=V}Flh_ks0?B>%C29!2a@uaze?6ho--F>dedDPUeVf|SmI{$ zriktgW0Wn|zwDH)ExmsIFuS_lLlPE&uc2EzX6%V@cI#QS&10;E0({9$Ml~6QtQo>!OTb{yju&&;5H=X}>OGsb%QjPKG9 z<@YUJfN(-^qzg>ms!TnpOK>DADOza#BSX+f9F)g%drhsVz7A8GuH?}D z1nsHdl3`cy5EYk1)bj|k<9dZZJmRcXfU%VXl^`i@Wk#D8+c3kM9?*>mn<}f$87u9J G+5ZBJ_J!>L diff --git a/common/helpers/colour_estimation/hair_colours/temp/red hot cinnamon.jpg b/common/helpers/colour_estimation/hair_colours/temp/red hot cinnamon.jpg deleted file mode 100644 index 3b5185bbed6a7185136653ac794a5dedeec8d2df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3878 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 diff --git a/common/helpers/colour_estimation/hair_colours/temp/rubyfusion.jpg b/common/helpers/colour_estimation/hair_colours/temp/rubyfusion.jpg deleted file mode 100644 index 4c2174cc2753066291254b1e9945a8eb5e39ab85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5129 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 aYh5+X&K%zBNJp5)<<+1n$O6-^=Km9CBpd1g diff --git a/common/helpers/colour_estimation/hair_colours/temp/sparkling-amber.jpg b/common/helpers/colour_estimation/hair_colours/temp/sparkling-amber.jpg deleted file mode 100644 index e36223b9cd3bcf29e1aa3af9f8851ccc48e53fa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6345 zcmbu4^9Jm>Gs-(`SV7pH>*Kp+4B{WI`)9*6>{|3^?LH7zX- zEiD5*9UVObjPb%h!?>7Png0zJ2a=tQ9myfa&&|y*c0~j&az!4CmDkeHvbPTd{eJ`g zb^|b4AQ)(cfCK?B3*UXdQa4K*`xo^e{a@O@|G^L{YAEdA7JvZY zf5-k8fnWmCs$f4B6O39!@!vUs@gD)hATZzt@ZOfq)wMj6?w_g1P1Ior1NL0~$W-Sm8r$Hh5^7W_dg3`an-ZhG>do1^# zvm3XjP^dFRs{0eFXpDzd-j;K#!AZh!g>FCylvqQIh}cTEwOc7!T`X*m;L=g?YBDDl zfR=oz1v?^bB-;%lN2`kEk+LCdnukXgNjVW9x=S-uM`)bKgu-u)CcxSHTL;e!KULA7 z`>(hMECL8Qv~HxruGd_3nh>`HIFe7naAv1VOr_k5-746pjC_Zh^H=W{WG-_SN3OD0 z$3AtV=@cW6aP0dzM;*Y8o4YQv4yM+*}nN34Aaz2zKdfSkFyh>R zmSgU+{K7*+fyMBLzpUn~O2tFMjr{sB7wmZIuR1(|=fvzSu3p_WDrBybG4d_Fi_~RN z{N4axPz^%2_Ut|5-Q9zEq^Vb<9H9!-wgMk7CBk7TZ94^C>6Rr|TV5y_5`C+HVIAaX z!T~c>o{D(USb@G6B5$GiGL~K;kmpav^y;)p8Ocw0pzxKapBf6^l4ZeFz+|qsWPPOE zBEd2zeSLuMw8Vgpw0<)AJSfOBF2Y9rNn)&LQD@k3CGN{}iTj~V8l&@VOSBMK|L<^? zu)y}xwy>HWXJ;C7DRdhT%{6@v{?O{TEqPk4@dePJDVf@?%*3qF2~tc*ZCQ%gW;?6& z7pN0B{DS`*NgltnK%*mXtSnZ_Zab0N(^iTJxUrb*&Kf(TTpg6+ypq zIE8Jj(~IU}5|}*GU&ew|&6QCFjn6j);=TFMxroP%$K|2X3#W{EbhUH|mX_TKJmJ4h zdHBuFG&8gI7mZNqb?iDhDKwhAY|ok^g>^Oxm@SoUCdO>~T8~Ux3+<>ArLYD{#p9w^ zIlK9fb$|z+W&`&vo13gRlQB)r3Oq*x0+K!XhXr(!jVHGqqbhXCMyM;M42x+@U z5Z~AZ%JWC|`pgeQ#TPZOJ>EWh&t^EBos2YZwku~03kgC5E5TO14kwLre72ZrXyUj0 ztvzxB=Vka4%`$(X`QPjbX;V(wF>~Lc>TZY|&c@z`*F7HKL~8avWHpg?#|vSgg(}_T zIs<=R?nAsnUwOehvK&I*i2-IXNbAkh4VJsy8xBi@Fbmx>X|LnljGPNuaT3mnLWgQo zgvjOzs*I7Ezx)R%PvGk-(&=X}e!XyvkJ84H)oO;8*1dzDcgn`hsY7lm*)Zeoiatk3 zghLlMj(?Q9TuWnjYu#i|{kA|y19yvB74B~qRz)06LZ$T$(kb3ejSkzJa_{aiO5uNz zCVeiDTyN_yH`V3h#l8%8hgLTCl1}tv9X$to3*XTm-}p%|ak-Mi0-y)^wV07&DB|eX z+4i;sDg^9;Dds?(ccQgizM=IriQm>F<4K1G>^R@wFqGP#a&t+z06KWMVuf-yy~l^0 zt}A(ag(~R4A*8_(uMmi)AZ{7Wm1CPD)`Bx|_NDSug-bfEKSf7sb&+ny5(_iE%dEkI znvc5J@Xc$(d4Bif(^tz!9QqsIADVN~OpfAdQ45aGcX(<$;FkiPJqiC_+pgFie{_jb_3}<^m$v&%ul%Df@M1uVzjeW!opEKj zG+!6@j7QOJj0Y}?7U_+&;)2;a5LPT{J!el5N*G$px$lK<(;_`NvEB&$(yA&I< zg*JoWo4kQXfx@}qr^QJZJ-qk6*k(SK=U*4RRFz|4H25eNQw6dGHuOO|x z-{*wia^^1k`Ng91YEIQp>ed+KO$Q<^gd~$%w#;Wgf%doLa<#f zwrtFDLwmlU2O-(L;&^p|>ihCzY*X{|Hgp;l^0sO^*FnmNuK<0f^E&IzMH}nB-1TCk z!;Hu;`{U(u$)~C}`5f=x`5+y`Md4=`WwTqkfI~2>U0#nX&D$DRG1wOScr~{0i5Pc478M~1TBHD*KEUX{x zWFL+<4|*IOYsyr}mD?MnMB!BTB8_~%$?^W6hs&~m)qa@n&hx3m4EBuhS#@x8*V@5N z-mj)+xd;x<{n~;xQqKA6BHjBWafcCC5(dx1!s1+8ms39oZa+ORL*>PWb`%t)d41Mx z`*hTH2bMzJZYer{5R5F!r+4kG%kswdJ26WC1={?fyBIKNWt3}RY52ryj%k?4IQ*cW znkw9=&^@r`*Awc_lGVAe*3@~%ATIp!+E)347P~eZ?=*qxY_5A91RzYbl>V`YXiijI zxc%gT$|70hm-$77@9#dY7N;%mn126WP#9ALV9Z#>jh zd^;VnI>7UyHGvM3mG!feF^#NSdE{B7Yg$9vJ}>F44&&d0S`#C7-qa$(%AX28H`9?Y zG(L&=ode>-8!H*y{b({<{E@BWaG|Jkf3|OG;>X|~e}b#t9V&`Uu_ zfm!1fyakQxa6#f7qP(s$?Ixae8yVz4RnOj&$YJ^yyfOLW42B2~#x(9%&DtFD(>hKD zF4O&{@YJX#&D45h&KWlZPv{G|5-$_GXH(^caU=E`#5`xDY!5|HJwD!g;^7(EXH3&y z;(@-z0DeH+&GN<_*;$$)72#T&mqcH3N?NQKi&9$qyqR_|a@z80;JP7HfBZYNE@%59 z>8R$7b8OTgThn39lZe?_MgB9_ZLzR2lgA-jnNq2O;-JaqNSg875ZAF3Xzl^zg&>}4 z8~~|MpU2SD%IGl*sLkp2?e&uUKFW!_1HYPH$b5p!6sAfPqX^_=dlI&$E7wf5*y37a z@Y%j9_>IVjh@Tc6eug*Z1{Mw3HxEMM`!tLhAGj)4l>2*J&66V}W?IkmGI-LdFtk>4 zWfY+Ppk80RP$T5q)c+#*lMXD|A%punoAzZVDkj@rzcw`4g?BT2)%41H-!{&5bsyx7 zp@nSu(%Pge#W~^r^nD7@jDvd*xOUdETVCS0M+d~)L5IDrCK}?;ASYGWt4EYBWJo}h20Vf z2&EQd5Q^!z&%GKM71_5^*3$=zjAT-)q>OBfd75dQB<%8;>y*XpRAzv~pzd8lewQqz zBoa%Tnn544dAInk5j0Par1V^#teA05?{6sByu|GV6OI@I&a5v zdw``HiN_QGj5!->7byxqxmd0OF}$-4rF(uu z^Re0zb_hMb4Z&WnvHmS~9LM|etT>6SHI}O>a7S_ZQMiHYS}OI78*8At=%oi_Pj3&^ zZfpEEgfKEwh;bgkgRjGhQ+c&y?*^>>{5t^?E}X5FNsNoJ4&kg?thX*xE?=Y2aqssd zrZLFm+W5->jHcVeJLpaLWdG?*^vuPfTS_l=p1-nmlf7%MD2re3jM~hd`eoMGX^_Qa zF7RMbo9XGRq;>PET<6Y?)Qq6)>%j{7{zfBI=G7%<@|ktQ9}_7ew@=re!FLraIABug zjZ~7|^&y0^<&aj}f%igMs1HKoGWAL3PI-2j?BBPXXyaf@aEFMS2`fkmy%f*WC!c|G z6E=9*R%V273Lf9u3nyg8x%<6YJgCZZu@+LflP)Hp*icG!E_NxM^q4eBmpbJis?b=1 zt5qU(ZfdAPup^b^;ekeeknNXMh8LUZv2PLM1g*^OT{{tQ1727IQ{B)F$(cErT0E-$ zgHCM4%0$0(MZYQpQZ*B9QX5FwwS_yd(L=h-qZiUOHG7|0rRO&rU|-e+E44Kjom*=3 z{~mv~Wm*OK_=57BbodV0;5_IzPfd6l%U^WQ*D$ao>!9ZOx;qP?Pw@Np+6!8`*G75xlTHw6>Id4TTuXV| zu6!K)^B@^18cuUgk!`oYFYq3Xq%yE=FyZ5sR8GixsdCFamb(etZat?#|Gr7;RbV^k zSH4;opZcKz=ZqJby%9#5`T)nn6u4%{yLBORB6r#CvW9QSwWa)TZtM(t+CSEJSmeI| z1)#=nl$w(Zne7aGxU@~_$}S>t42y4NT_slNJk_4!P^3x(sClzq=F0idPMg!bvLL)s zv0i4rO}8->$W_gLd(HHNqP$7rYmbk-8Cv&!T;YkDO(l_rhUN||p(o|Zn7(=;Zniin z`g@>9X`#D%p6jyQx-NVZ@$wFZl(%o?cu}kxm*-0`DmpBK{opTYOc6)r*9^Vh#2#E> zZN_FK2^wyc$(gNJmE~0_7Da0#?8JPaO;(DTzaUfJED~Y6xooPahN?&H-$p%eFntPdY2Y-FafjR0Zo{sXt0F zyn}M*Yc}txpITViQm{uLGk@p}SWT}PO_G~2yR()Buo}? zaj%w$h4n+NwOAxTtG|ktYKr2PY|p&G)%||81y8OI+K~)&@e}xY86)oxg7@)$sss1#P)L>%YKZ8lEhJ3S&rNQoom50F>TC2e}Sr4OcJ+ zN>!)tz4LL~sr~&@7!L3Dx|c&=$C-{jFZzmSIdYqj04JNc1Jp8oiIoKX?+Cxcxso_U zPRhL?t^5Mlxjc38{=}%DvQ+rfJz~19`60`->ng4yn>e`1^m_vA8pZ?>f0kNi{A^~^ zva7T3C;v!_{m4!Nd;j4|J)2cvqKKoOsH6H&9M$#RlR+|M{J*=n)Q`CnX{J2@fALcXN47Au#+ zXQD$laV1V3m^QT0Q!Aeb;c6~s`5n0{41Zr)PSan;#Zo=E#%4WPONFHb2gu~VOk04Z z>2xDmjA||3*CjTVy7Mn|y$zU&<94|C)IDEkTG57nKehjoVv>~abvKJCN_rdzk~Zd< zvaVD~vcdM}$9`ywmX*n;FOZ%inUwBjT^`Z2?x7CFhX$pQ|z5C02eGF!cr1x-#7#@FUzqbzr;3KGX|| z1cxOzyw_EAg7;Kdir~x3-hM@%TbtJqZe@j>{pQzBcwVZonXlDZ8ZeocDbeB|{oSC> zI-s2*Tpg+Qv3dQ1s@m41d8N^Z`s~s3upIj?=Qv5+)av%mbk#KouY-A|O<~K1g|LR> zy%d_g8v**WgMQipT`eZ9zP6d-#-yEhC~@mO#M`q8LpJHizSV8f>0K5n(!UbS;?o$?b^O8ID?i(pXTz!vcr`Vf9W#uY< zmKw!ICkbMq{xtqR$)@7w)ju3R$Y%SnvT+f#JcAMV^dDuU@-bek1xlCVSB$i2xl5p3 z7ocU)k(yBWsNt4+#21|1qXMyo>I=Ub{!zD>q_Mt47AY0{NtEH!AJqxNYMd=RB2Eu* z<+{E5Z?eBhKE>M^kk-K$V?;w}rEpBa0Xrmd^IF4#otDlWxW7!U__J`O8S_fhm`{Ia F{|mBFUmE}b diff --git a/common/helpers/colour_estimation/hair_colours/temp/sunflower-blonde.jpg b/common/helpers/colour_estimation/hair_colours/temp/sunflower-blonde.jpg deleted file mode 100644 index 48b0181bfbb707a1e7e1862dd4809a0eb096334c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6002 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 YGGYn%+~s^_A>#@)hqa*H@XLk&0k$&Mng9R* diff --git a/common/helpers/colour_estimation/package.xml b/common/helpers/colour_estimation/package.xml deleted file mode 100644 index ad3ef2d8b..000000000 --- a/common/helpers/colour_estimation/package.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - colour_estimation - 0.0.0 - Python utilities for estimating the name of given colours. - - - - - Paul Makles - - - - - - MIT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - catkin - - - - - - - - diff --git a/common/helpers/colour_estimation/setup.py b/common/helpers/colour_estimation/setup.py deleted file mode 100644 index 55caf62e8..000000000 --- a/common/helpers/colour_estimation/setup.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python3 - -from distutils.core import setup -from catkin_pkg.python_setup import generate_distutils_setup - -setup_args = generate_distutils_setup( - packages=['colour_estimation'], - package_dir={'': 'src'} -) - -setup(**setup_args) diff --git a/common/helpers/colour_estimation/src/colour_estimation/__init__.py b/common/helpers/colour_estimation/src/colour_estimation/__init__.py deleted file mode 100644 index fca2fdc13..000000000 --- a/common/helpers/colour_estimation/src/colour_estimation/__init__.py +++ /dev/null @@ -1,324 +0,0 @@ -import numpy as np -import os -import cv2 -# import torch -# from scipy.ndimage import convolve - -from .rgb import * - - -def closest_colours(requested_colour, colours): - ''' - Find the closest colours to the requested colour - - This returns the closest three matches - ''' - - distances = {color: np.linalg.norm( - np.array(rgb_val) - requested_colour) for color, rgb_val in colours.items()} - sorted_colors = sorted(distances.items(), key=lambda x: x[1]) - top_three_colors = sorted_colors[:3] - formatted_colors = [(color_name, distance) - for color_name, distance in top_three_colors] - - return formatted_colors - - -# def avg_color_float(rgb_image: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: -# mask = mask.bool() -# avg_colors = torch.zeros((rgb_image.size(0), mask.size(1), rgb_image.size(1)), device=rgb_image.device) -# for i in range(rgb_image.size(0)): -# for j in range(mask.size(1)): -# for k in range(rgb_image.size(1)): -# valid_pixels = torch.masked_select(rgb_image[i, k], mask[i, j]) -# avg_color = valid_pixels.float().mean() if valid_pixels.numel() > 0 else torch.tensor(0.0) -# avg_colors[i, j, k] = avg_color - -# return avg_colors # / 255.0 - - -# def median_color_float(rgb_image: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: -# mask = mask.bool() -# median_colors = torch.zeros((rgb_image.size(0), mask.size(1), rgb_image.size(1)), device=rgb_image.device) -# for i in range(rgb_image.size(0)): -# for j in range(mask.size(1)): -# for k in range(rgb_image.size(1)): -# valid_pixels = torch.masked_select(rgb_image[i, k], mask[i, j]) -# if valid_pixels.numel() > 0: -# median_value = valid_pixels.median() -# else: -# median_value = torch.tensor(0.0, device=rgb_image.device) -# median_colors[i, j, k] = median_value -# return median_colors # / 255.0 - - -# def plot_with_matplotlib(frame, categories, masks, predictions, colours): -# """Generate an image with matplotlib, showing the original frame and masks with titles and color overlays.""" -# assert len(masks) == len(categories) == len(predictions), "Length of masks, categories, and predictions must match." - -# num_masks = len(masks) -# cols = 3 -# rows = (num_masks + 1) // cols + ((num_masks + 1) % cols > 0) # Adding 1 for the frame -# position = range(1, num_masks + 2) # +2 to include the frame in the count - -# fig = plt.figure(figsize=(15, rows * 3)) # Adjust the size as needed - -# # Add the frame as the first image -# ax = fig.add_subplot(rows, cols, 1) -# # frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) -# ax.imshow(frame) -# ax.set_title('Original Frame') -# ax.axis('off') - -# # Iterate over the masks -# for i, idx in enumerate(position[1:], start=1): # Skip 1 for the frame -# ax = fig.add_subplot(rows, cols, idx) - -# # Create an RGB image for the colored mask -# colored_mask = np.stack([masks[i-1]]*3, axis=-1) # i-1 because we skip the frame in position - -# # Apply color if category is detected and color is provided -# if predictions[i-1]: -# if (i-1) < len(colours): -# color = np.array(colours[i-1], dtype=np.uint8) # Convert color to uint8 -# color_mask = np.zeros_like(colored_mask) # Initialize color_mask with the same shape as colored_mask -# color_mask[..., 0] = masks[i-1] * color[0] # Apply color channel 0 -# color_mask[..., 1] = masks[i-1] * color[1] # Apply color channel 1 -# color_mask[..., 2] = masks[i-1] * color[2] # Apply color channel 2 -# # Now combine the colored mask with the original grayscale mask -# colored_mask = np.where(masks[i-1][:, :, None], color_mask, colored_mask).astype(np.uint8) -# # Show the colored mask -# ax.imshow(colored_mask) -# # print(np.max(mask_image)) -# # mask_image = masks[i-1] -# # ax.imshow(mask_image, cmap="gray") -# else: -# # If there's no color provided for this category, use white color -# mask_image = masks[i-1] -# ax.imshow(mask_image, cmap="gray") -# else: -# # If the category is not detected, keep the mask black -# mask_image = masks[i-1] -# ax.imshow(mask_image, cmap="gray") - - -# # mask_image = masks[i-1] -# # ax.imshow(mask_image, cmap="gray") - -# # Set title with the detection status -# detection_status = 'yes' if predictions[i-1] else 'no' -# ax.set_title(f"{categories[i-1]} - {detection_status}") -# ax.axis('off') - -# plt.tight_layout() -# fig.canvas.draw() - -# # Retrieve buffer and close the plot to avoid memory issues -# data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8) -# data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) -# plt.close(fig) - -# return data - - -def count_colours_in_masked_area(img, mask, colours, filter_size=3, sort=False): - """ - Counts the number of pixels of each color within the masked area of an image. - - Parameters: - img (numpy.ndarray): An RGB image, with the shape (height, width, 3). - mask (numpy.ndarray): A binary mask, with the shape (height, width), where 1 indicates the area of interest. - colours (dict): A dictionary where keys are color names and values are the corresponding RGB values. - filter_size (int): The size of the convolution filter to apply for smoothing the image, default is 3. - sort (bool): Whether to return a sorted list of colors based on pixel count, default is False. - - Returns: - dict: A dictionary containing the count of pixels for each color in the masked area. - If sort is True, it also returns a list of tuples, each containing a color name, its proportion in the masked area, and the pixel count. This list is sorted in descending order based on pixel count. - - The function first applies an averaging filter to the image for smoothing. Then, it calculates the Euclidean distance of each pixel in the masked area to the predefined colors. It identifies the closest color for each pixel, counts the occurrences of each color, and creates a dictionary mapping colors to their respective counts. If sorting is requested, it also calculates the proportion of each color and returns a sorted list of colors based on their pixel count. - """ - avg_filter = np.ones((filter_size, filter_size, 3)) / (filter_size ** 2) - img_filtered = img - # img_filtered = convolve(img, avg_filter, mode='constant', cval=0.0) - colours_array = np.array(list(colours.values())) - masked_img = img_filtered[mask == 1] - distances = np.linalg.norm(masked_img[:, None] - colours_array, axis=2) - closest_colours = np.argmin(distances, axis=1) - unique, counts = np.unique(closest_colours, return_counts=True) - colour_counts = {list(colours.keys())[i]: count for i, count in zip(unique, counts)} - if sort: - total_pixels = sum(counts) - sorted_colours = sorted(((list(colours.keys())[i], count / total_pixels, count) - for i, count in zip(unique, counts)), key=lambda item: item[2], reverse=True) - return colour_counts, sorted_colours - - return colour_counts - - -def average_colours_by_label(labels, colours): - """ - Computes the average values of colours associated with each label. - - Parameters: - labels (dict): A dictionary where keys are label names and values are lists of binary values (0 or 1). Each list represents whether a certain feature (labelled by the key) is present (1) or not (0) in a set of instances. - colours (dict): A dictionary where keys are label names and values are dictionaries. Each inner dictionary maps colour names to lists of values (e.g., pixel counts or intensities) associated with that colour for each instance. - - Returns: - dict: A dictionary where keys are label names and values are sorted lists of tuples. Each tuple contains a colour name and its average value calculated only from instances where the label is present (1). The tuples are sorted by average values in descending order. - - The function iterates through each label, calculating the average value for each colour only from instances where the label value is 1 (present). It then sorts these average values in descending order for each label and returns this sorted list along with the label name in a dictionary. - """ - averaged_colours = {} - - for label, label_values in labels.items(): - if label not in colours.keys(): - continue - - colour_values = colours[label] - averages = {} - - for colour, values in colour_values.items(): - valid_values = [value for value, label_value in zip(values, label_values) if label_value == 1] - if valid_values: - averages[colour] = sum(valid_values) / len(valid_values) - - sorted_colours = sorted(averages.items(), key=lambda item: item[1], reverse=True) - averaged_colours[label] = sorted_colours - - return averaged_colours - - -def load_images_to_dict(root_dir): - """ - Load images from a specified directory into a dictionary, removing file extensions from the keys. - - Parameters: - root_dir (str): The root directory containing the images. - - Returns: - dict: A dictionary with image names (without extensions) as keys and their corresponding numpy arrays as values. - """ - image_dict = {} - for filename in os.listdir(root_dir): - if filename.lower().endswith(('.png', '.jpg', '.jpeg')): - img_path = os.path.join(root_dir, filename) - # Read the image using OpenCV - img = cv2.imread(img_path) - # Convert it from BGR to RGB color space - img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) - # Remove the file extension from the filename - name_without_extension = os.path.splitext(filename)[0] - image_dict[name_without_extension] = img - - return image_dict - - -def generate_colour_table(image_dict: dict, colour_map: dict): - """ - Generates a colour table for each image in the given dictionary, counting the colours in each image. - - Parameters: - image_dict (dict): A dictionary where keys are image identifiers and values are image arrays in the format (height, width, 3). - colour_map (dict): A dictionary mapping colour names to their respective RGB values. - - Returns: - dict: A dictionary where keys are image identifiers and values are colour tables. Each colour table is generated by the 'count_colours_in_masked_area' function and contains a count of how many times each colour (as defined in colour_map) appears in the corresponding image. - - For each image in the image_dict, this function creates a mask that covers the entire image and uses 'count_colours_in_masked_area' to count the occurrences of each colour in the colour_map within the image. The results are stored in a new dictionary, mapping each image identifier to its corresponding colour table. - """ - colour_table = {} - for k in image_dict.keys(): - colour_table[k] = count_colours_in_masked_area(image_dict[k], np.ones((image_dict[k].shape[0], image_dict[k].shape[1])), colour_map, sort=True) - return colour_table - - -def compare_colour_distributions(avg_colours_dict, colour_table_dict): - """ - Compares colour distributions between a dictionary of averaged colours and a dictionary of colour tables for individual images. - The comparison is based on calculating the Euclidean distance between the colour proportions in avg_colours_dict and each image's colour distribution in the colour_table_dict. - - Parameters: - avg_colours_dict (dict): A dictionary where keys are colour names and values are their averaged proportions. - This dictionary represents the averaged colour distribution over a set of images or a specific category. - colour_table_dict (dict): A dictionary where keys are image identifiers and values are colour tables for each image. - Each colour table is a list of tuples, with each tuple containing a colour name, its proportion in that specific image, and the pixel count. - - Returns: - dict: A dictionary where keys are image identifiers and values are the Euclidean distances between the averaged colour distribution and the image's colour distribution. - - The function calculates the Euclidean distance between the colour proportions in avg_colours_dict and those in each image's colour table within the colour_table_dict. - It accounts for common colours between the averaged dictionary and each image's table, using zero for missing colour proportions in either distribution. - The distances are stored in a dictionary, mapping each image identifier to the calculated distance. These distances represent how similar or different each image's colour distribution is compared to the averaged colour distribution. - """ - distances = {} - - # avg_colours_dict = {colour: proportion for colour, proportion in averaged_colours_list} - - for image_name, colour_data in colour_table_dict.items(): - colour_proportions = {colour: proportion for colour, proportion, _ in colour_data[1]} - - common_colours = set(avg_colours_dict.keys()) & set(colour_proportions.keys()) - avg_values = [avg_colours_dict.get(colour, 0) for colour in common_colours] - prop_values = [colour_proportions.get(colour, 0) for colour in common_colours] - - distances[image_name] = np.linalg.norm(np.array(avg_values) - np.array(prop_values)) - - # sorted_distances = sorted(distances.items(), key=lambda item: item[1]) - - return distances - -# Example usage -# sorted_distances = compare_colour_distributions(averaged_colours, colour_table) - -def extract_top_colours_by_threshold(colour_list, threshold): - """ - Extracts top colours based on a cumulative proportion threshold. - - Parameters: - colour_list (list): A list of tuples, each being a 2-element (colour, proportion) or - a 3-element (colour, proportion, count) tuple. - threshold (float): A float between 0 and 1, representing the threshold for the cumulative proportion. - - Returns: - list: A list of tuples (colour, proportion), sorted by proportion in descending order, - whose cumulative proportion just exceeds the threshold. - """ - # Sort the list by proportion in descending order - sorted_colours = sorted(colour_list, key=lambda x: x[1], reverse=True) - - # Extract top colours based on the cumulative proportion threshold - cumulative_proportion = 0.0 - top_colours = [] - for colour in sorted_colours: - cumulative_proportion += colour[1] - top_colours.append((colour[0], colour[1])) - if cumulative_proportion >= threshold: - break - - return top_colours - - -def find_nearest_colour_family(colour, colour_families): - """ - Determines the nearest colour family for a given colour. - - Parameters: - colour (tuple): The colour in RGB format. - colour_families (dict): A dictionary where keys are family names and values are lists of representative RGB colours for each family. - - Returns: - str: The name of the nearest colour family. - """ - min_distance = float('inf') - nearest_family = None - - for family, representative_colours in colour_families.items(): - for rep_colour in representative_colours: - distance = np.linalg.norm(np.array(colour) - np.array(rep_colour)) - if distance < min_distance: - min_distance = distance - nearest_family = family - - return nearest_family - diff --git a/common/helpers/colour_estimation/src/colour_estimation/rgb.py b/common/helpers/colour_estimation/src/colour_estimation/rgb.py deleted file mode 100644 index 40d018fdc..000000000 --- a/common/helpers/colour_estimation/src/colour_estimation/rgb.py +++ /dev/null @@ -1,190 +0,0 @@ -import numpy as np - -COLOURS = { - "red": [255, 0, 0], - "green": [0, 255, 0], - "blue": [0, 0, 255], - "white": [255, 255, 255], - "black": [0, 0, 0], - "yellow": [255, 255, 0], - "cyan": [0, 255, 255], - "magenta": [255, 0, 255], - "gray": [128, 128, 128], - "orange": [255, 165, 0], - "purple": [128, 0, 128], - "brown": [139, 69, 19], - "pink": [255, 182, 193], - "beige": [245, 245, 220], - "maroon": [128, 0, 0], - "olive": [128, 128, 0], - "navy": [0, 0, 128], - "lime": [50, 205, 50], - "golden": [255, 223, 0], - "teal": [0, 128, 128], - "coral": [255, 127, 80], - "salmon": [250, 128, 114], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "platinum": [229, 228, 226], - "ochre": [204, 119, 34], - "burntsienna": [233, 116, 81], - "chocolate": [210, 105, 30], - "tan": [210, 180, 140], - "ivory": [255, 255, 240], - "goldenrod": [218, 165, 32], - "orchid": [218, 112, 214], - "honey": [238, 220, 130] - } - -SPESIFIC_COLOURS = { - "red": [255, 0, 0], - "green": [0, 255, 0], - "blue": [0, 0, 255], - "white": [255, 255, 255], - "black": [0, 0, 0], - "yellow": [255, 255, 0], - "cyan": [0, 255, 255], - "magenta": [255, 0, 255], - "gray": [128, 128, 128], - "orange": [255, 165, 0], - "purple": [128, 0, 128], - "brown": [139, 69, 19], - "pink": [255, 182, 193], - "beige": [245, 245, 220], - "maroon": [128, 0, 0], - "olive": [128, 128, 0], - "navy": [0, 0, 128], - "lime": [50, 205, 50], - "golden": [255, 223, 0], - "teal": [0, 128, 128], - "coral": [255, 127, 80], - "salmon": [250, 128, 114], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "platinum": [229, 228, 226], - "ochre": [204, 119, 34], - "burntsienna": [233, 116, 81], - "chocolate": [210, 105, 30], - "tan": [210, 180, 140], - "ivory": [255, 255, 240], - "goldenrod": [218, 165, 32], - "orchid": [218, 112, 214], - "honey": [238, 220, 130], - "lavender": [230, 230, 250], - "mint": [189, 252, 201], - "peach": [255, 229, 180], - "ruby": [224, 17, 95], - "indigo": [75, 0, 130], - "amber": [255, 191, 0], - "emerald": [80, 200, 120], - "sapphire": [15, 82, 186], - "aquamarine": [127, 255, 212], - "periwinkle": [204, 204, 255], - "fuchsia": [255, 0, 255], - "raspberry": [227, 11, 92], - "slate": [112, 128, 144], - "charcoal": [54, 69, 79] - } - -DETAILED_COLOURS = { - "light_red": [255, 204, 204], - "bright_red": [255, 0, 0], - "dark_red": [139, 0, 0], - "light_green": [204, 255, 204], - "bright_green": [0, 255, 0], - "dark_green": [0, 100, 0], - "light_blue": [204, 204, 255], - "bright_blue": [0, 0, 255], - "dark_blue": [0, 0, 139], - "light_yellow": [255, 255, 204], - "bright_yellow": [255, 255, 0], - "dark_yellow": [204, 204, 0], - "light_cyan": [204, 255, 255], - "bright_cyan": [0, 255, 255], - "dark_cyan": [0, 139, 139], - "light_magenta": [255, 204, 255], - "bright_magenta": [255, 0, 255], - "dark_magenta": [139, 0, 139], - "light_orange": [255, 229, 204], - "bright_orange": [255, 165, 0], - "dark_orange": [255, 140, 0], - "light_purple": [229, 204, 255], - "bright_purple": [128, 0, 128], - "dark_purple": [102, 0, 102], - "light_pink": [255, 204, 229], - "bright_pink": [255, 105, 180], - "dark_pink": [255, 20, 147], - "light_brown": [210, 180, 140], - "medium_brown": [165, 42, 42], - "dark_brown": [101, 67, 33], - # ... -} - -COLOUR_FAMILIES = { - "light_reds": [[255, 182, 193], [255, 192, 203], [255, 160, 122]], - "dark_reds": [[139, 0, 0], [178, 34, 34], [165, 42, 42]], - "light_blues": [[173, 216, 230], [135, 206, 250], [176, 224, 230]], - "dark_blues": [[0, 0, 139], [25, 25, 112], [0, 0, 128]], - "bluish_greens": [[102, 205, 170], [32, 178, 170], [72, 209, 204]], - "light_greens": [[144, 238, 144], [152, 251, 152], [143, 188, 143]], - "dark_greens": [[0, 100, 0], [34, 139, 34], [47, 79, 79]], - "yellows": [[255, 255, 0], [255, 255, 102], [255, 215, 0]], - "oranges": [[255, 165, 0], [255, 140, 0], [255, 69, 0]], - "purples": [[128, 0, 128], [147, 112, 219], [138, 43, 226]], - "pinks": [[255, 192, 203], [255, 182, 193], [255, 105, 180]], - "browns": [[165, 42, 42], [139, 69, 19], [160, 82, 45]], - "cyans": [[0, 255, 255], [0, 139, 139], [72, 209, 204]], - "greys": [[128, 128, 128], [169, 169, 169], [192, 192, 192]], - # ... -} - -SIMPLIFIED_COLOURS = { - "red": [255, 0, 0], - "green": [0, 255, 0], - "blue": [0, 0, 255], - "white": [255, 255, 255], - "black": [0, 0, 0], - "yellow": [255, 255, 0], - "gray": [128, 128, 128], - "orange": [255, 165, 0], - "purple": [128, 0, 128], - "pink": [255, 182, 193], - "light blue": [173, 216, 230], - "dark green": [0, 100, 0], - "light gray": [211, 211, 211], - "dark red": [139, 0, 0], - "beige": [245, 245, 220], - "navy": [0, 0, 128] -} - -HAIR_COLOURS = { - 'midnight black': (9, 8, 6), - 'off black': (44, 34, 43), - 'strong dark brown': (58, 48, 36), - 'medium dark brown': (78, 67, 63), - - 'chestnut brown': (106, 78, 66), - 'light chestnut brown': (106, 78, 66), - 'dark golden brown': (95, 72, 56), - 'light golden brown': (167, 133, 106), - - 'dark honey blonde': (184, 151, 128), - 'bleached blonde': (220, 208, 186), - 'light ash blonde': (222, 288, 153), - 'light ash brown': (151, 121, 97), - - 'lightest blonde': (230, 206, 168), - 'pale golden blonde': (229, 200, 168), - 'strawberry blonde': (165, 137, 70), - 'light auburn': (145, 85, 61), - - 'dark auburn': (83, 61, 53), - 'darkest gray': (113, 99, 93), - 'medium gray': (183, 166, 158), - 'light gray': (214, 196, 194), - - 'white blonde': (255, 24, 225), - 'platinum blonde': (202, 191, 177), - 'russet red': (145, 74, 67), - 'terra cotta': (181, 82, 57) - } \ No newline at end of file diff --git a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py index b7d0d6006..4d3adfecb 100644 --- a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py +++ b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/__init__.py @@ -1,8 +1,5 @@ from feature_extractor.modules import UNetWithResnetEncoder, MultiLabelResNet, CombinedModel # DeepLabV3PlusMobileNetV3, MultiLabelMobileNetV3Large, CombinedModelNoRegression from feature_extractor.helpers import load_torch_model, binary_erosion_dilation - -from colour_estimation import load_images_to_dict, generate_colour_table, count_colours_in_masked_area, compare_colour_distributions -from colour_estimation import SPESIFIC_COLOURS, DETAILED_COLOURS from lasr_vision_feature_extraction.categories_and_attributes import CategoriesAndAttributes, CelebAMaskHQCategoriesAndAttributes from lasr_vision_feature_extraction.image_with_masks_and_attributes import ImageWithMasksAndAttributes, ImageOfPerson diff --git a/skills/src/lasr_skills/describe_people.py b/skills/src/lasr_skills/describe_people.py index 2cc2a5516..c87cf6504 100755 --- a/skills/src/lasr_skills/describe_people.py +++ b/skills/src/lasr_skills/describe_people.py @@ -6,7 +6,6 @@ import cv2_img import numpy as np -# from colour_estimation import closest_colours, RGB_COLOURS from lasr_vision_msgs.msg import BodyPixMaskRequest, ColourPrediction, FeatureWithColour from lasr_vision_msgs.srv import YoloDetection, BodyPixDetection, TorchFaceFeatureDetection, TorchFaceFeatureDetectionDescription from numpy2message import numpy2message From d43e5ab19862387c7c513292c0a8c7e3827fb8bc Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 16:58:20 +0000 Subject: [PATCH 09/18] removed colour_estimation dependence --- common/vision/lasr_vision_feature_extraction/package.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/common/vision/lasr_vision_feature_extraction/package.xml b/common/vision/lasr_vision_feature_extraction/package.xml index 4019a147a..a9c995e2d 100644 --- a/common/vision/lasr_vision_feature_extraction/package.xml +++ b/common/vision/lasr_vision_feature_extraction/package.xml @@ -53,7 +53,6 @@ lasr_vision_msgs cv2_img feature_extractor - colour_estimation From feb4e80d62a051c76047757eade551a6470a1261 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 17:03:05 +0000 Subject: [PATCH 10/18] cleaned usused comments --- .../nodes/service | 64 ------------------- 1 file changed, 64 deletions(-) diff --git a/common/vision/lasr_vision_feature_extraction/nodes/service b/common/vision/lasr_vision_feature_extraction/nodes/service index 0c896a64e..7d3357729 100644 --- a/common/vision/lasr_vision_feature_extraction/nodes/service +++ b/common/vision/lasr_vision_feature_extraction/nodes/service @@ -29,73 +29,9 @@ def detect(request: TorchFaceFeatureDetectionDescriptionRequest) -> TorchFaceFea response = TorchFaceFeatureDetectionDescriptionResponse() response.description = rst_str - # response.detected_features = str(class_pred) + str(colour_pred) - # response.detected_features = [] - # for c in ['hair', 'hat', 'glasses', 'cloth',]: - # # colour_pred[c] = {k: v[0] for k, v in colour_pred[c].items()} - # sorted_list = sorted(colour_pred[c].items(), key=lambda item: item[1], reverse=True) - # # rospy.loginfo(str(sorted_list)) - # if len(sorted_list) > 3: - # sorted_list = sorted_list[0:3] - # sorted_list = [k for k, v in sorted_list] - # # rospy.loginfo(str(colour_pred[c])) - # response.detected_features.append(FeatureWithColour(c, class_pred[c], sorted_list)) return response -# def detect(request: TorchFaceFeatureDetectionRequest) -> TorchFaceFeatureDetectionResponse: -# # decode the image -# rospy.loginfo('Decoding') -# frame = msg_to_cv2_img(request.image_raw) - -# # 'hair', 'hat', 'glasses', 'face' -# input_image = torch.from_numpy(frame).permute(2, 0, 1).unsqueeze(0).float() -# input_image /= 255.0 -# masks_batch_pred, pred_classes = lasr_vision_feature_extraction.model(input_image) - -# thresholds_mask = [ -# 0.5, 0.75, 0.25, 0.5, # 0.5, 0.5, 0.5, 0.5, -# ] -# thresholds_pred = [ -# 0.6, 0.8, 0.1, 0.5, -# ] -# erosion_iterations = 1 -# dilation_iterations = 1 -# categories = ['hair', 'hat', 'glasses', 'face',] - -# masks_batch_pred = binary_erosion_dilation( -# masks_batch_pred, thresholds=thresholds_mask, -# erosion_iterations=erosion_iterations, dilation_iterations=dilation_iterations -# ) - -# median_colours = (median_color_float( -# input_image, masks_batch_pred).detach().squeeze(0)*255).numpy().astype(np.uint8) - -# # discarded: masks = masks_batch_pred.detach().squeeze(0).numpy().astype(np.uint8) -# # discarded: mask_list = [masks[i,:,:] for i in range(masks.shape[0])] - -# pred_classes = pred_classes.detach().squeeze(0).numpy() -# # discarded: class_list = [categories[i] for i in range( -# # pred_classes.shape[0]) if pred_classes[i].item() > thresholds_pred[i]] -# colour_list = [median_colours[i, :] -# for i in range(median_colours.shape[0])] - -# response = TorchFaceFeatureDetectionResponse() -# # response.detected_features = [ -# # FeatureWithColour(categories[i], [ -# # ColourPrediction(colour, distance) -# # for colour, distance -# # in closest_colours(colour_list[i], HAIR_COLOURS if categories[i] == 'hair' else COLOURS) -# # ]) -# # for i -# # in range(pred_classes.shape[0]) -# # if pred_classes[i].item() > thresholds_pred[i] -# # ] -# response.detected_features = "feature" - -# return response -# test test - rospy.init_node('torch_service') rospy.Service('/torch/detect/face_features', TorchFaceFeatureDetectionDescription, detect) rospy.loginfo('Torch service started') From d7c7a007748d8346bf8fa9218b52f4c87195691c Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 17:05:39 +0000 Subject: [PATCH 11/18] cleaned comments --- .../src/receptionist/states/speakdescriptions.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/tasks/receptionist/src/receptionist/states/speakdescriptions.py b/tasks/receptionist/src/receptionist/states/speakdescriptions.py index 2ae42a465..45090e389 100644 --- a/tasks/receptionist/src/receptionist/states/speakdescriptions.py +++ b/tasks/receptionist/src/receptionist/states/speakdescriptions.py @@ -8,20 +8,8 @@ def __init__(self, default): self.default = default def execute(self, userdata): - + # don't worry, this works. for person in userdata['people']: self.default.voice.speak(person['features']) - # for person in userdata['people']: - # self.default.voice.speak('I see a person') - # self.default.voice.speak('Yes I do see you. I am trying to turn to you. But if I do not move my head, it is your own issue, not mine.') - # for feature in person['features']: - # if feature.label: - # if len(feature.colours) == 0: - # self.default.voice.speak(f'They have {feature.name}.') - # continue - - # self.default.voice.speak(f'They have {feature.name} and it has the colour {feature.colours[0]}') - - return 'succeeded' From 4b626e99bba0fac08f3f87050ebfded05ea2a1fb Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 17:07:41 +0000 Subject: [PATCH 12/18] renamed torch_module to feature_extractor --- .../src/{torch_module => feature_extractor}/__init__.py | 0 .../src/{torch_module => feature_extractor}/helpers/__init__.py | 0 .../src/{torch_module => feature_extractor}/modules/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename common/helpers/feature_extractor/src/{torch_module => feature_extractor}/__init__.py (100%) rename common/helpers/feature_extractor/src/{torch_module => feature_extractor}/helpers/__init__.py (100%) rename common/helpers/feature_extractor/src/{torch_module => feature_extractor}/modules/__init__.py (100%) diff --git a/common/helpers/feature_extractor/src/torch_module/__init__.py b/common/helpers/feature_extractor/src/feature_extractor/__init__.py similarity index 100% rename from common/helpers/feature_extractor/src/torch_module/__init__.py rename to common/helpers/feature_extractor/src/feature_extractor/__init__.py diff --git a/common/helpers/feature_extractor/src/torch_module/helpers/__init__.py b/common/helpers/feature_extractor/src/feature_extractor/helpers/__init__.py similarity index 100% rename from common/helpers/feature_extractor/src/torch_module/helpers/__init__.py rename to common/helpers/feature_extractor/src/feature_extractor/helpers/__init__.py diff --git a/common/helpers/feature_extractor/src/torch_module/modules/__init__.py b/common/helpers/feature_extractor/src/feature_extractor/modules/__init__.py similarity index 100% rename from common/helpers/feature_extractor/src/torch_module/modules/__init__.py rename to common/helpers/feature_extractor/src/feature_extractor/modules/__init__.py From f5b3cda13d9edea59185b1ea8b92c35c7a0b74f2 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 17:51:01 +0000 Subject: [PATCH 13/18] removed unused import, launch file and functions. --- .../nodes/service | 4 +- skills/src/lasr_skills/describe_people.py | 53 ++++++++++--------- tasks/receptionist/launch/test.launch | 5 -- 3 files changed, 28 insertions(+), 34 deletions(-) delete mode 100644 tasks/receptionist/launch/test.launch diff --git a/common/vision/lasr_vision_feature_extraction/nodes/service b/common/vision/lasr_vision_feature_extraction/nodes/service index 7d3357729..bd67bbf38 100644 --- a/common/vision/lasr_vision_feature_extraction/nodes/service +++ b/common/vision/lasr_vision_feature_extraction/nodes/service @@ -1,7 +1,5 @@ -from lasr_vision_msgs.srv import TorchFaceFeatureDetection, TorchFaceFeatureDetectionRequest, TorchFaceFeatureDetectionResponse, TorchFaceFeatureDetectionDescription, TorchFaceFeatureDetectionDescriptionRequest, TorchFaceFeatureDetectionDescriptionResponse -from lasr_vision_msgs.msg import FeatureWithColour, ColourPrediction +from lasr_vision_msgs.srv import TorchFaceFeatureDetectionDescription, TorchFaceFeatureDetectionDescriptionRequest, TorchFaceFeatureDetectionDescriptionResponse from cv2_img import msg_to_cv2_img -from feature_extractor.helpers import binary_erosion_dilation, median_color_float from numpy2message import message2numpy import numpy as np diff --git a/skills/src/lasr_skills/describe_people.py b/skills/src/lasr_skills/describe_people.py index c87cf6504..0960f3403 100755 --- a/skills/src/lasr_skills/describe_people.py +++ b/skills/src/lasr_skills/describe_people.py @@ -6,8 +6,8 @@ import cv2_img import numpy as np -from lasr_vision_msgs.msg import BodyPixMaskRequest, ColourPrediction, FeatureWithColour -from lasr_vision_msgs.srv import YoloDetection, BodyPixDetection, TorchFaceFeatureDetection, TorchFaceFeatureDetectionDescription +from lasr_vision_msgs.msg import BodyPixMaskRequest +from lasr_vision_msgs.srv import YoloDetection, BodyPixDetection, TorchFaceFeatureDetectionDescription from numpy2message import numpy2message from .vision import GetImage, ImageMsgToCv2, Get3DImage, PclMsgToCv2, Get2DAnd3DImages @@ -24,30 +24,31 @@ client = actionlib.SimpleActionClient("/head_controller/point_head_action", PointHeadAction) # rospy.logwarn('making client') -def point_head_client(xyz_array, u, v, client): - u = 480 - 1 if u > 480 else u - v = 640 - 1 if v > 640 else u - target_point = xyz_array[v, u] - - point_camera = PointStamped() - point_camera.header.frame_id = "xtion_rgb_optical_frame" - # point_camera.header.stamp = rospy.Time.now() - point_camera.point.x = target_point[0] if target_point[0] != np.nan else 0 - point_camera.point.y = target_point[1] if target_point[1] != np.nan else 0 - point_camera.point.z = target_point[2] if target_point[2] != np.nan else 0 - - goal = PointHeadGoal() - goal.target = point_camera - goal.max_velocity = 0.3 - # goal.min_duration = rospy.Duration(1.0) - goal.pointing_frame = "head_2_link" - goal.pointing_axis.x = 1.0 - goal.pointing_axis.y = 0.0 - goal.pointing_axis.z = 0.0 - - rospy.logwarn('sending the goal and waiting, moving to: %s' % str(list(target_point))) - client.send_goal(goal) - rospy.logwarn('end') +# Todo: This one not cleaned for now because it might be moved somewhere else. +# def point_head_client(xyz_array, u, v, client): +# u = 480 - 1 if u > 480 else u +# v = 640 - 1 if v > 640 else u +# target_point = xyz_array[v, u] + +# point_camera = PointStamped() +# point_camera.header.frame_id = "xtion_rgb_optical_frame" +# # point_camera.header.stamp = rospy.Time.now() +# point_camera.point.x = target_point[0] if target_point[0] != np.nan else 0 +# point_camera.point.y = target_point[1] if target_point[1] != np.nan else 0 +# point_camera.point.z = target_point[2] if target_point[2] != np.nan else 0 + +# goal = PointHeadGoal() +# goal.target = point_camera +# goal.max_velocity = 0.3 +# # goal.min_duration = rospy.Duration(1.0) +# goal.pointing_frame = "head_2_link" +# goal.pointing_axis.x = 1.0 +# goal.pointing_axis.y = 0.0 +# goal.pointing_axis.z = 0.0 + +# rospy.logwarn('sending the goal and waiting, moving to: %s' % str(list(target_point))) +# client.send_goal(goal) +# rospy.logwarn('end') class DescribePeople(smach.StateMachine): diff --git a/tasks/receptionist/launch/test.launch b/tasks/receptionist/launch/test.launch deleted file mode 100644 index f7bab932d..000000000 --- a/tasks/receptionist/launch/test.launch +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From 216aba01b3bd1bd20c3f62f771bafb9d064168c6 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Mon, 11 Mar 2024 18:48:07 +0000 Subject: [PATCH 14/18] reset --- tasks/receptionist/launch/setup.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/receptionist/launch/setup.launch b/tasks/receptionist/launch/setup.launch index 94b78e340..71bce994b 100644 --- a/tasks/receptionist/launch/setup.launch +++ b/tasks/receptionist/launch/setup.launch @@ -24,7 +24,7 @@ - + From 45f8334642a7f59b798814ed94719c33421e8c9d Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Fri, 22 Mar 2024 14:51:22 +0000 Subject: [PATCH 15/18] Remade to achieve easier bodipix model loading --- common/vision/lasr_vision_bodypix/.gitignore | 2 ++ .../src/lasr_vision_bodypix/bodypix.py | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 common/vision/lasr_vision_bodypix/.gitignore diff --git a/common/vision/lasr_vision_bodypix/.gitignore b/common/vision/lasr_vision_bodypix/.gitignore new file mode 100644 index 000000000..2de3a7027 --- /dev/null +++ b/common/vision/lasr_vision_bodypix/.gitignore @@ -0,0 +1,2 @@ +models/* +!models/.gitkeep \ No newline at end of file diff --git a/common/vision/lasr_vision_bodypix/src/lasr_vision_bodypix/bodypix.py b/common/vision/lasr_vision_bodypix/src/lasr_vision_bodypix/bodypix.py index d5aa6c518..b366b7af4 100644 --- a/common/vision/lasr_vision_bodypix/src/lasr_vision_bodypix/bodypix.py +++ b/common/vision/lasr_vision_bodypix/src/lasr_vision_bodypix/bodypix.py @@ -12,8 +12,12 @@ from lasr_vision_msgs.msg import BodyPixMask, BodyPixPose from lasr_vision_msgs.srv import BodyPixDetectionRequest, BodyPixDetectionResponse +import rospkg +from os import path + # model cache loaded_models = {} +r = rospkg.RosPack() def load_model_cached(dataset: str) -> None: ''' @@ -26,9 +30,9 @@ def load_model_cached(dataset: str) -> None: else: if dataset == 'resnet50': # name = download_model(BodyPixModelPaths.RESNET50_FLOAT_STRIDE_16) -# rospy.logwarn(name) +# rospy.logwarn(name) /home/bentengma/keras_model/tf-bodypix/tfjs-models-savedmodel-bodypix-resnet50-float-model-stride16 # model = load_model(name) - model = load_model('/home/rexy/.keras/tf-bodypix/3fe1b130a0f20e98340612c099b50c18--tfjs-models-savedmodel-bodypix-resnet50-float-model-stride16') + model = load_model(path.join(r.get_path("lasr_vision_bodypix"), "models", "keras_model", "tf-bodypix", "tfjs-models-savedmodel-bodypix-resnet50-float-model-stride16")) # model = load_model(download_model(BodyPixModelPaths.RESNET50_FLOAT_STRIDE_16)) elif dataset == 'mobilenet50': name = download_model(BodyPixModelPaths.MOBILENET_FLOAT_50_STRIDE_16) From 672136175daa95d87c262d6e959c629a0b6a4f0c Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Fri, 22 Mar 2024 14:54:35 +0000 Subject: [PATCH 16/18] added a break in the loop --- tasks/receptionist/src/receptionist/states/speakdescriptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/receptionist/src/receptionist/states/speakdescriptions.py b/tasks/receptionist/src/receptionist/states/speakdescriptions.py index 45090e389..5963195dd 100644 --- a/tasks/receptionist/src/receptionist/states/speakdescriptions.py +++ b/tasks/receptionist/src/receptionist/states/speakdescriptions.py @@ -8,8 +8,8 @@ def __init__(self, default): self.default = default def execute(self, userdata): - # don't worry, this works. for person in userdata['people']: self.default.voice.speak(person['features']) + break # only speak for the first person in the frame return 'succeeded' From 0fbe28f120c83595d78199e4c758da7a8c1718e6 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Thu, 18 Apr 2024 00:22:34 +0100 Subject: [PATCH 17/18] I don't really understand why this is in my branch, please ignore this commit when merge. --- legacy/object_interest_tracking/README.MD | 70 +++++++++---- legacy/object_interest_tracking/README.md | 66 ------------- tasks/coffee_shop/config/config:=full.yaml | 108 --------------------- 3 files changed, 53 insertions(+), 191 deletions(-) delete mode 100644 legacy/object_interest_tracking/README.md delete mode 100644 tasks/coffee_shop/config/config:=full.yaml diff --git a/legacy/object_interest_tracking/README.MD b/legacy/object_interest_tracking/README.MD index 07c8a7258..d63ea8343 100644 --- a/legacy/object_interest_tracking/README.MD +++ b/legacy/object_interest_tracking/README.MD @@ -1,30 +1,66 @@ -## Under Development -# -This repo aims to provide a solution to who the robot should engage with in a human-like social environment in ROS. The package currently works only in Noetic. Due to mediapipe requirements of python > 3.8, the package won't run in melodic. +# object_interest_tracking -The current process takes an image frame, then detect people on the frame, then separate them to apply the scoring pipeline. Currently, the service will output the frame of the person [xywh] to engage with. It will always output a person, even if the person has a low engagement score. +The object_interest_tracking package -# Services -## engagementScore -Input: Nothing +This package is maintained by: +- [yousef](mailto:yousef@todo.todo) -Output: A list that has the frame part of the person to engage with [xywh] +## Prerequisites -### Scoring +This package depends on the following ROS packages: +- catkin (buildtool) +- geometry_msgs (build) +- message_generation (build) +- rospy (build) +- sensor_msgs (build) +- std_msgs (build) +- message_runtime (build) +- geometry_msgs (exec) +- message_runtime (exec) +- rospy (exec) +- sensor_msgs (exec) +- std_msgs (exec) +- message_generation (exec) -The current scoring takes into account emotions, head position, and availability of distractions. It will be extended to include more criteria. +Ask the package maintainer to write or create a blank `doc/PREREQUISITES.md` for their package! +## Usage -# Future updates (todo list) +Ask the package maintainer to write a `doc/USAGE.md` for their package! -Add distance and the change in distance to the scoring pipeline +## Example -Add gesture detection +Ask the package maintainer to write a `doc/EXAMPLE.md` for their package! -# References +## Technical Overview -A. M. Al-Nuimi and G. J. Mohammed, "Face Direction Estimation based on Mediapipe Landmarks," 2021 7th International Conference on Contemporary Information Technology and Mathematics (ICCITM), Mosul, Iraq, 2021, pp. 185-190, doi: 10.1109/ICCITM53167.2021.9677878. +Ask the package maintainer to write a `doc/TECHNICAL.md` for their package! +## ROS Definitions -# -## Tested only in simulation, yet to be tested in a robot +### Launch Files + +This package has no launch files. + +### Messages + +This package has no messages. + +### Services + +#### `Tdr` + +Request + +| Field | Type | Description | +|:-:|:-:|---| + +Response + +| Field | Type | Description | +|:-:|:-:|---| + + +### Actions + +This package has no actions. diff --git a/legacy/object_interest_tracking/README.md b/legacy/object_interest_tracking/README.md deleted file mode 100644 index d63ea8343..000000000 --- a/legacy/object_interest_tracking/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# object_interest_tracking - -The object_interest_tracking package - -This package is maintained by: -- [yousef](mailto:yousef@todo.todo) - -## Prerequisites - -This package depends on the following ROS packages: -- catkin (buildtool) -- geometry_msgs (build) -- message_generation (build) -- rospy (build) -- sensor_msgs (build) -- std_msgs (build) -- message_runtime (build) -- geometry_msgs (exec) -- message_runtime (exec) -- rospy (exec) -- sensor_msgs (exec) -- std_msgs (exec) -- message_generation (exec) - -Ask the package maintainer to write or create a blank `doc/PREREQUISITES.md` for their package! - -## Usage - -Ask the package maintainer to write a `doc/USAGE.md` for their package! - -## Example - -Ask the package maintainer to write a `doc/EXAMPLE.md` for their package! - -## Technical Overview - -Ask the package maintainer to write a `doc/TECHNICAL.md` for their package! - -## ROS Definitions - -### Launch Files - -This package has no launch files. - -### Messages - -This package has no messages. - -### Services - -#### `Tdr` - -Request - -| Field | Type | Description | -|:-:|:-:|---| - -Response - -| Field | Type | Description | -|:-:|:-:|---| - - -### Actions - -This package has no actions. diff --git a/tasks/coffee_shop/config/config:=full.yaml b/tasks/coffee_shop/config/config:=full.yaml deleted file mode 100644 index 2de30b413..000000000 --- a/tasks/coffee_shop/config/config:=full.yaml +++ /dev/null @@ -1,108 +0,0 @@ -counter: - cuboid: - - [0.11478881255836193, 2.8703450451171575] - - [0.044620891454333886, 3.7672813608081324] - - [-0.722736944640509, 3.707870872696769] - - [-0.6525690235364809, 2.810934557005794] - last_updated: '2023-09-19 14:20:13.331419' - location: - orientation: {w: 0.05378161245420122, x: 0.0, y: 0.0, z: 0.998552721773781} - position: {x: 0.7923260692997367, y: 3.1698751043324664, z: 0.0} -tables: - table0: - last_updated: '2023-09-19 14:12:11.785287' - location: - orientation: {w: 0.6981442535161398, x: 0.0, y: 0.0, z: -0.7159571225166993} - position: {x: 3.4185893265341467, y: 1.5007719904983003, z: 0.0} - semantic: end - num_persons: 0 - objects_cuboid: - - [3.872702193443944, 0.6559161243738907] - - [2.97325624499618, 0.6392973444633933] - - [2.9822439064193755, 0.13944712694630035] - - [3.8816898548671395, 0.15606590685679772] - order: [] - persons_cuboid: - - [4.6578294448981765, 1.4704487212105706] - - [2.159368476987721, 1.424285443681411] - - [2.1971166549651433, -0.6750854698903794] - - [4.695577622875598, -0.6289221923612198] - pre_location: - orientation: {w: 0.6981442535161398, x: 0.0, y: 0.0, z: -0.7159571225166993} - position: {x: 3.4185893265341467, y: 1.5007719904983003, z: 0.0} - status: unvisited - table1: - last_updated: '2023-09-19 14:14:23.654079' - location: - orientation: {w: 0.679755237535674, x: 0.0, y: 0.0, z: -0.7334390343053875} - position: {x: 6.294876273276469, y: 2.3564053436919483, z: 0.0} - objects_cuboid: - - [5.975099899520781, 1.6171292380625146] - - [5.916117157155604, 0.04866821248209674] - - [6.682256235074643, 0.021546325976471215] - - [6.74123897743982, 1.590007351556889] - persons_cuboid: - - [5.496391304636297, 2.134250733434652] - - [5.3998399365608165, -0.433230053661956] - - [7.160964829959127, -0.49557516939566626] - - [7.257516198034608, 2.071905617700941] - pre_location: - orientation: {w: 0.679755237535674, x: 0.0, y: 0.0, z: -0.7334390343053875} - position: {x: 6.294876273276469, y: 2.3564053436919483, z: 0.0} - table2: - last_updated: '2023-09-19 14:16:18.722673' - location: - orientation: {w: 0.6988937950671122, x: 0.0, y: 0.0, z: 0.7152254632049179} - position: {x: 6.4837847765967505, y: 3.3319861177542167, z: 0.0} - objects_cuboid: - - [6.182153357080189, 4.241042314587973] - - [6.248667753720983, 4.460477068504972] - - [6.4505652887727765, 4.568103825639009] - - [6.669577124411927, 4.5008762913352] - - [6.777409097641248, 4.298175443423813] - - [6.710894701000455, 4.078740689506813] - - [6.508997165948661, 3.9711139323727758] - - [6.28998533030951, 4.038341466676585] - persons_cuboid: - - [5.487688326425621, 4.174386997612826] - - [5.486032199694549, 5.0903099603404325] - - [6.382394765400911, 5.264592034449616] - - [7.295871631694631, 5.2640198171209525] - - [7.471874128295816, 4.364830760398959] - - [7.473530255026889, 3.4489077976713536] - - [6.577167689320526, 3.2746257235621696] - - [5.663690823026807, 3.2751979408908327] - pre_location: - orientation: {w: 0.6988937950671122, x: 0.0, y: 0.0, z: 0.7152254632049179} - position: {x: 6.4837847765967505, y: 3.3319861177542167, z: 0.0} - table3: - last_updated: '2023-09-19 14:18:50.691359' - location: - orientation: {w: 0.632821856784876, x: 0.0, y: 0.0, z: 0.7742974219092699} - position: {x: 3.7567571172300678, y: 2.983492576363372, z: 0.0} - objects_cuboid: - - [2.9502728886424308, 3.682447992569198] - - [4.519891622610968, 3.715626804870335] - - [4.5034995842988685, 4.485192995360613] - - [2.933880850330331, 4.452014183059477] - persons_cuboid: - - [2.461038491667587, 3.1721631863231843] - - [5.0304143810300985, 3.226475000090013] - - [4.992733981273712, 4.9954778016066275] - - [2.423358091911201, 4.941165987839798] - pre_location: - orientation: {w: 0.632821856784876, x: 0.0, y: 0.0, z: 0.7742974219092699} - position: {x: 3.7567571172300678, y: 2.983492576363372, z: 0.0} -wait: - cuboid: - - [1.9877075290272157, 0.5417149995170536] - - [0.38914681856697353, 0.47853785625496126] - - [0.44870023065244924, -1.020133288151187] - - [2.0472609411126914, -0.9569561448890949] - last_updated: '2023-09-19 14:21:53.764799' - location: - orientation: {w: 0.733502658301428, x: 0.0, y: 0.0, z: -0.6796865823780388} - position: {x: 1.3003716926945177, y: 4.293212965356256, z: 0.0} - pose: - orientation: {w: 0.992020738813, x: 0.0, y: 0.0, z: 0.126074794327} - position: {x: 10.3656408799, y: 25.7369664143, z: 0.0} From 643bf892c197228d48518e5da5c5213dbd129699 Mon Sep 17 00:00:00 2001 From: Benteng Ma Date: Thu, 18 Apr 2024 00:48:01 +0100 Subject: [PATCH 18/18] Replace string return with json string return. --- .../image_with_masks_and_attributes.py | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py index 56e2efe0f..2180bc297 100644 --- a/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py +++ b/common/vision/lasr_vision_feature_extraction/src/lasr_vision_torch/image_with_masks_and_attributes.py @@ -1,5 +1,6 @@ import numpy as np from lasr_vision_feature_extraction.categories_and_attributes import CategoriesAndAttributes +import json def _softmax(x: list[float]) -> list[float]: @@ -91,20 +92,26 @@ def describe(self) -> str: self.attributes['Wearing_Necktie']) description = "This customer has " + hair_colour_str = 'None' + hair_shape_str = 'None' if has_hair[0]: hair_shape_str = '' if hair_shape[0] == 'Straight_Hair': - hair_shape_str = ' straight' + hair_shape_str = 'straight' elif hair_shape[0] == 'Wavy_Hair': - hair_shape_str = ' wavy' + hair_shape_str = 'wavy' if hair_colour[0] == 'Black_Hair': - description += 'black%s hair, ' % hair_shape_str + description += 'black %s hair, ' % hair_shape_str + hair_colour_str = 'black' elif hair_colour[0] == 'Blond_Hair': - description += 'blond%s hair, ' % hair_shape_str + description += 'blond %s hair, ' % hair_shape_str + hair_colour_str = 'blond' elif hair_colour[0] == 'Brown_Hair': - description += 'brown%s hair, ' % hair_shape_str + description += 'brown %s hair, ' % hair_shape_str + hair_colour_str = 'brown' elif hair_colour[0] == 'Gray_Hair': - description += 'gray%s hair, ' % hair_shape_str + description += 'gray %s hair, ' % hair_shape_str + hair_colour_str = 'gray' if male: # here 'male' is only used to determine whether it is confident to decide whether the person has beard if not facial_hair[0] == 'No_Beard': @@ -130,4 +137,25 @@ def describe(self) -> str: wearables.append('a necktie') description += ", ".join(wearables[:-2] + [" and ".join(wearables[-2:])]) + '. ' - return description if description != "This customer has " else "" + if description != "This customer has ": + description = "I didn't manage to get any attributes from this customer, I'm sorry." + + result = { + 'attributes': { + 'has_hair': has_hair[0], + 'hair_colour': hair_colour_str, + 'hair_shape': hair_shape_str, + 'male': male[0], + 'facial_hair': facial_hair[0], + 'hat': hat[0], + 'glasses': glasses[0], + 'earrings': earrings[0], + 'necklace': necklace[0], + 'necktie': necktie[0], + }, + 'description': description + } + + result = json.dumps(result, indent=4) + + return result