def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ global volume_description_text global port try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # allow the socket port to be reused if in TIME_WAIT state sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('localhost', port)) # try default/previous port except Exception as e: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # allow the socket port to be reused if in TIME_WAIT state sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('localhost', 0)) # find free port port = sock.getsockname()[1] volume_description_text = volume_description_text.replace( '{port}', str(port)) tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join(tmp, 'testTiledVolume_data') logger.debug("Using test directory: {}".format(self.TILE_DIRECTORY)) self.REFERENCE_VOL_PATH = os.path.join(self.TILE_DIRECTORY, 'reference_volume.h5/data') ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, 'volume_description.json') self.LOCAL_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'local_volume_description.json') self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'transposed_volume_description.json') self.TRANSLATED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'translated_volume_description.json') self.SPECIAL_Z_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'special_z_volume_description.json') if not os.path.exists(self.TILE_DIRECTORY): print("Creating new tile directory: {}".format( self.TILE_DIRECTORY)) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0, 255, (100, 600, 600)).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, 'w') as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, 'r') as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists(self.VOLUME_DESCRIPTION_FILE): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, 'r') as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, 'w') as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription( self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with a local tile path instead of a URL config_helper = JsonConfigParser(TiledVolume.DescriptionFields) local_description = copy.copy(volume_description) local_description.tile_url_format = self.TILE_DIRECTORY + "/tile_z{z_start:05}_y{y_start:05}_x{x_start:05}.png" config_helper.writeConfigFile(self.LOCAL_VOLUME_DESCRIPTION_FILE, local_description) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser(TiledVolume.DescriptionFields) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile( self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Write out another copy of the description, but with an origin translation config_helper = JsonConfigParser(TiledVolume.DescriptionFields) translated_description = copy.copy(volume_description) translated_description.view_origin_zyx = [10, 20, 30] translated_description.shape_zyx = None config_helper.writeConfigFile( self.TRANSLATED_VOLUME_DESCRIPTION_FILE, translated_description) # Write out another copy of the description, but with a special function for translating z-coordinates. config_helper = JsonConfigParser(TiledVolume.DescriptionFields) special_z_description = copy.copy(volume_description) special_z_description.z_translation_function = "lambda z: z+11" config_helper.writeConfigFile( self.SPECIAL_Z_VOLUME_DESCRIPTION_FILE, special_z_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext( name)[1] == '.' + volume_description.format: os.remove(os.path.join(self.TILE_DIRECTORY, name)) # Write the new tiles export_to_tiles(ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print("removing:", p) os.remove(p) # lastly, start the server self._start_server()
""" (This script is not generally useful for most ilastik users or developers.) Input: hdf5 volume Output: directory of .png tiles representing the volume. """ if __name__ == "__main__": import sys import h5py import logging import argparse from lazyflow.utility import PathComponents, export_to_tiles logger = logging.getLogger() logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.INFO) # Usage: python make_tiles.py --tile_size=250 /path/to/my_vol.h5/some/dataset /path/to/output_dir parser = argparse.ArgumentParser() parser.add_argument("--tile_size", type=int) parser.add_argument("hdf5_dataset_path") parser.add_argument("output_dir") parsed_args = parser.parse_args(sys.argv[1:]) path_comp = PathComponents(parsed_args.hdf5_dataset_path) with h5py.File(path_comp.externalPath) as input_file: vol_dset = input_file[path_comp.internalPath] export_to_tiles(vol_dset, parsed_args.tile_size, parsed_args.output_dir)
(This script is not generally useful for most ilastik users or developers.) Input: hdf5 volume Output: directory of .png tiles representing the volume. """ if __name__ == "__main__": import sys import h5py import logging import argparse from lazyflow.utility import PathComponents, export_to_tiles logger = logging.getLogger() logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.INFO) # Usage: python make_tiles.py --tile_size=250 /path/to/my_vol.h5/some/dataset /path/to/output_dir parser = argparse.ArgumentParser() parser.add_argument("--tile_size", type=int) parser.add_argument("hdf5_dataset_path") parser.add_argument("output_dir") parsed_args = parser.parse_args(sys.argv[1:]) path_comp = PathComponents(parsed_args.hdf5_dataset_path) with h5py.File(path_comp.externalPath) as input_file: vol_dset = input_file[path_comp.internalPath] export_to_tiles(vol_dset, parsed_args.tile_size, parsed_args.output_dir)
def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join(tmp, "testTiledVolume_data") logger.debug("Using test directory: {}".format(self.TILE_DIRECTORY)) self.REFERENCE_VOL_PATH = os.path.join(self.TILE_DIRECTORY, "reference_volume.h5/data") ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, "volume_description.json") self.LOCAL_VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, "local_volume_description.json") self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, "transposed_volume_description.json" ) self.TRANSLATED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, "translated_volume_description.json" ) self.SPECIAL_Z_VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, "special_z_volume_description.json") if not os.path.exists(self.TILE_DIRECTORY): print "Creating new tile directory: {}".format(self.TILE_DIRECTORY) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0, 255, (100, 600, 600)).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, "w") as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, "r") as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists(self.VOLUME_DESCRIPTION_FILE): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, "r") as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, "w") as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription(self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with a local tile path instead of a URL config_helper = JsonConfigParser(TiledVolume.DescriptionFields) local_description = copy.copy(volume_description) local_description.tile_url_format = ( self.TILE_DIRECTORY + "/tile_z{z_start:05}_y{y_start:05}_x{x_start:05}.png" ) config_helper.writeConfigFile(self.LOCAL_VOLUME_DESCRIPTION_FILE, local_description) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser(TiledVolume.DescriptionFields) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile(self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Write out another copy of the description, but with an origin translation config_helper = JsonConfigParser(TiledVolume.DescriptionFields) translated_description = copy.copy(volume_description) translated_description.view_origin_zyx = [10, 20, 30] translated_description.shape_zyx = None config_helper.writeConfigFile(self.TRANSLATED_VOLUME_DESCRIPTION_FILE, translated_description) # Write out another copy of the description, but with a special function for translating z-coordinates. config_helper = JsonConfigParser(TiledVolume.DescriptionFields) special_z_description = copy.copy(volume_description) special_z_description.z_translation_function = "lambda z: z+11" config_helper.writeConfigFile(self.SPECIAL_Z_VOLUME_DESCRIPTION_FILE, special_z_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext(name)[1] == "." + volume_description.format: os.remove(os.path.join(self.TILE_DIRECTORY, name)) # Write the new tiles export_to_tiles(ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print "removing:", p os.remove(p) # lastly, start the server self._start_server()
def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join( tmp, 'testTiledVolume_data' ) logger.debug("Using test directory: {}".format( self.TILE_DIRECTORY )) self.REFERENCE_VOL_PATH = os.path.join( self.TILE_DIRECTORY, 'reference_volume.h5/data' ) ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'volume_description.json' ) self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'transposed_volume_description.json' ) if not os.path.exists(self.TILE_DIRECTORY): print "Creating new tile directory: {}".format( self.TILE_DIRECTORY ) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0,255, (100,600,600) ).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, 'w') as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, 'r') as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists( self.VOLUME_DESCRIPTION_FILE ): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, 'r') as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, 'w') as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription(self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser( TiledVolume.DescriptionFields ) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile(self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext(name)[1] == '.' + volume_description.format: os.remove( os.path.join(self.TILE_DIRECTORY, name) ) # Write the new tiles export_to_tiles( ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False ) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print "removing:", p os.remove( p ) # lastly, start the server self._start_server()
def setup(self): """ Generate a directory with all the files needed for this test. We use the same temporary directory every time, so we don't waste time regenerating the data if the test has already been run recently. The directory consists of the following files: - reference_volume.h5 - volume_description.json - transposed_volume_description.json - [lots of png tiles..] """ tmp = tempfile.gettempdir() self.TILE_DIRECTORY = os.path.join(tmp, 'testTiledVolume_data') logger.debug("Using test directory: {}".format(self.TILE_DIRECTORY)) self.REFERENCE_VOL_PATH = os.path.join(self.TILE_DIRECTORY, 'reference_volume.h5/data') ref_vol_path_comp = PathComponents(self.REFERENCE_VOL_PATH) self.REFERENCE_VOL_FILE = ref_vol_path_comp.externalPath self.VOLUME_DESCRIPTION_FILE = os.path.join(self.TILE_DIRECTORY, 'volume_description.json') self.TRANSPOSED_VOLUME_DESCRIPTION_FILE = os.path.join( self.TILE_DIRECTORY, 'transposed_volume_description.json') if not os.path.exists(self.TILE_DIRECTORY): print "Creating new tile directory: {}".format(self.TILE_DIRECTORY) os.mkdir(self.TILE_DIRECTORY) if not os.path.exists(self.REFERENCE_VOL_FILE): ref_vol = numpy.random.randint(0, 255, (100, 600, 600)).astype(numpy.uint8) with h5py.File(self.REFERENCE_VOL_FILE, 'w') as ref_file: ref_file[ref_vol_path_comp.internalPath] = ref_vol else: with h5py.File(self.REFERENCE_VOL_FILE, 'r') as ref_file: ref_vol = ref_file[ref_vol_path_comp.internalPath][:] need_rewrite = False if not os.path.exists(self.VOLUME_DESCRIPTION_FILE): need_rewrite = True else: with open(self.VOLUME_DESCRIPTION_FILE, 'r') as f: if f.read() != volume_description_text: need_rewrite = True if need_rewrite: with open(self.VOLUME_DESCRIPTION_FILE, 'w') as f: f.write(volume_description_text) # Read the volume description as a JsonConfig Namespace volume_description = TiledVolume.readDescription( self.VOLUME_DESCRIPTION_FILE) # Write out a copy of the description, but with custom output axes config_helper = JsonConfigParser(TiledVolume.DescriptionFields) transposed_description = copy.copy(volume_description) transposed_description.output_axes = "xyz" config_helper.writeConfigFile( self.TRANSPOSED_VOLUME_DESCRIPTION_FILE, transposed_description) # Remove all old image tiles in the tile directory files = os.listdir(self.TILE_DIRECTORY) for name in files: if os.path.splitext( name)[1] == '.' + volume_description.format: os.remove(os.path.join(self.TILE_DIRECTORY, name)) # Write the new tiles export_to_tiles(ref_vol, volume_description.tile_shape_2d_yx[0], self.TILE_DIRECTORY, print_progress=False) # To support testMissingTiles (below), remove slice 2 files = os.listdir(self.TILE_DIRECTORY) for name in files: if name.startswith("tile_z00002"): p = os.path.join(self.TILE_DIRECTORY, name) print "removing:", p os.remove(p) # lastly, start the server self._start_server()