From 6b41630144edc74e28eac2ad684a1a3d28fd6fbf Mon Sep 17 00:00:00 2001 From: Waqar Shahid Qureshi Date: Wed, 11 Jan 2023 18:15:58 +0000 Subject: [PATCH] Update model_handler.py (#4665) use the OpenCV contour function to extract contour instead of scikit-image function. to solve the problem of poor drawing of the contour see the issue 4660 https://github.com/openvinotoolkit/cvat/issues/4660 --- CHANGELOG.md | 1 + .../nuclio/model_handler.py | 22 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33f105e2..0f3dd9db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 The corresponding arguments are keyword-only now. () - Windows Installation Instructions adjusted to work around +- The contour detection function for semantic segmentation () ### Deprecated - TDB diff --git a/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio/model_handler.py b/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio/model_handler.py index 06b43f61..f56d533b 100644 --- a/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio/model_handler.py +++ b/serverless/openvino/omz/intel/semantic-segmentation-adas-0001/nuclio/model_handler.py @@ -4,11 +4,11 @@ # SPDX-License-Identifier: MIT import os + import cv2 import numpy as np from model_loader import ModelLoader from shared import to_cvat_mask -from skimage.measure import approximate_polygon, find_contours class ModelHandler: @@ -29,26 +29,24 @@ class ModelHandler: for i in range(len(self.labels)): mask_by_label = np.zeros((width, height), dtype=np.uint8) - - mask_by_label = ((mask == float(i))).astype(np.uint8) + mask_by_label = ((mask == float(i)) * 255).astype(np.uint8) mask_by_label = cv2.resize(mask_by_label, dsize=(image.width, image.height), - interpolation=cv2.INTER_CUBIC) - cv2.normalize(mask_by_label, mask_by_label, 0, 255, cv2.NORM_MINMAX) + interpolation=cv2.INTER_NEAREST) - contours = find_contours(mask_by_label, 0.8) + contours, _ = cv2.findContours(mask_by_label, cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) for contour in contours: contour = np.flip(contour, axis=1) - contour = approximate_polygon(contour, tolerance=2.5) - - x_min = max(0, int(np.min(contour[:,0]))) - x_max = max(0, int(np.max(contour[:,0]))) - y_min = max(0, int(np.min(contour[:,1]))) - y_max = max(0, int(np.max(contour[:,1]))) if len(contour) < 3: continue + x_min = max(0, int(np.min(contour[:,:,0]))) + x_max = max(0, int(np.max(contour[:,:,0]))) + y_min = max(0, int(np.min(contour[:,:,1]))) + y_max = max(0, int(np.max(contour[:,:,1]))) + cvat_mask = to_cvat_mask((x_min, y_min, x_max, y_max), mask_by_label) results.append({