0

我正在构建一个 TFX 管道,其中包含来自 S3 存储桶的输入图像。在 TF 转换组件步骤中,我试图读取一系列图像,其 URL 以 TFX 的 SparseTensor 格式存储。我正在尝试使用 S3FS Python 模块来做到这一点,因为我一直在将它用于管道的其他组件,并且听说同时使用 Boto3 和 S3FS 会导致问题(我认为这不是重点)。

无论如何,我已经建立了与 S3 存储桶的连接,并正在尝试读取图像。这是我的代码(或者至少是我认为与问题密切相关的部分):

  s3 = s3fs.S3FileSystem()

  with s3.open(str(inputs[key]), 'rb') as f:
    for key in CV_FEATURES:
      img = np.array(Image.open(io.BytesIO(f.read())))
      img = tf.image.rgb_to_grayscale(img)
      img = tf.divide(img, 255)
      img = tf.image.resize_with_pad(img, 224, 224)
      outputs[_fill_in_missing(key)] = img

  s3.clear_instance_cache()

运行它会给我一个标准错误消息,我在尝试使用无效字符访问存储桶时看到:

ParamValidationError:参数验证失败:无效的存储桶名称“SparseTensor(indices=Tensor(”inputs”:存储桶名称必须与正则表达式匹配“^[a-zA-Z0-9.-_]{1,255}$”或为 ARN 匹配)正则表达式 "^arn:(aws). :(s3|s3-object-lambda):[az-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0 -9-]{1,63}$|^arn:(aws). :s3-outposts:[az-0-9]+:[0-9]{12}:outpost[/:][a-zA -Z0-9-]{1,63}[/:]接入点[/:][a-zA-Z0-9-]{1,63}$"

该错误表明问题出在该行上with s3.open(str(inputs[key]), 'rb') as f:,因此我需要以某种方式正确表示 S3 URL。URL 以格式存储在原始 CSV 数据集中bucket_name\key\file.jpg名为image_path的列中(在此之前转换为 SparseTensor,在上述代码中表示为inputs[key])。

我认为问题不在于 SparseTensor 格式,而在于 URL。

4

0 回答 0