Mercurial > hg > orthanc-tests
changeset 768:fc778968a82a
added tests for on-the-fly wsi
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 20 Dec 2024 16:26:15 +0100 |
parents | d54c9167f60e |
children | f3376bc9f514 |
files | Plugins/WSI/Run.py |
diffstat | 1 files changed, 149 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugins/WSI/Run.py Wed Dec 18 15:01:49 2024 +0100 +++ b/Plugins/WSI/Run.py Fri Dec 20 16:26:15 2024 +0100 @@ -144,6 +144,12 @@ return tiff +def IsWhite(self, image): + e = image.getextrema() + self.assertEqual(3, len(e)) + return e == ((255, 255), (255, 255), (255, 255)) + + class Orthanc(unittest.TestCase): def setUp(self): if (sys.version_info >= (3, 0)): @@ -578,6 +584,149 @@ self.assertEqual(height, info['tiles'][0]['height']) self.assertEqual([ 1 ], info['tiles'][0]['scaleFactors']) + def test_on_the_fly(self): + a = UploadInstance(ORTHANC, 'Implicit-vr-us-palette.dcm') ['ID'] + + self.assertRaises(Exception, lambda: DoGet(ORTHANC, '/wsi/frames-pyramids/%s/1' % a)) + + info = DoGet(ORTHANC, '/wsi/frames-pyramids/%s/0' % a) + self.assertEqual('#ffffff', info['BackgroundColor']) + self.assertEqual(0, info['FrameNumber']) + self.assertEqual(a, info['ID']) + self.assertEqual(2, len(info['Resolutions'])) + self.assertEqual(1, info['Resolutions'][0]) + self.assertEqual(2, info['Resolutions'][1]) + self.assertEqual(2, len(info['Sizes'])) + self.assertEqual(832, info['Sizes'][0][0]) # Default padding is (64,64) for an image size (800,600) + self.assertEqual(640, info['Sizes'][0][1]) + self.assertEqual(416, info['Sizes'][1][0]) + self.assertEqual(320, info['Sizes'][1][1]) + self.assertEqual(2, info['TilesCount'][0][0]) + self.assertEqual(2, info['TilesCount'][0][1]) + self.assertEqual(1, info['TilesCount'][1][0]) + self.assertEqual(1, info['TilesCount'][1][1]) + self.assertEqual(512, info['TilesSizes'][0][0]) + self.assertEqual(512, info['TilesSizes'][0][1]) + self.assertEqual(512, info['TilesSizes'][1][0]) + self.assertEqual(512, info['TilesSizes'][1][1]) + self.assertEqual(832, info['TotalWidth']) + self.assertEqual(640, info['TotalHeight']) + + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/0/0' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/1/0' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/0/1' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/1/1' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/1/2' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/2/1' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/0/2/2' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/1/0/0' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/1/0/1' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/1/1/0' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/frames-tiles/%s/0/1/1/1' % a) + self.assertEqual((512, 512), tile.size) + self.assertTrue(IsWhite(self, tile)) + + def test_iiif_on_the_fly(self): + a = UploadInstance(ORTHANC, 'Implicit-vr-us-palette.dcm') ['ID'] + + uri = '/wsi/iiif/frames-pyramids/%s/0' % a + manifest = DoGet(ORTHANC, uri + '/manifest.json') + + self.assertEqual('http://iiif.io/api/presentation/3/context.json', manifest['@context']) + self.assertEqual('http://localhost:8042%s/manifest.json' % uri, manifest['id']) + + self.assertEqual(1, len(manifest['items'])) + self.assertEqual(1, len(manifest['items'][0]['items'])) + self.assertEqual(1, len(manifest['items'][0]['items'][0]['items'])) + + self.assertEqual('Manifest', manifest['type']) + self.assertEqual('Canvas', manifest['items'][0]['type']) + self.assertEqual('AnnotationPage', manifest['items'][0]['items'][0]['type']) + self.assertEqual('Annotation', manifest['items'][0]['items'][0]['items'][0]['type']) + + self.assertEqual(' - US - - ', manifest['label']['en'][0]) + self.assertEqual('http://localhost:8042%s/canvas/p1' % uri, manifest['items'][0]['id']) + + annotation = manifest['items'][0]['items'][0] + self.assertEqual('http://localhost:8042%s/page/p1/1' % uri, annotation['id']) + self.assertEqual('AnnotationPage', annotation['type']) + self.assertEqual(1, len(annotation['items'])) + + item = manifest['items'][0]['items'][0]['items'][0] + self.assertEqual('image/jpeg', item['body']['format']) + self.assertEqual('Image', item['body']['type']) + self.assertEqual(832, item['body']['width']) + self.assertEqual(640, item['body']['height']) + self.assertEqual('http://localhost:8042%s/full/max/0/default.jpg' % uri, item['body']['id']) + self.assertEqual(1, len(item['body']['service'])) + self.assertEqual('http://localhost:8042%s' % uri, item['body']['service'][0]['id']) + self.assertEqual('level0', item['body']['service'][0]['profile']) + self.assertEqual('ImageService3', item['body']['service'][0]['type']) + self.assertEqual('http://localhost:8042%s/annotation/p1-image' % uri, item['id']) + self.assertEqual('painting', item['motivation']) + self.assertEqual('Annotation', item['type']) + self.assertEqual(manifest['items'][0]['id'], item['target']) + + self.assertEqual(832, manifest['items'][0]['width']) # Default padding is (64,64) for an image size (800,600) + self.assertEqual(640, manifest['items'][0]['height']) + + info = DoGet(ORTHANC, uri + '/info.json') + self.assertEqual('http://iiif.io/api/image/3/context.json', info['@context']) + self.assertEqual('http://iiif.io/api/image', info['protocol']) + self.assertEqual('http://localhost:8042%s' % uri, info['id']) + self.assertEqual('level0', info['profile']) + self.assertEqual('ImageService3', info['type']) + self.assertEqual(832, info['width']) + self.assertEqual(640, info['height']) + + self.assertEqual(2, len(info['sizes'])) + self.assertEqual(320, info['sizes'][0]['height']) + self.assertEqual(416, info['sizes'][0]['width']) + self.assertEqual(640, info['sizes'][1]['height']) + self.assertEqual(832, info['sizes'][1]['width']) + + self.assertEqual(1, len(info['tiles'])) + self.assertEqual(512, info['tiles'][0]['width']) + self.assertEqual(512, info['tiles'][0]['height']) + self.assertEqual([1, 2], info['tiles'][0]['scaleFactors']) + + # Those are the calls made by Mirador + tile = GetImage(ORTHANC, '/wsi/iiif/frames-pyramids/%s/0/full/416,320/0/default.jpg' % a) + self.assertEqual((416, 320), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/iiif/frames-pyramids/%s/0/0,0,512,512/512,512/0/default.jpg' % a) + self.assertEqual((512, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/iiif/frames-pyramids/%s/0/512,0,320,512/320,512/0/default.jpg' % a) + self.assertEqual((320, 512), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/iiif/frames-pyramids/%s/0/0,512,512,128/512,128/0/default.jpg' % a) + self.assertEqual((512, 128), tile.size) + self.assertFalse(IsWhite(self, tile)) + tile = GetImage(ORTHANC, '/wsi/iiif/frames-pyramids/%s/0/512,512,320,128/320,128/0/default.jpg' % a) + self.assertEqual((320, 128), tile.size) + self.assertFalse(IsWhite(self, tile)) + try: print('\nStarting the tests...') unittest.main(argv = [ sys.argv[0] ] + args.options)