指南 3个标注团队操作手册:提升标注速度与质量

从外部存储同步数据

将流行的云存储和外部存储系统与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处于关闭状态时,代理存储将被启用:

Screenshot of storage page with use pre-signed off
代理存储

在代理模式下,Label Studio后端会服务器端获取对象并直接流式传输到浏览器。

Diagram of proxy flow

这具有多重优势,包括:

  • 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/read
  • Microsoft.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网络隔离。

Diagram of presigned URL flow

所需的权限已包含在下面的云存储配置文档中。

目标存储

当标注者点击提交更新按钮进行任务标注时,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访问权限。

  1. 启用对存储桶的编程访问。参阅Amazon Boto3配置文档了解更多关于如何设置S3存储桶访问权限的信息。

备注

会话令牌仅在需要临时安全凭证时才需提供。请参阅AWS身份和访问管理文档中的申请临时安全凭证部分。

  1. 将以下角色策略分配给您设置的用于检索源任务并将标注存储在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 存储桶中被删除时。

  1. 为您的存储桶设置跨域资源共享(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设置为数据源连接:

  1. 在您的网页浏览器中打开Label Studio。
  2. 对于特定项目,打开设置 > 云存储
  3. 点击添加源存储
  4. 在弹出的对话框中,选择Amazon S3作为存储类型。
  5. 存储标题字段中,输入要在Label Studio界面中显示的存储名称。
  6. 指定S3存储桶的名称,如果相关,还可以指定存储桶前缀以标识内部文件夹或容器。
  7. 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有效期的分钟数计数器。
  8. 点击添加存储

添加存储后,点击同步从存储桶收集任务,或调用sync import storage API接口。

在Label Studio界面中设置目标存储连接

配置好对S3存储桶的访问权限后,请按以下步骤设置Amazon S3作为目标存储连接:

  1. 在您的网页浏览器中打开Label Studio。
  2. 对于特定项目,打开设置 > 云存储
  3. 点击添加目标存储
  4. 在出现的对话框中,选择Amazon S3作为存储类型。
  5. 存储标题字段中,输入要在Label Studio界面显示的存储名称。
  6. 指定S3存储桶的名称,如果适用,还可以指定存储桶前缀以表示内部文件夹或容器。
  7. 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账户临时安全凭证的会话令牌。
  8. 点击添加存储

添加存储后,点击同步从存储桶收集任务,或调用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界面中,请按照以下步骤设置连接:

  1. 在您的网页浏览器中打开Label Studio。

  2. 对于特定项目,打开设置 > 云存储

  3. 点击添加源存储

  4. 在弹出的对话框中,选择Google Cloud Storage作为存储类型。

  5. 存储标题字段中,输入要在Label Studio界面显示的存储名称。

  6. 指定GCS存储桶的名称,如果相关的话,还需指定存储桶前缀以标识内部文件夹或容器。

  7. 调整剩余的可选参数:

    • 文件过滤正则表达式字段中,指定用于筛选存储桶对象的正则表达式。使用.*可收集所有对象。
    • 如果您的存储桶包含BLOB存储文件(如JPG、MP3或类似文件类型),请启用将每个存储桶对象视为源文件。此设置会为每个存储桶对象创建用于标注的URL,例如gs://my-gcs-bucket/image.jpg。如果存储桶中包含多个JSON文件且每个JSON文件对应一个任务,请保持此选项禁用。
    • Choose whether to disable 使用预签名URL.
      • 开启 - Label Studio 会生成一个预签名URL来加载媒体文件。
      • OFF - Label Studio 使用自己的后端代理媒体文件。
    • 调整预签名URL有效时长的计数器(以分钟为单位)。
  8. Google应用凭据字段中,添加包含您创建的GCS凭据的JSON文件,用于管理存储桶的身份验证。

    本地用户:或者,您可以使用GOOGLE_APPLICATION_CREDENTIALS环境变量和/或设置应用默认凭据,这样用户就不需要手动配置凭据。请参阅下方的增强安全性的应用默认凭据

  9. 点击添加存储

  10. 目标存储重复这些步骤,将已完成的数据标注同步到存储桶中。

添加存储后,点击同步从存储桶收集任务,或调用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添加存储

查看我们的API文档。

GCS增强安全性的IP过滤

Google Cloud Storage提供bucket IP过滤作为一种强大的安全机制,可根据源IP地址限制对数据的访问。此功能有助于防止未经授权的访问,并提供对谁可以与您的存储桶交互的细粒度控制。

了解更多关于VPC背后的源存储的信息。

常见使用场景:

  • 限制存储桶访问权限,仅允许您组织的IP地址范围访问
  • 仅允许从您基础设施中的特定VPC网络访问
  • 通过限制仅允许已知IP地址访问来保护敏感数据安全
  • 通过将第三方集成的IP加入白名单来控制其访问权限
How to Set Up IP Filtering
  1. 首先,通过控制台或CLI创建您的GCS存储桶
  2. 创建一个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
      ]
    }
  ]
}
  1. 使用以下命令将IP过滤规则应用到您的存储桶:

    gcloud alpha storage buckets update gs://BUCKET_NAME --ip-filter-file=IP_FILTER_CONFIG_FILE
  2. 当不再需要时移除IP过滤规则:

    gcloud alpha storage buckets update gs://BUCKET_NAME --clear-ip-filter

需要考虑的限制

  • 所有规则中最多允许200个IP CIDR块
  • IP过滤规则中最多允许25个VPC网络
  • 不支持双区域存储桶
  • 可能影响来自某些Google Cloud服务的访问

