Интерактивная маркировка изображений в блокноте Jupyter - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть список картинок:

pictures = {im1,im2,im3,im4,im5,im6}

Где

im1: enter image description here

im2: enter image description here

im3: enter image description here

im4: enter image description here

im5: enter image description here

im6: enter image description here

Я хочу назначить изображения для меток (1,2,3,4 и т. Д.)

Например, здесь изображения с 1 по 3 относятся к ярлыку 1, изображение 4 относится к ярлыку 2, изображение 5 к ярлыку 3, а изображение 6 к ярлыку 4.

-> label = {1,1,1,2,3,4}

Так как мне нужно видеть изображения, когда я их маркирую, мне нужен способ сделать это при их маркировке.Я думал о создании массива изображений:

enter image description here

А затем я определяю диапазоны, нажимая на первое и последнее изображение, принадлежащее тем же ярлыкамНапример:

enter image description here

Что вы думаете?Это как-то возможно?

Я хотел бы назначить разные метки для разных диапазонов изображений.

enter image description here

Например,: После выбора первой метки можно указать ее с помощью , дважды щелкнуть и затем выбрать второй диапазон меток, затем , дважды щелкнуть , а затем сделать выбор.третьего диапазона меток, затем Дважды щелкните , затем выполните выбор четвертого диапазона меток и т. д.

Не нужно дважды щелкнуть, чтобы изменить выборярлыки, это также может быть просто кнопка или любая другая идея, которая может у вас возникнуть.

В конце должен быть список ярлыков.

1 Ответ

0 голосов
/ 08 марта 2019

По сути, большая часть взаимодействия, которое вы ищете, сводится к возможности отображать изображения и обнаруживать клики по ним в режиме реального времени.В этом случае вы можете использовать модуль виджетов jupyter (он же ipywidgets) для достижения большинства (если не всех) того, что вы ищете.

Посмотрите на виджет кнопки, который описан здесь с объяснением на как зарегистрироваться на событие клика .Проблема - мы не можем отобразить изображение на кнопке, и я не нашел способа сделать это в документации ipywidgets.Существует виджет image , но он не предоставляет событие on_click.Поэтому создайте собственный макет с кнопкой под каждым изображением:

COLS = 4
ROWS = 2
IMAGES = ...
IMG_WIDTH = 200
IMG_HEIGHT = 200

def on_click(index):
    print('Image %d clicked' % index)

import ipywidgets as widgets
import functools

rows = []

for row in range(ROWS):
    cols = []
    for col in range(COLS):
        index = row * COLS + col
        image = widgets.Image(
            value=IMAGES[index], width=IMG_WIDTH, height=IMG_HEIGHT
        )
        button = widgets.Button(description='Image %d' % index)
        # Bind the click event to the on_click function, with our index as argument
        button.on_click(functools.partial(on_click, index))

        # Create a vertical layout box, image above the button
        box = widgets.VBox([image, button])
        cols.append(box)

    # Create a horizontal layout box, grouping all the columns together
    rows.append(widgets.HBox(cols))

# Create a vertical layout box, grouping all the rows together
result = widgets.VBox(rows)

Технически вы также можете написать собственный виджет для отображения изображения и прослушивания щелчка, но я просто не верю, что оно того стоитвремя и усилия.

Удачи!

...