从外部存储同步数据
将流行的云存储和外部存储系统与Label Studio集成,以收集上传至存储桶、容器、数据库或目录的新项目,并返回标注结果,以便您能在机器学习流程中使用这些数据。
使用Label Studio设置以下云存储和其他存储系统:
故障排除
在使用外部云存储连接时,请注意以下几点:
- For Source storage:
- 当勾选"将每个存储桶对象视为源文件"时,Label Studio不会导入存储桶中的数据,而是创建对这些对象的引用。因此,您可以完全控制要在标注界面上同步和显示的数据访问权限。
- 当未勾选“将每个存储桶对象视为源文件”时,存储桶文件将被视为不可变;要将更新后的文件状态推送至Label Studio,唯一方法是使用新文件名重新上传,或删除与该文件关联的所有任务并重新同步。
- 与外部存储桶的同步操作是单向的。它要么从存储桶(源存储)中的对象创建任务,要么将标注推送到输出存储桶(目标存储)。更改存储桶端的内容不能保证结果的一致性。
- 我们建议为每个Label Studio项目使用单独的存储桶文件夹。
- 存储区域:为了最小化延迟并提高效率,将数据存储在靠近您团队而非Label Studio服务器所在区域的云存储桶中。
如需更多故障排除信息,请参阅Troubleshooting Label Studio。
外部存储连接与同步的工作原理
您可以添加源存储连接以将数据从外部源同步到Label Studio项目,并添加目标存储连接以将标注从Label Studio同步到外部存储。每个源和目标存储设置都是项目特定的。您可以为项目连接多个存储桶、容器、数据库或目录作为源或目标存储。
源存储
Label Studio不会自动从源存储同步数据。如果您将新数据上传到已连接的云存储桶,请通过用户界面同步存储连接,以便在不重启的情况下将新的标注任务添加到Label Studio中。您也可以使用API来设置或同步存储连接。请参阅Label Studio API并找到相关的存储连接类型。
从云存储同步的任务数据不会存储在Label Studio中。相反,数据是通过预签名URL访问的。您还可以通过为存储设置VPC和IP限制来保护对云存储的访问。详情请参阅Secure access to cloud storage。
源存储权限
如果启用"将每个存储桶对象视为源文件"选项,Label Studio后端将仅需要LIST权限,而不会从您的存储桶下载任何数据。
如果在存储设置中禁用此选项,Label Studio后端将需要GET权限来读取JSON文件并将其转换为Label Studio任务。
当您的用户访问标注任务时,后端会尝试将URI(例如s3://)解析为URL(https://)链接。解析后的URL将返回至前端并由用户浏览器加载。为了加载这些URL,浏览器需要从您的云存储获取HEAD和GET权限。HEAD请求会在初始阶段发出,使浏览器能够确定音频、视频或其他文件的大小。随后浏览器会发出GET请求来获取文件主体内容。
源存储同步与URI解析
源存储功能可以分为两部分:
- 同步 - 当Label Studio扫描您的存储并从中导入任务时。
- URI解析 - 当Label Studio后端请求云存储将URI链接(例如
s3://bucket/1.jpg)解析为HTTPS(https://aws.amazon.com/bucket/1.jpg)时。这样用户的浏览器就能加载媒体文件。
将每个存储桶对象视为源文件
Label Studio 源存储功能提供了一个名为“将每个存储桶对象视为源文件”的选项。该选项支持两种不同的任务加载方法到 Label Studio 中。
关闭
禁用时,可以直接从存储桶中将JSON或JSONL/NDJSON格式的任务加载到Label Studio中。这种方法在处理涉及多个媒体源的复杂任务时特别有用。
您可以在同一个JSON文件中放置多个任务,但不要在同一文件中混合不同的任务格式。
Example with bare tasks
task_01.json
{
"image": "s3://bucket/1.jpg",
"text": "opossums are awesome"
}
task_02.json
{
"image": "s3://bucket/2.jpg",
"text": "cats are awesome"
}
或者:
tasks.json
[
{
"image": "s3://bucket/1.jpg",
"text": "opossums are awesome"
},
{
"image": "s3://bucket/2.jpg",
"text": "cats are awesome"
}
]
Example with tasks, annotations and predictions
task_with_predictions_and_annotations_01.json
{
"data": {
"image": "s3://bucket/1.jpg",
"text": "opossums are awesome"
},
"annotations": [...],
"predictions": [...]
}
task_with_predictions_and_annotations_02.json
{
"data": {
"image": "s3://bucket/2.jpg",
"text": "cats are awesome"
}
"annotations": [...],
"predictions": [...]
}
或者:
tasks_with_predictions_and_annotations.json
[
{
"data": {
"image": "s3://bucket/1.jpg",
"text": "opossums are awesome"
},
"annotations": [...],
"predictions": [...]
},
{
"data": {
"image": "s3://bucket/2.jpg",
"text": "cats are awesome"
}
"annotations": [...],
"predictions": [...]
}
]
Example with JSONL
tasks.jsonl
{ "image": "s3://bucket/1.jpg", "text": "opossums are awesome" }
{ "image": "s3://bucket/2.jpg", "text": "cats are awesome" }
在Label Studio Enterprise和Starter Cloud版本中,Parquet文件也可以像JSON和JSONL一样用于导入任务。
开启
启用后,Label Studio会自动列出存储桶中的文件并构建任务。这仅适用于涉及单一媒体源(如图像、文本等)的简单标注任务。*
预签名URL与存储代理对比
Label Studio 提供了两种从云存储安全获取媒体数据的机制:通过代理和通过预签名URL。
具体使用哪种方式取决于您在设置源存储时是否启用了使用预签名URL功能。当使用预签名URL处于关闭状态时,代理存储将被启用:
代理存储
在代理模式下,Label Studio后端会服务器端获取对象并直接流式传输到浏览器。
这具有多重优势,包括:
- Security
- 根据Label Studio用户角色和项目访问权限,对媒体文件的访问进一步受限。
- 此访问权限适用于缓存文件。这意味着即使用户对任务的访问权限被撤销,如果媒体文件已缓存,对该文件的访问仍将受到限制。
- 数据保留在Label Studio网络边界内。这对于希望为其网络流量维护单一入口点的本地环境特别有用。
- Configuration
- 无需配置CORS设置。
- 无需预先签署权限。
要启用代理存储功能,您需要确保权限包含以下内容:
AWS S3
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
Google Cloud Storage
storage.objects.get- 读取对象数据和元数据storage.objects.list- 列出存储桶中的对象(如果使用前缀)
Azure Blob Storage
添加存储Blob数据读取器角色,该角色包含:
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/readMicrosoft.Storage/storageAccounts/blobServices/containers/blobs/getTags/action
本地部署注意事项
大型媒体文件以连续的8MB数据块进行流式传输,这些数据块被分割到不同的GET请求中。这可能导致频繁向后端请求获取下一部分数据,从而消耗额外资源。
您可以通过以下环境变量进行配置:
RESOLVER_PROXY_MAX_RANGE_SIZE- 默认为8 MB,定义每个请求返回的最大数据块大小。RESOLVER_PROXY_TIMEOUT- 默认为20秒,定义uWSGI工作进程处理单个请求的最大时间。
预签名URL
在此场景中,您的浏览器会收到一个HTTP 303重定向,指向一个有时效性的S3/GCS/Azure预签名URL。这是默认行为。
使用预签名URL的主要好处是,如果您希望确保媒体文件尽可能与Label Studio网络隔离。
所需的权限已包含在下面的云存储配置文档中。
目标存储
当标注者点击提交或更新按钮进行任务标注时,Label Studio会将标注结果保存至Label Studio数据库中。
如果配置了目标存储,在点击同步按钮后,标注结果将被发送到已配置的目标存储连接。目标存储将接收每个标注的JSON格式导出数据。有关导出任务在目标存储中呈现方式的详细信息,请参阅Label Studio标注任务的JSON格式。
当标注在Label Studio中被删除时,您也可以同步删除目标存储中的标注。更多详情请参阅在Label Studio UI中设置目标存储连接。
目标存储权限
要使用此类型的存储,您必须拥有PUT权限,DELETE权限是可选的。
Amazon S3
将您的Amazon S3存储桶连接到Label Studio,以获取标注任务或存储已完成的标注结果。
有关Label Studio如何保护对云存储访问的详细信息,请参阅Secure access to cloud storage。
配置访问您的S3存储桶
在使用Label Studio设置S3存储桶之前,请先配置访问权限。这些步骤假设您使用相同的AWS角色来管理Label Studio的源存储和目标存储。如果仅将S3用作源存储,Label Studio则不需要对该存储桶的PUT访问权限。
- 启用对存储桶的编程访问。参阅Amazon Boto3配置文档了解更多关于如何设置S3存储桶访问权限的信息。
备注
会话令牌仅在需要临时安全凭证时才需提供。请参阅AWS身份和访问管理文档中的申请临时安全凭证部分。
- 将以下角色策略分配给您设置的用于检索源任务并将标注存储在S3中的账户,将
替换为您的存储桶名称:{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::" , "arn:aws:s3:::/*" ] } ] }
备注
"s3:PutObject" 仅适用于目标存储连接,而 "s3:DeleteObject" 仅在 Label Studio Enterprise 中需要用于目标存储连接,当您希望在 Label Studio 中删除的标注也能在目标 S3 存储桶中被删除时。
- 为您的存储桶设置跨域资源共享(CORS)访问权限,使用允许从Label Studio部署所在主机名进行GET访问的策略。请参阅Amazon S3用户指南中的配置跨域资源共享(CORS)。使用或修改以下示例:
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "x-amz-server-side-encryption", "x-amz-request-id", "x-amz-id-2" ], "MaxAgeSeconds": 3000 } ]
在Label Studio界面中设置连接
在配置对S3存储桶的访问权限后,请按照以下步骤将Amazon S3设置为数据源连接:
- 在您的网页浏览器中打开Label Studio。
- 对于特定项目,打开设置 > 云存储。
- 点击添加源存储。
- 在弹出的对话框中,选择Amazon S3作为存储类型。
- 在存储标题字段中,输入要在Label Studio界面中显示的存储名称。
- 指定S3存储桶的名称,如果相关,还可以指定存储桶前缀以标识内部文件夹或容器。
- Adjust the remaining parameters:
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
.*可收集所有对象。 - 在区域名称字段中,指定AWS区域名称。例如
us-east-1。 - (可选) 在S3终端节点字段中,如果您想覆盖S3创建的用于访问存储桶的URL,请指定一个S3终端节点。
- 在访问密钥ID字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的访问密钥ID。
- 在Secret Access Key字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的密钥。
- 在会话令牌(Session Token)字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的会话令牌。
- (可选) 如果您的存储桶包含BLOB存储文件(如JPG、MP3或类似文件类型),请启用将每个存储桶对象视为源文件。此设置会为每个存储桶对象创建用于标注的URL。如果存储桶中包含多个JSON文件(每个JSON文件对应一个任务),请保持此选项禁用状态。
- (可选) 如果您的S3存储桶中包含嵌套文件夹,请启用递归扫描以对存储桶内容执行递归扫描。
- Choose whether to disable 使用预签名URL.
- 开启 - Label Studio 会生成一个预签名URL来加载媒体文件。
- OFF - Label Studio 使用自己的后端代理媒体文件。
- 调整预签名URL有效期的分钟数计数器。
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
- 点击添加存储。
添加存储后,点击同步从存储桶收集任务,或调用sync import storage API接口。
在Label Studio界面中设置目标存储连接
在配置好对S3存储桶的访问权限后,请按以下步骤设置Amazon S3作为目标存储连接:
- 在您的网页浏览器中打开Label Studio。
- 对于特定项目,打开设置 > 云存储。
- 点击添加目标存储。
- 在出现的对话框中,选择Amazon S3作为存储类型。
- 在存储标题字段中,输入要在Label Studio界面显示的存储名称。
- 指定S3存储桶的名称,如果适用,还可以指定存储桶前缀以表示内部文件夹或容器。
- Adjust the remaining parameters:
- 在区域名称字段中,指定AWS区域名称。例如
us-east-1。 - (可选) 在S3终端节点字段中,如果您想覆盖S3创建的用于访问存储桶的URL,请指定一个S3终端节点。
- 在访问密钥ID字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的访问密钥ID。
- 在Secret Access Key字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的密钥。
- 在会话令牌(Session Token)字段中,指定具有访问您S3存储桶权限的AWS账户临时安全凭证的会话令牌。
- 在区域名称字段中,指定AWS区域名称。例如
- 点击添加存储。
添加存储后,点击同步从存储桶收集任务,或调用API sync export storage
使用IAM角色访问的S3连接
在Label Studio Enterprise中,您可以使用配置了外部ID的IAM角色安全地访问S3存储桶内容。"外部ID"是一个唯一标识符,通过确保只有受信任的实体才能担任该角色来增强安全性,从而降低未经授权访问的风险。请参阅企业文档中关于设置具有IAM角色访问权限的S3连接的操作指南。
通过Label Studio API添加存储
您也可以通过Label Studio API创建存储连接。
IP过滤与VPN增强S3存储安全性
为了在VPC后实现最高级别的安全性和数据隔离,通过为存储设置IP限制来限制对Label Studio后端和内部网络用户的访问,仅允许受信任的网络执行任务同步和生成预签名URL。此外,通过配置VPC私有端点或将存储访问限制在特定IP或VPC范围内,在存储和用户浏览器之间建立安全连接。
了解更多关于您VPC背后的源存储的信息。
Bucket Policy Example for S3 storage
警告
这些示例存储桶策略明确拒绝来自允许IP地址范围之外的任何访问请求。即使是设置该存储桶策略的用户,如果不符合条件也会被拒绝访问该存储桶。因此,请务必在保存前仔细检查存储桶策略。如果不慎被锁定,请参阅如何重新获取Amazon S3存储桶的访问权限。
有用的资源:
前往您的S3存储桶,然后在AWS管理控制台中点击权限 > 存储桶策略。添加以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAccessUnlessFromSaaSIPsForListAndGet",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::490065312183:role/label-studio-app-production"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::YOUR_BUCKET_NAME",
"arn:aws:s3:::YOUR_BUCKET_NAME/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
//// IP ranges for app.humansignal.com from the documentation
"x.x.x.x/32",
"x.x.x.x/32",
"x.x.x.x/32"
]
}
}
},
//// Optional
{
"Sid": "DenyAccessUnlessFromVPNForGetObject",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "YOUR_VPN_SUBNET/32"
}
}
}
]
}
Google 云存储
在Label Studio中动态导入任务并将标注导出到Google云存储(GCS)存储桶。有关Label Studio如何保护对云存储访问的详细信息,请参阅Secure access to cloud storage。
前提条件
要将您的GCS存储桶与Label Studio连接,请进行以下设置:
- 启用对存储桶的编程访问。 请参阅Google云存储文档中的Cloud Storage Client Libraries了解如何设置对GCS存储桶的访问权限。
- 设置对存储桶的身份验证。 您的账户必须拥有服务账户令牌创建者和存储对象查看者角色,以及storage.buckets.get访问权限。请参阅Google Cloud Storage文档中的设置身份验证和Cloud Storage的IAM权限。
- 如果您使用服务账号授权访问Google Cloud Platform,请确保已激活该账号。详情请参阅Google Cloud SDK命令行界面文档中的gcloud auth activate-service-account。
- 为您的存储桶设置跨源资源共享(CORS)访问权限,采用允许从Label Studio部署相同主机名进行GET访问的策略。详见Google云用户指南中的配置跨源资源共享(CORS)。使用或修改以下示例:
echo '[ { "origin": ["*"], "method": ["GET"], "responseHeader": ["Content-Type","Access-Control-Allow-Origin"], "maxAgeSeconds": 3600 } ]' > cors-config.json
将以下命令中的YOUR_BUCKET_NAME替换为您实际的存储桶名称,以更新存储桶的CORS设置:
gsutil cors set cors-config.json gs://YOUR_BUCKET_NAME
使用应用凭证的Google云存储
在Label Studio界面中设置连接
在Label Studio界面中,请按照以下步骤设置连接:
在您的网页浏览器中打开Label Studio。
对于特定项目,打开设置 > 云存储。
点击添加源存储。
在弹出的对话框中,选择Google Cloud Storage作为存储类型。
在存储标题字段中,输入要在Label Studio界面显示的存储名称。
指定GCS存储桶的名称,如果相关的话,还需指定存储桶前缀以标识内部文件夹或容器。
调整剩余的可选参数:
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
.*可收集所有对象。 - 如果您的存储桶包含BLOB存储文件(如JPG、MP3或类似文件类型),请启用将每个存储桶对象视为源文件。此设置会为每个存储桶对象创建用于标注的URL,例如
gs://my-gcs-bucket/image.jpg。如果存储桶中包含多个JSON文件且每个JSON文件对应一个任务,请保持此选项禁用。 - Choose whether to disable 使用预签名URL.
- 开启 - Label Studio 会生成一个预签名URL来加载媒体文件。
- OFF - Label Studio 使用自己的后端代理媒体文件。
- 调整预签名URL有效时长的计数器(以分钟为单位)。
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
在Google应用凭据字段中,添加包含您创建的GCS凭据的JSON文件,用于管理存储桶的身份验证。
本地用户:或者,您可以使用
GOOGLE_APPLICATION_CREDENTIALS环境变量和/或设置应用默认凭据,这样用户就不需要手动配置凭据。请参阅下方的增强安全性的应用默认凭据。点击添加存储。
对目标存储重复这些步骤,将已完成的数据标注同步到存储桶中。
添加存储后,点击同步从存储桶收集任务,或调用sync import storage API接口。
应用默认凭证以增强GCS安全性
如果您在本地使用Label Studio并搭配Google云存储,可以设置应用默认凭据来为所有项目全局提供云存储认证,这样用户就无需手动配置凭据。
推荐的做法是使用GOOGLE_APPLICATION_CREDENTIALS环境变量。例如:
export GOOGLE_APPLICATION_CREDENTIALS=json-file-with-GCP-creds-23441-8f8sd99vsd115a.json
通过Label Studio API添加存储
GCS增强安全性的IP过滤
Google Cloud Storage提供bucket IP过滤作为一种强大的安全机制,可根据源IP地址限制对数据的访问。此功能有助于防止未经授权的访问,并提供对谁可以与您的存储桶交互的细粒度控制。
了解更多关于VPC背后的源存储的信息。
常见使用场景:
- 限制存储桶访问权限,仅允许您组织的IP地址范围访问
- 仅允许从您基础设施中的特定VPC网络访问
- 通过限制仅允许已知IP地址访问来保护敏感数据安全
- 通过将第三方集成的IP加入白名单来控制其访问权限
How to Set Up IP Filtering
- 首先,通过控制台或CLI创建您的GCS存储桶
- 创建一个JSON配置文件来定义IP过滤规则。您有两种选择:
对于公共IP范围:
{ "mode": "Enabled", "publicNetworkSource": { "allowedIpCidrRanges": [ "xxx.xxx.xxx.xxx", // 您的第一个IP地址 "xxx.xxx.xxx.xxx", // 您的第二个IP地址 "xxx.xxx.xxx.xxx/xx" // 您的CIDR表示法IP范围 ] } }
对于VPC网络源:
{
"mode": "Enabled",
"vpcNetworkSources": [
{
"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
"allowedIpCidrRanges": [
RANGE_CIDR
]
}
]
}
使用以下命令将IP过滤规则应用到您的存储桶:
gcloud alpha storage buckets update gs://BUCKET_NAME --ip-filter-file=IP_FILTER_CONFIG_FILE当不再需要时移除IP过滤规则:
gcloud alpha storage buckets update gs://BUCKET_NAME --clear-ip-filter
需要考虑的限制
- 所有规则中最多允许200个IP CIDR块
- IP过滤规则中最多允许25个VPC网络
- 不支持双区域存储桶
- 可能影响来自某些Google Cloud服务的访问
Microsoft Azure Blob 存储
将您的Microsoft Azure Blob存储容器与Label Studio连接。有关Label Studio如何保护对云存储访问的详细信息,请参阅安全访问云存储。
前提条件
您必须在Label Studio中设置两个环境变量以连接到Azure Blob存储:
AZURE_BLOB_ACCOUNT_NAME用于指定存储账户的名称。AZURE_BLOB_ACCOUNT_KEY用于指定存储账户的密钥。
在用户界面中配置Label Studio需要使用的具体Azure Blob容器。在大多数涉及CORS问题的情况下,资源共享选项卡中需要设置GET权限(/GET//Access-Control-Allow-Origin/3600):
在Label Studio界面中设置连接
在Label Studio界面中,请按以下步骤设置连接:
- 在您的网页浏览器中打开Label Studio。
- 对于特定项目,打开设置 > 云存储。
- 点击添加源存储。
- 在弹出的对话框中,选择Microsoft Azure作为存储类型。
- 在存储标题字段中,输入要在Label Studio界面显示的存储名称。
- 指定Azure Blob容器的名称,如果相关,还可以指定容器前缀以表示内部文件夹或容器。
- Adjust the remaining optional parameters:
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
.*可收集所有对象。 - 在账户名称字段中,指定Azure存储的账户名称。您也可以将此字段设置为环境变量
AZURE_BLOB_ACCOUNT_NAME。 - 在账户密钥字段中,指定访问存储账户的密钥。您也可以将此字段设置为环境变量
AZURE_BLOB_ACCOUNT_KEY。 - 如果您的存储桶包含BLOB存储文件(如JPG、MP3或类似文件类型),请启用将每个存储桶对象视为源文件。此设置会为每个存储桶对象创建用于标注的URL,例如
azure-blob://container-name/image.jpg。如果存储桶中有多个JSON文件且每个JSON文件对应一个任务,请保持此选项禁用。 - Choose whether to disable 使用预签名URL, or shared access signatures.
- 开启 - Label Studio 会生成一个预签名URL来加载媒体文件。
- OFF - Label Studio 使用自己的后端代理媒体文件。
- 调整共享访问签名有效分钟数的计数器。
- 在文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用
- 点击添加存储。
- 对目标存储重复这些步骤,将已完成的数据标注同步到容器中。
添加存储后,点击同步从容器中收集任务,或调用API接口sync import storage。
通过Label Studio API添加存储
您也可以通过Label Studio API创建存储连接。
Redis数据库
您还可以将任务和标注存储在Redis数据库中。必须将任务和标注存储在不同的数据库中。如果您发现基于文件的云存储连接对数据集操作较慢,可能需要使用Redis数据库。
目前,此配置仅在您以默认模式托管Redis数据库并使用默认IP地址时受支持。
Label Studio 不会为您管理Redis数据库。有关托管和管理自己的Redis数据库的详细信息,请参阅Redis快速入门。由于Redis是内存数据库,保存在Redis中的数据不会持久化。为确保数据不丢失,请设置Redis持久化或使用其他方法来持久化数据,例如在云端使用Redis配合Microsoft Azure或Amazon AWS。
Redis存储源的任务格式
Label Studio 仅支持Redis数据库的字符串值,这些值应以JSON格式表示Label Studio任务。
例如:
'ls-task-1': '{"image": "http://example.com/1.jpg"}'
'ls-task-2': '{"image": "http://example.com/2.jpg"}'
...
> redis-cli -n 1
127.0.0.1:6379[1]> SET ls-task-1 '{"image": "http://example.com/1.jpg"}'
OK
127.0.0.1:6379[1]> GET ls-task-1
"{\"image\": \"http://example.com/1.jpg\"}"
127.0.0.1:6379[1]> TYPE ls-task-1
string
在Label Studio界面中设置连接
在Label Studio界面中,请按照以下步骤设置连接:
- 在您的网页浏览器中打开Label Studio。
- 对于特定项目,打开设置 > 云存储。
- 点击添加源存储。
- 在弹出的对话框中,选择Redis数据库作为存储类型。
- Update the Redis configuration parameters:
- 在路径字段中,指定数据库的路径。用作键前缀,将扫描该路径下的值以查找任务。
- 在密码字段中,输入服务器密码。
- 在主机字段中,指定托管数据库的服务器的IP地址,或
localhost。 - 在端口字段中,指定可用于访问数据库的端口。
- 在文件过滤正则表达式字段中,指定用于筛选数据库对象的正则表达式。使用
.*可收集所有对象。 - 如果您的数据库包含JPG、MP3或类似文件类型,请启用将每个存储桶对象视为源文件。此设置会为每个数据库对象创建用于标注的URL。如果数据库中有多个JSON文件(每个JSON文件对应一个任务),请保持此选项禁用状态。
- 点击添加存储。
- 对目标存储重复这些步骤,将已完成的数据标注同步到数据库。
添加存储后,点击同步从数据库收集任务,或调用API接口sync import storage。
通过Label Studio API添加存储
您也可以通过Label Studio API创建存储连接。
本地存储
如果您有本地文件想要从特定目录添加到Label Studio,可以在运行LS的机器上设置一个特定的本地目录作为源或目标存储。Label Studio会递归遍历该目录以读取任务。
前提条件
将这些变量添加到您的环境设置中:
LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=trueLABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/user(或 Windows 系统下的LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=C:\\data\\media)。
如果没有这些设置,任务中指向本地文件的本地存储和URL将无法工作。请注意,从本地文件系统提供数据可能存在安全风险。有关使用环境变量的更多信息,请参阅设置环境变量。
在Label Studio界面中设置连接
在Label Studio界面中,请按照以下步骤设置连接:
- 在您的网页浏览器中打开Label Studio。
- 对于特定项目,打开设置 > 云存储。
- 点击添加源存储。
在弹出的对话框中,选择本地文件作为存储类型。
在存储标题字段中,输入要在Label Studio界面显示的存储名称。
指定包含您文件的目录的绝对本地路径。该本地路径必须是绝对路径,并且包含
LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT值。例如,如果
LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/user,那么您的本地路径必须是/home/user/dataset1。有关该环境变量的更多信息,请参阅在Docker上运行Label Studio并使用本地存储。
备注
如果您使用的是Windows系统,在输入绝对本地路径时请确保使用反斜杠。
- (可选) 在文件过滤正则表达式字段中,指定一个正则表达式来筛选存储桶对象。使用
.*来收集所有对象。 - (Optional) Toggle Treat every bucket object as a source file.
- 如果您希望自动从媒体文件(如JPG、MP3或类似文件类型)创建Label Studio任务,请启用此选项。此选项适用于仅含一个源标签的标注配置。
- 如果想直接从存储中导入Label Studio JSON格式的任务,请禁用此选项。对于包含HyperText或多个源标签的复杂标注配置,请使用此选项。
- 点击添加存储。
- 对添加目标存储重复这些步骤,以使用本地文件目录进行导出。
添加存储后,点击同步从存储桶收集任务,或调用sync import storage API接口。
引用本地存储文件的任务
当您的任务具有多个或复杂的输入源时,例如标注配置中的多个对象标签或带有自定义数据值的超文本标签,您必须手动准备任务。
在这种情况下,您需要重复上述所有步骤来创建本地存储,但可以跳过可选阶段。您的绝对本地路径必须指向包含要按任务包含的文件(而非任务)的目录,该目录也可以包含其他子目录或文件,您将在任务内部指定它们。
与上述指令的差异:
- 7. 文件过滤正则表达式 - 留空(因为您将在任务内部指定)
- 8. 将每个存储桶对象视为源文件 - 关闭(因为你将在任务内部指定)
您的窗口将显示如下:

点击添加存储,但在创建存储后不要使用同步功能(不要点击同步存储按钮),以避免从存储文件自动创建任务。
在任务中引用您的文件时,请遵循以下准则:
- “绝对本地路径”必须是LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT的子目录(参见6)。
- 所有文件路径必须以
/data/local-files/?d=开头。 - In the following example, the first directory is
dataset1. For instance, if you have mixed data types in tasks, including- 音频文件
1.wav,2.wav位于audio文件夹内 - 图片文件
1.jpg,2.jpg位于images文件夹内,按如下方式构建路径:
- 音频文件
[{
"id": 1,
"data": {
"audio": "/data/local-files/?d=dataset1/audio/1.wav",
"image": "/data/local-files/?d=dataset1/images/1.jpg"
}
},
{
"id": 2,
"data": {
"audio": "/data/local-files/?d=dataset1/audio/2.wav",
"image": "/data/local-files/?d=dataset1/images/2.jpg"
}
}]
有几种方式可以添加您的自定义任务:API、网页界面、其他存储。最简单的方法是使用数据管理页面上的导入按钮。将您的json文件拖放到窗口内,然后点击蓝色的导入按钮。
使用自定义任务格式的本地存储
本视频教程演示了如何从零开始设置本地存储,并导入与本地存储文件关联的复杂任务格式的JSON任务。
通过Label Studio API添加存储
您也可以通过Label Studio API创建存储连接。
使用Docker设置本地存储
如果您在Docker中使用Label Studio,需要在启动Docker容器时将想要访问的本地目录挂载为卷。请参阅Run Label Studio on Docker and use local storage。
云存储故障排除
如需更多故障排除信息,请参阅Troubleshooting Label Studio。