利用AWS S3与Roboflow构建计算机视觉数据流

在当今的计算机视觉领域,数据的标注、存储、共享以及机器学习模型的训练和部署是至关重要的。本文将向展示如何利用AWS S3与Roboflow平台相结合,实现图像数据的自动化存储、共享以及推送到Roboflow项目中,从而构建一个高效的计算机视觉工作流程。

首先,需要创建一个AWS S3存储桶来存放图像数据。可以通过以下链接创建自己的S3存储桶。同时,在存储桶内创建了一个图像文件夹,用于存放将要上传的图像。此外,还将创建一个名为lambda-layers的文件夹,用于存储创建后的Lambda层。

Lambda层是一种方便的方式来打包库和其他依赖项,这些依赖项可以与Lambda函数一起使用。使用层可以减少上传部署存档的大小,并加快代码部署速度。将利用Lambda层来打包Roboflow库以及其他一些依赖项。requirements.txt文件中包含了以下包:roboflow、opencv-python-headless、Pillow和requests。

接下来,将创建一个Lambda函数。在Lambda控制台中点击“创建函数”,并为函数命名,选择Python 3.8作为运行时环境。这将为创建一个默认的Lambda角色,稍后将对其进行修改以允许S3访问权限。

import base64 import boto3 from roboflow import Roboflow from io import BytesIO from PIL import Image import uuid from urllib.parse import unquote_plus import os s3 = boto3.client('s3') def lambda_handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = unquote_plus(record['s3']['object']['key']) tmpkey = key.replace('/', '') download_path = '/tmp/{}{}'.format(uuid.uuid4(), tmpkey) s3.download_file(bucket, key, download_path) rf = Roboflow(api_key="YOUR_ROBOFLOW_API_KEY") workspace = rf.workspace("YOUR_ROBOFLOW_WORKSPACE") project = workspace.project("YOUR_ROBOFLOW_PROJECT") project.upload(download_path)

上述代码的作用是读取S3存储桶中的对象,将其下载到Lambda的临时目录中,并使用唯一的ID,然后将其推送到Roboflow工作区/项目中。

为了使Lambda函数能够访问S3,需要更新Lambda函数的权限。首先,进入配置标签并点击编辑按钮,这将打开分配的Lambda角色。然后,在IAM控制台中搜索并添加S3的完整访问权限(在生产环境中,可能需要更严格的权限设置)。

在Lambda函数的主控制台中,点击层,然后进入层部分,点击“添加”。在Lambda层控制台中,选择之前创建的自定义Roboflow包层,然后点击“添加”。还需要添加上面提到的第二个层libgthread-2.0。通过点击指定该层的公共ARN,点击验证然后添加。

最后一步是创建S3触发器。回到Lambda函数控制台,点击添加触发器。这将带进入触发器配置。在这里,定义S3作为触发器源,之前创建的S3存储桶,事件类型为“所有对象创建事件”,前缀(在存储桶中创建了一个images子文件夹),然后点击“添加”。

现在,一切都设置好了。回到Lambda函数控制台,应该可以看到附加的两个层和新的S3触发器。现在,将图像放入S3存储桶的images文件夹中,Lambda函数将负责将图像复制到Roboflow项目中。

还可以通过进入函数控制台的监控标签并点击“在CloudWatch中查看日志”来监控和调试任何Lambda函数问题。最终结果应该是将图像作为未分配的图像推送到Roboflow项目中。

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