python-3.x - jupyter notebook 中图像的交互式标记
问题描述
我有一张图片列表:
pictures = {im1,im2,im3,im4,im5,im6}
在哪里
我想将图片分配给标签(1、2、3、4 等)
例如,这里的图片 1 到 3 属于标签 1,图片 4 属于标签 2,图片 5 属于标签 3,图片 6 属于标签 4。
->label = {1,1,1,2,3,4}
由于在标记图像时需要查看图像,因此在标记图像时需要一种方法来执行此操作。我正在考虑创建一组图像:
然后我通过单击属于相同标签的第一张和最后一张图片来定义范围,例如:
你怎么看 ?这有可能吗?
我想为不同范围的图片分配不同的标签。
例如:当一个人完成选择第一个标签时,可以通过双击来指示它 ,然后选择第二个标签范围,然后双击,然后选择第三个标签范围,然后双击,然后进行第四个标签范围的选择,以此类推。
它不必是双击来更改标签的选择,它也可以只是一个按钮或您可能有的任何其他想法。
最后应该有标签列表。
解决方案
从本质上讲,您正在寻找的大部分交互都归结为能够显示图像并实时检测对它们的点击。在这种情况下,您可以使用 jupyter 小部件(又名ipywidgets
)模块来实现您正在寻找的大部分(如果不是全部)。
看看这里描述的按钮小部件,并解释了如何注册到它的点击事件。问题 - 我们无法在按钮上显示图像,而且我在ipywidgets
文档中没有找到任何方法来做到这一点。有一个图像小部件,但它不提供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)
从技术上讲,您还可以编写一个自定义小部件来显示图像并听取点击,但我根本不相信这值得您花时间和精力。
祝你好运!
推荐阅读
- spring-boot - Spring Boot 2.1.0 with Jersey
- matlab - 加载 CSV 文件需要很长时间
- bash - 在标记之间改组文件的某些部分
- angular - http 错误是否总是在控制台中可见?
- mongodb - 猫鼬。按数组中的最后一个对象排序
- android - 在多模块 Android 项目中找不到 Kotlin 类型别名
- sql - 对 PostgreSQL 运行总结果进行分组
- database - 颤动,从 sqflite 获取项目并使用 ONTAP 在列表视图中显示
- jsf - 从 J2EE 安全转发获取原始 url
- python - Pandas 按顺序值分组