Label Studio: Доступ к файлу, указанному в записи задачи

Я пытаюсь реализовать предварительную маркировку для Label Studio. Документация (например, https://labelstud.io/guide/ml_create.html#Example-inference-call) здесь не очень полезна. Я импортировал изображения локально, и мне нужно прочитать их из записи задачи, чтобы передать их в мою модель. Когда я печатаю запись задачи, она выглядит так:

      {
  "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):
        # Reference: https://labelstud.io/tutorials/sklearn-text-classifier.html

        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. Как мне получить к этому доступ? (И почему в документации об этом не говорится......)

1 ответ

Предполагая, что вы находитесь на локальном хосте, это должно быть:

      http://localhost:8080/data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg

Чтобы получить доступ к файлу, вы можете использовать свой токен доступа API:Label Studio UI → Учетная запись и настройки → Токен доступа.

Затем в вашем сценарии:

      from urllib.request import Request, urlopen
LABEL_STUDIO_URL = 'http://localhost:8080'
API_KEY = 'xxxxxxxxxxxxxxxxx' #Your Token
request = Request(LABEL_STUDIO_URL+'/data/upload/1/cfcf4486-0cdd1413486f7d923e6eff475c43809f.jpeg')
request.add_header('Authorization', 'Token %s' % API_KEY)
image_file = urlopen(request) #Should give a "file-like" object.

Я надеюсь, что это поможет вам или любому, кто сталкивается с подобными проблемами. :)

Другие вопросы по тегам