在Jupyter Notebook中对图像进行交互式标记

时间:2019-02-28 08:55:04

标签: python-3.x image opencv jupyter-notebook interactive

我有一张照片清单:

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 :(得分:3)

基本上,您正在寻找的大多数互动都归结为能够显示图像并实时检测对它们的点击。在这种情况下,您可以使用jupyter小部件(aka ipywidgets)模块来实现所需的大部分(如果不是全部)。

看看here中描述的按钮小部件,其中包含有关如何注册其点击事件的说明。问题是-我们无法在按钮上显示图像,并且在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)

从技术上讲,您也可以编写自定义窗口小部件以显示图像并听取点击,但我根本认为这不值得您花费时间和精力。

祝你好运!