5050from . import metadatatools as metadatatools
5151import javabridge as javabridge
5252
53+ OMERO_READER_IMPORTED = False
54+ try :
55+ from omero_reader import OmeroReader , OMERO_IMPORTED
56+ from omero_reader .utils import omero_reader_enabled
57+ OMERO_READER_IMPORTED = True
58+ except ImportError :
59+ pass
60+
5361K_OMERO_SERVER = "omero_server"
5462K_OMERO_PORT = "omero_port"
5563K_OMERO_USER = "omero_user"
@@ -913,6 +921,7 @@ def get_image_reader(key, path=None, url=None):
913921 key - use this key to keep only a single cache member associated with
914922 that key open at a time.
915923 '''
924+ logger .debug ("Getting image reader for: %s, %s, %s" % (key , path , url ))
916925 if key in __image_reader_key_cache :
917926 old_path , old_url = __image_reader_key_cache [key ]
918927 old_count , rdr = __image_reader_cache [old_path , old_url ]
@@ -922,7 +931,18 @@ def get_image_reader(key, path=None, url=None):
922931 if (path , url ) in __image_reader_cache :
923932 old_count , rdr = __image_reader_cache [path , url ]
924933 else :
925- rdr = ImageReader (path = path , url = url )
934+ # If OMERO.py is found on the PYTHONPATH and OMERO_READER_ENABLED
935+ # is True OMERO python reader can be used to directly request
936+ # the image pixels from the server.
937+ # Following this route gives almost 10x speed up.
938+ if OMERO_READER_IMPORTED and OMERO_IMPORTED and \
939+ omero_reader_enabled () and \
940+ url is not None and url .lower ().startswith ("omero:" ):
941+ logger .debug ("Initializing Python reader." )
942+ rdr = OmeroReader (__omero_server , __omero_session_id , url = url )
943+ else :
944+ logger .debug ("Falling back to Java reader." )
945+ rdr = ImageReader (path = path , url = url )
926946 old_count = 0
927947 __image_reader_cache [path , url ] = (old_count + 1 , rdr )
928948 __image_reader_key_cache [key ] = (path , url )
@@ -945,6 +965,7 @@ def release_image_reader(key):
945965def clear_image_reader_cache ():
946966 '''Get rid of any open image readers'''
947967 for use_count , rdr in __image_reader_cache .values ():
968+ logger .debug ("Closing reader %s" % rdr )
948969 rdr .close ()
949970 __image_reader_cache .clear ()
950971 __image_reader_key_cache .clear ()
0 commit comments