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
相关产品推荐
相关产品推荐

