AWS S3 与 Roboflow 图像数据上传指南

在进行机器学习和图像识别项目时,经常需要将大量的图像数据上传至云平台进行处理。AWS S3提供了灵活的存储解决方案,而Roboflow则提供了强大的图像标注和模型训练功能。本文将介绍两种将图像数据从 AWS S3 上传至 Roboflow 的方法:使用签名 URL 和手动下载至本地。选择哪种方法取决于对数据处理和管理工作的具体需求,例如数据传输速度、预处理需求或图像的手动检查。

如果希望避免将图像下载到本地机器的额外步骤和时间消耗,使用签名 URL 是一个特别有利的方法。通过签名 URL,可以直接将图像数据从 S3 桶上传到 Roboflow API,而无需将其存储在本地。这将导致更快的处理速度和对本地系统的较小负载。

在某些情况下,可能更倾向于先将图像下载到本地环境。例如,如果需要预处理图像或在上传到 Roboflow 之前手动检查它们,拥有本地副本将是有益的。

在使用脚本之前,请确保已经设置了带有必要认证凭据的 AWS CLI。这将允许访问和管理所需的 S3 桶。

安装完成后,打开终端或命令提示符。运行以下命令:

aws configure

将被提示输入 AWS 凭证:

AWS Access Key ID [None]: YOUR_ACCESS_KEY AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY Default region name [None]: YOUR_PREFERRED_REGION (e.g., us-west-1) Default output format [None]: json

可以使用 Python 中的 boto3 生成 S3 桶中图像的签名 URL。

def generate_presigned_url(bucket_name: str, object_name: str, region: str = 'us-east-2') -> str:     """Generate a presigned URL for an S3 object."""     s3 = boto3.client('s3', region_name=region, config=Config(signature_version='s3v4'))     url = s3.generate_presigned_url('get_object', Params={'Bucket': bucket_name, 'Key': object_name}, ExpiresIn=3600)     return url

在上面的代码片段中,需要提供 S3 桶名称、S3 桶中图像的对象名称以及 AWS 区域。生成的图像签名 URL 将被返回。基于此,可以构建一个完整的解决方案,该解决方案拉取 S3 桶中的所有可用对象,然后通过 API 上传到Roboflow。以下是一个解决方案的大纲:

要上传 AWS 上的数据,首先安装 awscli 命令行工具。这个工具允许在命令行上与 AWS 账户进行交互。安装完命令行工具后,运行以下命令:

aws s3 sync s3://mybucket/folder_path .

将 mybucket 替换为桶名称,将 folder_path 替换为想要导出的文件夹或文件的名称。此命令将从 AWS 下载资产到当前工作目录。

现在已经下载了数据,可以通过使用上传 Web 界面或RoboflowCLI 将其上传到 Roboflow。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485