阅读更多关于GCS IP过滤的信息

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界面中,请按以下步骤设置连接:

  1. 在您的网页浏览器中打开Label Studio。
  2. 对于特定项目,打开设置 > 云存储
  3. 点击添加源存储
  4. 在弹出的对话框中,选择Microsoft Azure作为存储类型。
  5. 存储标题字段中,输入要在Label Studio界面显示的存储名称。
  6. 指定Azure Blob容器的名称,如果相关,还可以指定容器前缀以表示内部文件夹或容器。
  7. 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 使用自己的后端代理媒体文件。
    • 调整共享访问签名有效分钟数的计数器。
  8. 点击添加存储
  9. 目标存储重复这些步骤,将已完成的数据标注同步到容器中。

添加存储后,点击同步从容器中收集任务,或调用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 AzureAmazon 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界面中,请按照以下步骤设置连接:

  1. 在您的网页浏览器中打开Label Studio。
  2. 对于特定项目,打开设置 > 云存储
  3. 点击添加源存储
  4. 在弹出的对话框中,选择Redis数据库作为存储类型。
  5. Update the Redis configuration parameters:
    • 路径字段中,指定数据库的路径。用作键前缀,将扫描该路径下的值以查找任务。
    • 密码字段中,输入服务器密码。
    • 主机字段中,指定托管数据库的服务器的IP地址,或localhost
    • 端口字段中,指定可用于访问数据库的端口。
    • 文件过滤正则表达式字段中,指定用于筛选数据库对象的正则表达式。使用.*可收集所有对象。
    • 如果您的数据库包含JPG、MP3或类似文件类型,请启用将每个存储桶对象视为源文件。此设置会为每个数据库对象创建用于标注的URL。如果数据库中有多个JSON文件(每个JSON文件对应一个任务),请保持此选项禁用状态。
  6. 点击添加存储
  7. 目标存储重复这些步骤,将已完成的数据标注同步到数据库。

添加存储后,点击同步从数据库收集任务,或调用API接口sync import storage

通过Label Studio API添加存储

您也可以通过Label Studio API创建存储连接。

本地存储

如果您有本地文件想要从特定目录添加到Label Studio,可以在运行LS的机器上设置一个特定的本地目录作为源或目标存储。Label Studio会递归遍历该目录以读取任务。

前提条件

将这些变量添加到您的环境设置中:

  • LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
  • LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/user (或 Windows 系统下的 LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=C:\\data\\media)。

如果没有这些设置,任务中指向本地文件的本地存储和URL将无法工作。请注意,从本地文件系统提供数据可能存在安全风险。有关使用环境变量的更多信息,请参阅设置环境变量

在Label Studio界面中设置连接

在Label Studio界面中,请按照以下步骤设置连接:

  1. 在您的网页浏览器中打开Label Studio。
  2. 对于特定项目,打开设置 > 云存储
  3. 点击添加源存储
Screenshot of the storage settings modal described in the preceding steps.
  1. 在弹出的对话框中,选择本地文件作为存储类型。

  2. 存储标题字段中,输入要在Label Studio界面显示的存储名称。

  3. 指定包含您文件的目录的绝对本地路径。该本地路径必须是绝对路径,并且包含LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT值。

    例如,如果LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/user,那么您的本地路径必须是/home/user/dataset1。有关该环境变量的更多信息,请参阅在Docker上运行Label Studio并使用本地存储

备注

如果您使用的是Windows系统,在输入绝对本地路径时请确保使用反斜杠。

  1. (可选) 在文件过滤正则表达式字段中,指定一个正则表达式来筛选存储桶对象。使用.*来收集所有对象。
  2. (Optional) Toggle Treat every bucket object as a source file.
    • 如果您希望自动从媒体文件(如JPG、MP3或类似文件类型)创建Label Studio任务,请启用此选项。此选项适用于仅含一个源标签的标注配置。
    • 如果想直接从存储中导入Label Studio JSON格式的任务,请禁用此选项。对于包含HyperText或多个源标签的复杂标注配置,请使用此选项。
  3. 点击添加存储
  4. 添加目标存储重复这些步骤,以使用本地文件目录进行导出。

添加存储后,点击同步从存储桶收集任务,或调用sync import storage API接口。

引用本地存储文件的任务

当您的任务具有多个或复杂的输入源时,例如标注配置中的多个对象标签或带有自定义数据值的超文本标签,您必须手动准备任务。

在这种情况下,您需要重复上述所有步骤来创建本地存储,但可以跳过可选阶段。您的绝对本地路径必须指向包含要按任务包含的文件(而非任务)的目录,该目录也可以包含其他子目录或文件,您将在任务内部指定它们。

与上述指令的差异:

  • 7. 文件过滤正则表达式 - 留空(因为您将在任务内部指定)
  • 8. 将每个存储桶对象视为源文件 - 关闭(因为你将在任务内部指定)

您的窗口将显示如下: Screenshot of the local storage settings for user task.

点击添加存储,但在创建存储后不要使用同步功能(不要点击同步存储按钮),以避免从存储文件自动创建任务。

在任务中引用您的文件时,请遵循以下准则:

  • “绝对本地路径”必须是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文件拖放到窗口内,然后点击蓝色的导入按钮。

Task upload via web.

使用自定义任务格式的本地存储

本视频教程演示了如何从零开始设置本地存储,并导入与本地存储文件关联的复杂任务格式的JSON任务。

通过Label Studio API添加存储

您也可以通过Label Studio API创建存储连接。

使用Docker设置本地存储

如果您在Docker中使用Label Studio,需要在启动Docker容器时将想要访问的本地目录挂载为卷。请参阅Run Label Studio on Docker and use local storage

云存储故障排除

如需更多故障排除信息,请参阅Troubleshooting Label Studio