You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Label Studio预标注器开发:如何访问任务记录中的图片文件?

Label Studio预标注器文件路径访问问题

问题描述

我正在为Label Studio开发预标注器,官方文档参考价值有限。已导入本地图片,需要从任务记录中读取图片并传入模型。打印的任务记录如下:

{
  "id": 7,
  "data": {
    "image": "/data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg"
  },
  "meta": {},
  "created_at": "2022-12-29T00:49:34.141715Z",
  "updated_at": "2022-12-29T00:49:34.141720Z",
  "is_labeled": false,
  "overlap": 1,
  "inner_id": 7,
  "total_annotations": 0,
  "cancelled_annotations": 0,
  "total_predictions": 0,
  "comment_count": 0,
  "unresolved_comment_count": 0,
  "last_comment_updated_at": null,
  "project": 1,
  "updated_by": null,
  "file_upload": 7,
  "comment_authors": [],
  "annotations": [],
  "predictions": []
}

当前我的标注器实现代码如下:

class MyModel(LabelStudioMLBase):
    def __init__(self, **kwargs):
        super(MyModel, self).__init__(**kwargs)
        self.model = ...
        self.query_fn = ...

    def make_result_record(self, path: Path):
        mask = self.query_fn(path)
        image = Image.open(path)
        result = [
            {
                "original_width": image.width,
                "original_height": image.height,
                "image_rotation": 0,
                "value": {"format": "rle", "rle": [mask], "brushlabels": ["crack"]},
                "id": uuid(),
                "from_name": "tag",
                "to_name": "image",
                "type": "brushlabels",
                "origin": "inference",
            }
        ]
        return {"result": result, "score": 1.0}

    def predict(self, tasks, **kwargs):
        predictions = []
        for task in tasks:
            logger.info("task:")
            logger.info("\n" + json.dumps(task, indent=2))
            result = self.make_result_record(Path(task["data"]["image"]))
            predictions.append(result)
        return predictions

请问任务记录中给出的路径/data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg位于Label Studio启动的哪个存储中?我该如何访问该文件?(为何官方文档未提及此内容?)

解答

路径所在存储说明

这个路径是Label Studio的本地核心存储目录:

  • 若为Docker部署,/data/是容器内部默认的数据存储卷路径,对应你启动容器时挂载到本地的目录。
  • 若为本地直接部署(非Docker),/data/是Label Studio的DATA_DIR环境变量指定的目录,默认是Label Studio安装路径下的data子文件夹。

文件访问方法

方法1:使用Label Studio ML SDK内置方法(推荐)

Label Studio的ML Base类提供了get_task_data_path(task)方法,可自动处理不同部署环境下的路径映射,直接返回可读取的本地绝对路径。修改predict方法即可:

def predict(self, tasks, **kwargs):
    predictions = []
    for task in tasks:
        logger.info("task:")
        logger.info("\n" + json.dumps(task, indent=2))
        # 替换原路径获取方式
        local_image_path = self.get_task_data_path(task)
        result = self.make_result_record(Path(local_image_path))
        predictions.append(result)
    return predictions

该方法无需手动拼接路径,本地或Docker部署均能直接生效。

方法2:手动拼接路径(适合自定义部署场景)

  • 本地部署:
    查看Label Studio启动时的DATA_DIR环境变量值,若未手动设置,默认路径为{LabelStudio安装目录}/data。将任务中的路径去掉开头的/data/,拼接到DATA_DIR后即为完整本地路径。
    例如DATA_DIR是/home/user/my-label-studio-data,完整路径则为/home/user/my-label-studio-data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg。
  • Docker部署:
    启动容器时你一定挂载了本地目录到容器的/data(如命令中的-v /my/local/data:/data),本地对应的路径就是/my/local/data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg,直接使用该路径读取即可。

官方文档未提及的原因

这属于部署环境相关的底层细节,官方文档更聚焦通用的ML集成流程,而Label Studio支持多种存储方案(本地、云存储、Docker挂载等),不同场景下的路径逻辑差异较大,官方文档未逐一覆盖这类场景化细节,需结合部署配置自行推导,或查阅存储配置的深层文档内容。


内容的提问来源于stack exchange,提问作者lo tolmencre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:20:40