supervisely 6.73.334__py3-none-any.whl → 6.73.336__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,6 +135,28 @@ def create_pixel_data_set(dcm: FileDataset, frame_axis: int) -> Tuple[List[np.nd
135
135
  list_of_images = np.split(pixel_array, int(dcm.NumberOfFrames), axis=frame_axis)
136
136
  return list_of_images, frame_axis
137
137
 
138
+ def convert_to_monochrome2(dcm_path: str, dcm: FileDataset) -> FileDataset:
139
+ if getattr(dcm, "PhotometricInterpretation", None) == "YBR_FULL_422":
140
+ # * Convert dicom to monochrome
141
+ if len(dcm.pixel_array.shape) == 4 and dcm.pixel_array.shape[-1] == 3:
142
+ monochrome = dcm.pixel_array[..., 0].astype(np.uint8)
143
+ else:
144
+ logger.warn("Unexpected shape for YBR_FULL_422 data: " + str(dcm.pixel_array.shape))
145
+
146
+ try:
147
+ dcm.SamplesPerPixel = 1
148
+ dcm.PhotometricInterpretation = "MONOCHROME2"
149
+ dcm.PlanarConfiguration = 0
150
+ if len(monochrome.shape) == 3:
151
+ dcm.NumberOfFrames = str(monochrome.shape[0])
152
+ dcm.Rows, dcm.Columns = monochrome.shape[1:3]
153
+ dcm.PixelData = monochrome.tobytes()
154
+ except AttributeError as ae:
155
+ logger.error(f"Error occurred while converting dicom to monochrome: {ae}")
156
+
157
+ logger.info("Rewriting DICOM file with monochrome2 format")
158
+ dcm.save_as(dcm_path)
159
+ return dcm
138
160
 
139
161
  def convert_dcm_to_nrrd(
140
162
  image_path: str, converted_dir: str, group_tag_name: Optional[list] = None
@@ -147,6 +169,13 @@ def convert_dcm_to_nrrd(
147
169
  mkdir(curr_convert_dir)
148
170
 
149
171
  dcm = pydicom.read_file(image_path)
172
+ try:
173
+ if dcm.file_meta.TransferSyntaxUID.is_compressed:
174
+ dcm.decompress()
175
+ except AttributeError:
176
+ logger.warn("Couldn't find key 'TransferSyntaxUID' in dicom's metadata.")
177
+ dcm = convert_to_monochrome2(image_path, dcm)
178
+
150
179
  dcm_meta = get_dcm_meta(dcm)
151
180
 
152
181
  if group_tag_name is None:
@@ -4,9 +4,9 @@ from supervisely.api.api import Api
4
4
  from supervisely import generate_free_name, logger, ProjectMeta
5
5
  from supervisely.convert.base_converter import AvailableVolumeConverters
6
6
  from supervisely.convert.volume.volume_converter import VolumeConverter
7
+ from supervisely.convert.volume.dicom import dicom_helper as h
7
8
  from supervisely.volume.volume import inspect_dicom_series, get_extension, read_dicom_serie_volume
8
9
 
9
-
10
10
  class DICOMConverter(VolumeConverter):
11
11
  class Item(VolumeConverter.Item):
12
12
  """Item class for DICOM series."""
@@ -60,6 +60,9 @@ class DICOMConverter(VolumeConverter):
60
60
  f"Can not recognize file extension {item_path}, serie will be skipped"
61
61
  )
62
62
  continue
63
+
64
+ for dicom_path in dicom_paths:
65
+ h.convert_to_monochrome2(dicom_path)
63
66
  _, meta = read_dicom_serie_volume(dicom_paths, anonymize=True)
64
67
  item = self.Item(serie_id=dicom_id, item_paths=dicom_paths, volume_meta=meta)
65
68
  self._items.append(item)
@@ -37,3 +37,49 @@ def dcm_to_nrrd(id: str, paths: List[str]) -> str:
37
37
  nrrd.write(nrrd_path, volume_np, nrrd_header)
38
38
 
39
39
  return nrrd_path, volume_meta
40
+
41
+ def convert_to_monochrome2(dcm_path: str):
42
+ import pydicom
43
+
44
+ is_modified = False
45
+
46
+ try:
47
+ dcm = pydicom.dcmread(dcm_path)
48
+ except Exception as e:
49
+ logger.warn("Failed to read DICOM file: " + str(e))
50
+ return
51
+
52
+ try:
53
+ if dcm.file_meta.TransferSyntaxUID.is_compressed:
54
+ dcm.decompress()
55
+ is_modified = True
56
+ except Exception as e:
57
+ logger.warn("Failed to decompress DICOM file: " + str(e))
58
+ return
59
+
60
+ if getattr(dcm, "PhotometricInterpretation", None) == "YBR_FULL_422":
61
+ # * Convert dicom to monochrome
62
+ if len(dcm.pixel_array.shape) == 4 and dcm.pixel_array.shape[-1] == 3:
63
+ monochrome = dcm.pixel_array[..., 0].astype(np.uint8)
64
+ else:
65
+ logger.warn("Unexpected shape for YBR_FULL_422 data: " + str(dcm.pixel_array.shape))
66
+
67
+ try:
68
+ dcm.SamplesPerPixel = 1
69
+ dcm.PhotometricInterpretation = "MONOCHROME2"
70
+ dcm.PlanarConfiguration = 0
71
+ if len(monochrome.shape) == 3:
72
+ dcm.NumberOfFrames = str(monochrome.shape[0])
73
+ dcm.Rows, dcm.Columns = monochrome.shape[1:3]
74
+ dcm.PixelData = monochrome.tobytes()
75
+ except AttributeError as ae:
76
+ logger.error(f"Error occurred while converting dicom to monochrome: {ae}")
77
+
78
+ logger.info("Rewriting DICOM file with MONOCHROME2 photometric interpretation.")
79
+ is_modified = True
80
+
81
+ try:
82
+ if is_modified:
83
+ dcm.save_as(dcm_path)
84
+ except Exception as e:
85
+ logger.warn("Failed to save DICOM file: " + str(e))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.334
3
+ Version: 6.73.336
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -594,7 +594,7 @@ supervisely/convert/image/masks/image_with_masks_helper.py,sha256=TSHiAIH3qlYdjR
594
594
  supervisely/convert/image/masks/images_with_masks_converter.py,sha256=Won5LihYXZZmimgaJHmK0_rVmOadWYk21OHKri21R08,6866
595
595
  supervisely/convert/image/medical2d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
596
596
  supervisely/convert/image/medical2d/medical2d_converter.py,sha256=cYEaRfr8YFxEG_Pv-_SVMxrqZudi3kWbGQ3aArL2mds,8156
597
- supervisely/convert/image/medical2d/medical2d_helper.py,sha256=pfLRCSFbFa5EIhmbB7kdmdWRu01OwIEDPXeNHzAeagg,12329
597
+ supervisely/convert/image/medical2d/medical2d_helper.py,sha256=UzZRJHtbTC7Tw-BIXaGrk3FhwPR-gglvHyVv2wio0Uw,13633
598
598
  supervisely/convert/image/multi_view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
599
599
  supervisely/convert/image/multi_view/multi_view.py,sha256=V-6oFN6oDre7UhejfyDkGKAg4rbM3C9JCQ8pHhuUBb8,4436
600
600
  supervisely/convert/image/multispectral/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -661,8 +661,8 @@ supervisely/convert/video/sly/sly_video_helper.py,sha256=D8PgoXpi0y3z-VEqvBLDf_g
661
661
  supervisely/convert/volume/__init__.py,sha256=RpSYjufciJT6AdhI9Oqp70b3XoFTtSkxFNexoqeOPW4,353
662
662
  supervisely/convert/volume/volume_converter.py,sha256=3jpt2Yn_G4FSP_vHFsJHQfYNQpT7q6ar_sRyr_xrPnA,5335
663
663
  supervisely/convert/volume/dicom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
664
- supervisely/convert/volume/dicom/dicom_converter.py,sha256=__QP8fMAaq_BdWFYh1_nAYT2gpY1WwZzdlDj39YwHhw,3195
665
- supervisely/convert/volume/dicom/dicom_helper.py,sha256=1EXmxl5Z8Xi3ZkZnfJ4EbiPCVyITSXUc0Cn_oo02pPE,1284
664
+ supervisely/convert/volume/dicom/dicom_converter.py,sha256=Hw4RxU_qvllk6M26udZE6G-m1RWR8-VVPcEPwFlqrVg,3354
665
+ supervisely/convert/volume/dicom/dicom_helper.py,sha256=OrKlyt1hA5BOXKhE1LF1WxBIv3b6t96xRras4OSAuNM,2891
666
666
  supervisely/convert/volume/nii/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
667
667
  supervisely/convert/volume/nii/nii_planes_volume_converter.py,sha256=9TtN_AgCQgv16Olip6inFanCA5JlEEJ7JQf-0XjIw_Q,7091
668
668
  supervisely/convert/volume/nii/nii_volume_converter.py,sha256=IZ6DJeLLbLAW-kifOJ_9ddV3h7gL3AswM2TTbXB9Os0,8476
@@ -1082,9 +1082,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1082
1082
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1083
1083
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1084
1084
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1085
- supervisely-6.73.334.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1086
- supervisely-6.73.334.dist-info/METADATA,sha256=jD55cUT6bmdvsvTMuPD3Jt61Aus-DzBZciz5C5VO2HA,33596
1087
- supervisely-6.73.334.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1088
- supervisely-6.73.334.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1089
- supervisely-6.73.334.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1090
- supervisely-6.73.334.dist-info/RECORD,,
1085
+ supervisely-6.73.336.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1086
+ supervisely-6.73.336.dist-info/METADATA,sha256=xBFjKa2mZUNV7BqRSbxj_Bvws6FYn1DsuvDP4M4myUQ,33596
1087
+ supervisely-6.73.336.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1088
+ supervisely-6.73.336.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1089
+ supervisely-6.73.336.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1090
+ supervisely-6.73.336.dist-info/RECORD,,