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.
Я надеюсь, что это поможет вам или любому, кто сталкивается с подобными проблемами. :)