大胆猜想:Labelme的AI多边形(AI-Polygon)功能是怎么实现的?
百度一下,有关AI-Polygon的词条大多是使用教程,却很少有人挖掘其背后的原理。在开发自己的标注软件过程中,我设想出一个接近原版的开发逻辑:
1,加一个按钮(名称为AI多边形),点击开启AI-Polygon功能,同时关闭其他所有鼠标操作会触发的功能
2,跳出选项框,供用户选择模型,用户选择后选项框关闭,并记录用户的选择作为flag
3,用户用左或右键点击画布,创建一个点,并且根据左或右键,设置该点的status值(左为1,右为0)
4,获取该点坐标、flag、status,存到一个字典里(还可根据软件用途扩展功能,例如记录当前图片名称等等)
5,调用API,API接收字典,完成模型推理,并返回一个列表,组成是:((点坐标),(点坐标)……),分割列表得到接下来要画的图形边框上多个点的坐标
6,根据API返回点的坐标,画出图形,图形绘制逻辑见附录1
7,若用户继续点击画布,则重复步骤3-6(称为一个轮回),并且在再次执行完步骤5之后,先清除上一个轮回画出的图形(注意!在点击AI多边形按钮之前画布上原有的图形不要清除),再执行该轮回的步骤6
8,若用户再次点击“AI多边形”按钮,则结束功能,保留最后一次绘制的图形
附录:
1, 图形绘制流程:
a.监听鼠标(鼠标按下、移动、释放等)
b.对象的创建和标签设置
c.对象的同步(随图像缩放和移动)
d.对象的加载和导出
e.对象的编辑支持
f.对象的清除功能
g.对象的特殊功能:如旋转框(RotatedRect)