Skip to content

Implementation of flask application for image labeling

Notifications You must be signed in to change notification settings

dronperminov/ImageLabelerApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ImageLabelerApp

Приложение для разметки ограничивающих прямоугольников (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 с разметкой и тестовое изображение с отрисованной разметкой.

About

Implementation of flask application for image labeling

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published