如何解决如何使用自定义 map() 函数从 GeoTiff 文件创建 TF 数据集
我正在尝试从多通道 tiff 文件创建一个 TensorFlow 数据集。 TensorFlow I/O 中的 tfio.experimental.image.decode_tiff(image)
仅适用于 4 个通道,因此我尝试先将其读入 numpy,在这种情况下使用 Rasterio
,然后将其转换为 TF,如下所示:
import tensorflow as tf
import Rasterio as rio
@tf.compat.v2.autograph.experimental.do_not_convert
def parse_image(img_path: str) -> dict:
src = rio.open(img_path)
image_numpy = src.read()
image = tf.convert_to_tensor(image_numpy,dtype=tf.float32)
return {'image': image}
train_dataset = tf.data.Dataset.list_files("multipage_tiff_example.tif",seed=50)
train_dataset = train_dataset.map(parse_image)
不幸的是,我无法克服这个错误:
TypeError Traceback (most recent call last)
<ipython-input-77-8308896524b1> in <module>
11
12 train_dataset = tf.data.Dataset.list_files("multipage_tiff_example.tif",seed=50)
---> 13 train_dataset = train_dataset.map(parse_image)
[...]
~/opt/anaconda3/envs/proj1/lib/python3.7/site-packages/Rasterio/__init__.py in open(fp,mode,driver,width,height,count,crs,transform,dtype,nodata,sharing,**kwargs)
156 if not isinstance(fp,string_types):
157 if not (hasattr(fp,'read') or hasattr(fp,'write') or isinstance(fp,Path)):
--> 158 raise TypeError("invalid path or file: {0!r}".format(fp))
159 if mode and not isinstance(mode,string_types):
160 raise TypeError("invalid mode: {0!r}".format(mode))
TypeError: invalid path or file: <tf.Tensor 'args_0:0' shape=() dtype=string>
示例 tif 文件在这里:link Bootstrap
tf.__version__: 2.5.0-rc3
rio.__version__: 1.1.8
我做了很多交叉检查。例如:
image = tf.io.read_file(img_path)
image = tf.image.decode_jpeg(image,channels=3)
问题“无效路径或文件”是由Rasterio提出的,但我觉得它可能与TF机制有关/引起。
你能建议如何让它工作吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。