Skip to content

Commit 74e1794

Browse files
authored
Merge pull request #74 from emilroz/omero_py_reader
Pure Python implementation of OmeroReader
2 parents 855f2fb + 0d47e38 commit 74e1794

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

bioformats/formatreader.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@
5050
from . import metadatatools as metadatatools
5151
import 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+
5361
K_OMERO_SERVER = "omero_server"
5462
K_OMERO_PORT = "omero_port"
5563
K_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):
945965
def 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

Comments
 (0)