def get(self, path, originalPath=None): with self._lock: if path in self._cache: # Move to end of LRU slide = self._cache.pop(path) self._cache[path] = slide return slide osr = OpenSlide(path) # try: # osr = OpenSlide(path) # except: # osr = ImageSlide(path) # Fix for 16 bits tiff files # if osr._image.getextrema()[1] > 256: # osr._image = osr._image.point(lambda i:i*(1./256)).convert('L') slide = DeepZoomGenerator(osr, **self.dz_opts) slide.osr = osr slide.associated_images = {} for name, image in slide.osr.associated_images.items(): slide.associated_images[name] = image try: mpp_x = osr.properties[openslide.PROPERTY_NAME_MPP_X] mpp_y = osr.properties[openslide.PROPERTY_NAME_MPP_Y] slide.properties = osr.properties slide.mpp = (float(mpp_x) + float(mpp_y)) / 2 except (KeyError, ValueError): try: if osr.properties["tiff.ResolutionUnit"] == "centimetre": numerator = 10000 # microns in CM else: numerator = 25400 # Microns in Inch mpp_x = numerator / float(osr.properties["tiff.XResolution"]) mpp_y = numerator / float(osr.properties["tiff.YResolution"]) slide.properties = osr.properties slide.mpp = (float(mpp_x) + float(mpp_y)) / 2 except: slide.mpp = 0 try: slide.properties = slide.properties except: slide.properties = osr.properties slide.tileLock = Lock() if originalPath: slide.properties = {"Path": originalPath} with self._lock: if path not in self._cache: while len(self._cache) >= self.cache_size: self._cache.popitem(last=False) self._cache[path] = slide return slide
def get(self, path): with self._lock: if path in self._cache: # Move to end of LRU slide = self._cache.pop(path) self._cache[path] = slide return slide try: osr = OpenSlide(path) except: osr = ImageSlide(path) #Fix for 16 bits tiff files if osr._image.getextrema()[1] > 256: osr._image = osr._image.point(lambda i: i * (1. / 256)).convert('L') slide = DeepZoomGenerator(osr, **self.dz_opts) slide.osr = osr slide.associated_images = {} for name, image in slide.osr.associated_images.items(): slide.associated_images[name] = DeepZoomGenerator( ImageSlide(image)) try: mpp_x = osr.properties[openslide.PROPERTY_NAME_MPP_X] mpp_y = osr.properties[openslide.PROPERTY_NAME_MPP_Y] slide.properties = osr.properties slide.mpp = (float(mpp_x) + float(mpp_y)) / 2 except (KeyError, ValueError): slide.mpp = 0 try: slide.properties = slide.properties except: slide.properties = osr.properties slide.tileLock = Lock() with self._lock: if path not in self._cache: while len(self._cache) >= self.cache_size: self._cache.popitem(last=False) self._cache[path] = slide return slide