Приложение для разметки ограничивающих прямоугольников (bounding box) на изображениях. Позволяет настроить список используемых классов и запустить web интерфейс для выполнения разметки.
Все настройки задаются в файле config.json
. Пример конфигурационного файла:
{
"title": "Заголовок страницы",
"port": 5000,
"labels": {
"text": [255, 0, 0],
"table": [0, 255, 0],
"picture": [0, 0, 255]
},
"label_mode": "json",
"bbox_format": "xywh",
"use_relative": true,
"sampling": "sequential",
"images_path": "images",
"labeled_path": "labeled",
"labeled_name": "labeled.json"
}
Имена классов задаются в виде словаря, в котором ключу соотвествует название класса, а значению список из трёх целых чисел цвета в rgb формате.
Изображения, которые необходимо разметить должны находиться в папке, задаваемой параметром images_path
(по умолчанию images
). После разметки очередного изображения оно будет перемещаться в папку с размеченными изображениями, задаваемую параметром labeled_path
(по умолчанию labeled
, автоматически создаётся, если не существует при первом запуске).
Формат результатов разметки зависит от значения label_mode
:
json
- разметкой является словарь, ключами в котором являются имена размеченных изображений, а значениями списки со словарями, описывающими ббоксы и классы. Имя файла с разметкой соответствует параметруlabeled_name
(по умолчаниюlabeled.json
). Результатом разметки изображенияimage.png
с может быть такой файлlabeled.json
:
{
"image.png": [
{
"label": "text",
"x": 0.1,
"y": 0.1,
"width": 0.5,
"height": 0.25
},
{
"label": "table",
"x": 0.4,
"y": 0.05,
"width": 0.2,
"height": 0.8
}
]
}
multiple-json
- для каждого изображения с именемfilename
создаётся файлfilename.json
, в котором содержится словарь из двух полей - имени изображения и размеченных областей. Результатом разметки изображенияimage.png
с может быть такой файлimage.png.json
:
{
"name": "image.png",
"entities": [
{
"label": "text",
"x": 0.1,
"y": 0.1,
"width": 0.5,
"height": 0.25
},
{
"label": "table",
"x": 0.4,
"y": 0.05,
"width": 0.2,
"height": 0.8
}
]
}
Доступны два режима разметки, задаваемые с помощью параметра sampling
:
sequential
- изображения выбираются последовательно, упорядоченно по имени (используется по умолчанию)random
- изображения выбираются в случайном порядке
Режимы сохранения ббоксов определяются двумя параметрами:
bbox_format
- определяет формат хранения координат (по умолчаниюxywh
)use_relative
- определяет использование нормализованных координат (по умолчаниюtrue
).
xywh
- сохраняются координаты левого верхнего угла и ширина с высотой:
{
"label": "text",
"x": 0.1,
"y": 0.1,
"width": 0.5,
"height": 0.25
}
xyxy
- сохраняются координаты левого верхнего и правого нижнего углов
{
"label": "text",
"x1": 0.1,
"y1": 0.1,
"x2": 0.6,
"y2": 0.35
}
xcycwh
- сохраняются координаты центра и ширина с высотой
{
"label": "text",
"xc": 0.35,
"yc": 0.225,
"width": 0.5,
"height": 0.25
}
- Перед первым запуском установите все зависимости:
pip install -r requirements.txt
-
Поместите изображения для разметки в папку
images_path
, указанную в конфиге -
Запустите систему разметки (интерфейс будет доступен по адресу
localhost:port
):
python app.py
Удерживая левую кнопку мыши, переместите курсор в другую точку и отпустите кнопку мыши. Выберите нужную метку в появившемся списке или нажмите номер этой метки на клавиатуре.
Наведите указатель мыши на ббокс и щёлкните правой кнопкой мыши.
Наведите курсор на ббокс, зажмите левую кнопку мыши, переместите рамку в нужную точку и отпустите кнопку мыши.
Наведите указатель мыши на границу ббокса, зажмите левую кнопку мыши, перетащите границу в нужное место и отпустите кнопку.
Нажмите клавишу +
или -
, чтобы увеличить или уменьшить масштаб соответственно.
Нажмите на кнопку reset
.
Нажмите кнопку save
. Изображение с разметкой переместится из папки images_path
в папку labeled_path
. Также будут созданы файл .json
с разметкой и тестовое изображение с отрисованной разметкой.