# HG changeset patch # User Alain Mazy # Date 1687274696 -7200 # Node ID 8722f7f95a384982350775abdf2ebf233ea3a271 # Parent 3f8eebe85c37e042a09374bc4d60318400519656 fix diff -r 3f8eebe85c37 -r 8722f7f95a38 Plugins/DicomWeb/Run.py --- a/Plugins/DicomWeb/Run.py Mon Jun 19 21:15:48 2023 +0200 +++ b/Plugins/DicomWeb/Run.py Tue Jun 20 17:24:56 2023 +0200 @@ -1084,11 +1084,12 @@ metadata = DoGet(ORTHANC, 'dicom-web/studies/1.2.276.0.26.1.1.1.2.2020.45.52293.1506048/series/1.2.276.0.26.1.1.1.2.2020.45.52293.6384450/instances/1.2.276.0.26.1.1.1.2.2020.45.52366.2551599.179568640/metadata') self.assertEqual("YBR_FULL_422", metadata[0]['00280004']['Value'][0]) - # starting from 1.12.1, Orthanc does not convert YBR to RGB anymore -> new checksum (https://discourse.orthanc-server.org/t/orthanc-convert-ybr-to-rgb-but-does-not-change-metadata/3533) - if IsOrthancVersionAbove(ORTHANC, 1, 12, 1): - expectedDcmtkChecksum = '7535a11e7da0fa590c467ac9d323c5c1' - else: - expectedDcmtkChecksum = 'b3662c4bfa24a0c73abb08548c63319b' + # TODO + # # starting from X.XX.X, Orthanc won't convert YBR to RGB anymore -> new checksum (https://discourse.orthanc-server.org/t/orthanc-convert-ybr-to-rgb-but-does-not-change-metadata/3533) + # if IsOrthancVersionAbove(ORTHANC, 1, XX, 1): + # expectedDcmtkChecksum = '7535a11e7da0fa590c467ac9d323c5c1' + # else: + expectedDcmtkChecksum = 'b3662c4bfa24a0c73abb08548c63319b' if HasGdcmPlugin(ORTHANC): self.assertTrue(ComputeMD5(p[0]) in [ @@ -1248,8 +1249,11 @@ uri = 'dicom-web%s' % UploadAndGetWadoPath('TransferSyntaxes/1.2.840.10008.1.2.4.50.dcm') truthRGB = Image.open(GetDatabasePath('TransferSyntaxes/1.2.840.10008.1.2.4.50.png')) - with open(GetDatabasePath('TransferSyntaxes/1.2.840.10008.1.2.4.50.YBR.raw'), 'rb') as f: - truthRawYbr = f.read() + + # TODO + # # starting from X.XX.X, Orthanc won't convert YBR to RGB anymore -> new checksum (https://discourse.orthanc-server.org/t/orthanc-convert-ybr-to-rgb-but-does-not-change-metadata/3533) + # with open(GetDatabasePath('TransferSyntaxes/1.2.840.10008.1.2.4.50.YBR.raw'), 'rb') as f: + # truthRawYbr = f.read() # first test: no transcoding since we accept the JPEG transfer syntax a = DoGetMultipart(ORTHANC, '%s/frames/1' % uri, @@ -1270,13 +1274,15 @@ self.assertEqual(480 * 640 * 3, len(a[0])) # Orthanc is now returning the YBR image instead of the RGB - if IsOrthancVersionAbove(ORTHANC, 1, 12, 1) and not HasGdcmPlugin(ORTHANC): - # GetMaxImageDifference does not work with YBR images -> strict comparison with the output of dcmdjpeg - self.assertEqual('d4aacc6c7758c7c968a4fc8d59b041d5', ComputeMD5(a[0])) - else: - # http://effbot.org/zone/pil-comparing-images.htm - img = Image.frombytes('RGB', [ 640, 480 ], a[0]) - self.assertLessEqual(GetMaxImageDifference(img, truthRGB), 2) + # TODO + # # starting from X.XX.X, Orthanc won't convert YBR to RGB anymore -> new checksum (https://discourse.orthanc-server.org/t/orthanc-convert-ybr-to-rgb-but-does-not-change-metadata/3533) + # if IsOrthancVersionAbove(ORTHANC, 1, XX, 1) and not HasGdcmPlugin(ORTHANC): + # # GetMaxImageDifference does not work with YBR images -> strict comparison with the output of dcmdjpeg + # self.assertEqual('d4aacc6c7758c7c968a4fc8d59b041d5', ComputeMD5(a[0])) + # else: + # http://effbot.org/zone/pil-comparing-images.htm + img = Image.frombytes('RGB', [ 640, 480 ], a[0]) + self.assertLessEqual(GetMaxImageDifference(img, truthRGB), 2) ACCEPT2 = copy.deepcopy(ACCEPT) if HasGdcmPlugin(ORTHANC): @@ -1293,15 +1299,18 @@ self.assertEqual(1, len(a)) self.assertEqual(480 * 640 * 3, len(a[0])) - if IsOrthancVersionAbove(ORTHANC, 1, 12, 1) and not HasGdcmPlugin(ORTHANC): - # GetMaxImageDifference does not work with YBR images -> strict comparison with the output of dcmdjpeg - self.assertEqual('d4aacc6c7758c7c968a4fc8d59b041d5', ComputeMD5(a[0])) - else: - # http://effbot.org/zone/pil-comparing-images.htm - img = Image.frombytes('RGB', [ 640, 480 ], a[0]) - self.assertLessEqual(GetMaxImageDifference(img, truthRGB), 2) + # TODO + # # starting from X.XX.X, Orthanc won't convert YBR to RGB anymore -> new checksum (https://discourse.orthanc-server.org/t/orthanc-convert-ybr-to-rgb-but-does-not-change-metadata/3533) + # if IsOrthancVersionAbove(ORTHANC, 1, XX, X) and not HasGdcmPlugin(ORTHANC): + # # GetMaxImageDifference does not work with YBR images -> strict comparison with the output of dcmdjpeg + # self.assertEqual('d4aacc6c7758c7c968a4fc8d59b041d5', ComputeMD5(a[0])) + # else: + # http://effbot.org/zone/pil-comparing-images.htm + img = Image.frombytes('RGB', [ 640, 480 ], a[0]) + self.assertLessEqual(GetMaxImageDifference(img, truthRGB), 2) - if not IS_GDCM and not IsOrthancVersionAbove(ORTHANC, 1, 12, 1): + # TODO: if not IS_GDCM and not IsOrthancVersionAbove(ORTHANC, 1, XX, X): + if not IS_GDCM: self.assertEqual('dfdc79f5070926bbb8ac079ee91f5b91', ComputeMD5(a[0])) diff -r 3f8eebe85c37 -r 8722f7f95a38 Tests/Tests.py --- a/Tests/Tests.py Mon Jun 19 21:15:48 2023 +0200 +++ b/Tests/Tests.py Tue Jun 20 17:24:56 2023 +0200 @@ -6737,7 +6737,7 @@ f1 = '/tmp/GETSCU/MR.1.3.46.670589.11.0.0.11.4.2.0.8743.5.5396.2006120114314079549' self.assertTrue(os.path.isfile(f1)) with open(f1, 'rb') as f: - self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read())) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read(), encoding='ISO-8859-1')) CleanTarget() @@ -6757,7 +6757,7 @@ self.assertTrue(os.path.isfile(f1)) with open(f1, 'rb') as f: - self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read())) + self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(f.read(), encoding='ISO-8859-1')) # This file is transcoded from "1.2.840.10008.1.2.4.50" to "1.2.840.10008.1.2.1" # (LittleEndianExplicit is proposed by default by "getscu") diff -r 3f8eebe85c37 -r 8722f7f95a38 Tests/Toolbox.py --- a/Tests/Toolbox.py Mon Jun 19 21:15:48 2023 +0200 +++ b/Tests/Toolbox.py Tue Jun 20 17:24:56 2023 +0200 @@ -423,7 +423,7 @@ self.assertAlmostEqual(a, b, places = places) -def GetTransferSyntax(dicom): +def GetTransferSyntax(dicom, encoding='utf-8'): with tempfile.NamedTemporaryFile(delete = True) as f: f.write(dicom) f.flush() @@ -431,7 +431,7 @@ with open(os.devnull, 'w') as devnull: data = subprocess.check_output([ FindExecutable('dcm2xml'), f.name ], stderr = devnull) - return re.search('