在处理和上传图像数据到Roboflow时,有两个主要选项:使用签名URL直接上传,或者先通过Azure CLI将图像下载到本地再上传。选择哪种方法取决于对数据处理和管理的具体需求。
如果希望避免将图像下载到本地的额外步骤和时间消耗,签名URL是一个非常有利的选择。使用签名URL,可以直接从Azure Blob Storage上传图像数据到Roboflow API,而无需在本地存储。这将导致更快的处理速度和对本地系统更小的负载。
在某些情况下,可能更倾向于先将图像下载到本地环境。例如,如果需要在上传到Roboflow之前预处理图像或手动检查它们,拥有本地副本将是有益的。
选择正确的方法将取决于特定用例需求,例如数据传输的速度、预处理的需求或图像的手动检查。
创建存储帐户后,可以在Azure门户的“安全 + 网络”下的“访问密钥”部分找到访问密钥或连接字符串。这些凭据用于验证应用程序。
可以使用Python中的Azure SDK为Azure Blob Storage中的图像生成签名URL。以下是一个生成签名URL的代码示例:
def get_blob_sas_url(blob_service_client, container_name: str, blob_name: str) -> str:
"""为Azure Blob生成一个SAS URL。"""
from azure.storage.blob import generate_blob_sas, BlobSasPermissions
from datetime import datetime, timedelta
sas_token = generate_blob_sas(
blob_service_client.account_name,
container_name,
blob_name,
account_key=blob_service_client.credential.account_key,
permission=BlobSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1)
)
blob_url = f"https://{blob_service_client.account_name}.blob.core.windows.net/{container_name}/{blob_name}?{sas_token}"
return blob_url
在上述代码片段中,需要blob服务客户端、容器名称和blob名称。生成的图像签名URL将被返回。基于此,可以构建一个完整的解决方案,该解决方案可以拉取Azure Blob Storage中的所有可用对象,然后通过API将它们上传到Roboflow。以下是一个解决方案的概要:
首先,安装azcopy命令行实用程序。这个实用程序允许从Azure Storage下载文件和文件夹。然后,使用共享访问签名(SAS)令牌对Azure帐户进行身份验证。可以在azcopy文档中了解更多关于如何检索SAS令牌的信息。
设置好azcopy后,运行以下命令下载文件或文件夹:
azcopy copy "C:\local\path" --recursive=true
将"C:\local\path"替换为想要下载的文件夹或文件的路径。将
现在已经下载了数据,可以通过使用上传Web界面或RoboflowCLI将其上传到Roboflow。