如何在Vertex AI Workbench Jupyter Notebook读取GCS存储桶图片?
Vertex AI Workbench Notebook读取GCS存储桶图片的解决方案
一、先确认权限配置
Vertex AI Notebook访问GCS的前提是拥有对应权限:
- 检查Notebook实例绑定的服务账号,确保其拥有
storage.objectViewer(只读)或storage.admin(读写)权限,可在GCP控制台的IAM页面配置。 - 测试场景下,可在Notebook中执行
gcloud auth application-default login完成临时授权(生产环境推荐使用服务账号)。
二、Keras/TensorFlow直接读取GCS路径
TensorFlow原生支持GCS URI,Keras可直接使用:
批量读取(ImageDataGenerator)
from tensorflow.keras.preprocessing.image import ImageDataGenerator # 直接传入GCS路径 datagen = ImageDataGenerator(rescale=1./255) train_ds = datagen.flow_from_directory( 'gs://your-bucket/train_images/', target_size=(224, 224), batch_size=32, class_mode='categorical' )
单张图片读取
import tensorflow as tf image_uri = 'gs://your-bucket/single_image.jpg' # 读取字节流并解码 image_bytes = tf.io.read_file(image_uri) image = tf.image.decode_jpeg(image_bytes, channels=3) # 转换为numpy数组供Keras使用 image_np = image.numpy()
三、OpenCV读取GCS图片的两种方法
OpenCV不原生支持GCS URI,需通过以下方式处理:
方法1:内存读取(推荐)
借助google-cloud-storage库将图片读取到内存,再转成OpenCV可识别的格式:
- 安装依赖(若未安装):
!pip install google-cloud-storage
- 读取代码:
import cv2 import numpy as np from google.cloud import storage client = storage.Client() bucket = client.get_bucket('your-bucket-name') blob = bucket.blob('path/to/target_image.jpg') # 下载字节流并转换为numpy数组 image_bytes = blob.download_as_bytes() image_np = np.frombuffer(image_bytes, np.uint8) # 解码为OpenCV格式 image = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
方法2:挂载GCS存储桶到本地
用gcsfuse将GCS存储桶挂载为Notebook VM的本地目录,实现本地路径式访问:
- 安装gcsfuse(若未预装):
!echo "deb https://packages.cloud.google.com/apt gcsfuse-bionic main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list !curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - !sudo apt-get update !sudo apt-get install gcsfuse -y
- 创建挂载目录并挂载存储桶:
!mkdir -p ./gcs-bucket-mount !gcsfuse your-bucket-name ./gcs-bucket-mount
- OpenCV直接读取本地挂载路径:
import cv2 image = cv2.imread('./gcs-bucket-mount/path/to/image.jpg')
注意:挂载操作在Notebook重启后需要重新执行,且会占用VM本地存储,适合批量测试场景。
四、常见问题排查
- 确认GCS路径格式:必须以
gs://开头,例如gs://my-bucket/folder/image.jpg,避免遗漏前缀导致系统识别为本地路径。 - 检查对象权限:确保GCS存储桶或目标图片的IAM权限配置正确,没有限制访问的条件。
内容的提问来源于stack exchange,提问作者Sagar Patil
相关产品推荐
相关产品推荐

