knime-ip / knip

KNIME Image Processing Extension
https://www.knime.com/community/image-processing
49 stars 12 forks source link

Interactive Labeling Editor: more bugs and improvement requests #132

Open maierl opened 9 years ago

maierl commented 9 years ago
maierl commented 9 years ago

Just got an exception when I tried to load a labeling that was previously annotated with the Interactive Labeling Editor. Moreover, the 'new labelings' list is empty until I add another new labeling. Then all the previously entered labelings appear, too. Besides of that, the previously annotated labels don't seem to appear, or at least I didn't find any, yet.

ERROR    NodeContainerEditPart           The dialog pane for node 'Interactive Labeling Editor 0:166' has thrown a 'SWTException'. That is most likely an implementation error.
DEBUG    NodeContainerEditPart           The dialog pane for node 'Interactive Labeling Editor 0:166' has thrown a 'SWTException'. That is most likely an implementation error.
org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed)
    at org.eclipse.swt.SWT.error(SWT.java:4441)
    at org.eclipse.swt.SWT.error(SWT.java:4356)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:139)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4147)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764)
    at org.knime.core.node.util.ViewUtils.invokeAndWaitInEDT(ViewUtils.java:156)
    at org.knime.workbench.ui.wrapper.WrappedNodeDialog.open(WrappedNodeDialog.java:171)
    at org.knime.workbench.editor2.editparts.NodeContainerEditPart.openNodeDialog(NodeContainerEditPart.java:820)
    at org.knime.workbench.editor2.editparts.NodeContainerEditPart.openDialog(NodeContainerEditPart.java:728)
    at org.knime.workbench.editor2.editparts.NodeContainerEditPart.performRequest(NodeContainerEditPart.java:327)
    at org.eclipse.gef.tools.SelectEditPartTracker.performOpen(SelectEditPartTracker.java:194)
    at org.eclipse.gef.tools.SelectEditPartTracker.handleDoubleClick(SelectEditPartTracker.java:137)
    at org.knime.workbench.editor2.WorkflowSelectionDragEditPartsTracker.handleDoubleClick(WorkflowSelectionDragEditPartsTracker.java:111)
    at org.eclipse.gef.tools.AbstractTool.mouseDoubleClick(AbstractTool.java:1069)
    at org.eclipse.gef.tools.SelectionTool.mouseDoubleClick(SelectionTool.java:527)
    at org.eclipse.gef.EditDomain.mouseDoubleClick(EditDomain.java:231)
    at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseDoubleClicked(DomainEventDispatcher.java:291)
    at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDoubleClick(LightweightSystem.java:518)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:130)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Caused by: org.eclipse.swt.SWTException: Widget is disposed
    at org.eclipse.swt.SWT.error(SWT.java:4441)
    at org.eclipse.swt.SWT.error(SWT.java:4356)
    at org.eclipse.swt.SWT.error(SWT.java:4327)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:476)
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:348)
    at org.eclipse.swt.widgets.Control.setEnabled(Control.java:3285)
    at org.knime.workbench.nodemonitorview.NodeMonitorView.updateNodeContainerInfo(NodeMonitorView.java:375)
    at org.knime.workbench.nodemonitorview.NodeMonitorView.access$6(NodeMonitorView.java:371)
    at org.knime.workbench.nodemonitorview.NodeMonitorView$8.run(NodeMonitorView.java:682)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136)
    ... 41 more
maierl commented 9 years ago

trying to execute:

ERROR    Interactive Labeling Editor     Execute failed: java.lang.NullPointerException
DEBUG    Interactive Labeling Editor     Execute failed: java.lang.NullPointerException
java.lang.RuntimeException: java.lang.NullPointerException
    at org.knime.knip.base.node.TwoValuesToCellNodeModel$1.getCells(TwoValuesToCellNodeModel.java:403)
    at org.knime.core.data.container.RearrangeColumnsTable.calcNewCellsForRow(RearrangeColumnsTable.java:503)
    at org.knime.core.data.container.RearrangeColumnsTable.calcNewColsSynchronously(RearrangeColumnsTable.java:424)
    at org.knime.core.data.container.RearrangeColumnsTable.create(RearrangeColumnsTable.java:342)
    at org.knime.core.node.ExecutionContext.createColumnRearrangeTable(ExecutionContext.java:369)
    at org.knime.knip.base.node.TwoValuesToCellNodeModel.execute(TwoValuesToCellNodeModel.java:467)
    at org.knime.core.node.NodeModel.executeModel(NodeModel.java:555)
    at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1131)
    at org.knime.core.node.Node.execute(Node.java:927)
    at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:559)
    at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:95)
    at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:179)
    at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:110)
    at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:328)
    at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:204)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:125)
    at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:248)
Caused by: java.lang.NullPointerException
    at org.knime.knip.base.data.labeling.LabelingCell.getDimensions(LabelingCell.java:296)
    at org.knime.knip.io.nodes.annotation.edit.LabelingEditorNodeModel.compute(LabelingEditorNodeModel.java:89)
    at org.knime.knip.io.nodes.annotation.edit.LabelingEditorNodeModel.compute(LabelingEditorNodeModel.java:1)
    at org.knime.knip.base.node.TwoValuesToCellNodeModel$1.getCells(TwoValuesToCellNodeModel.java:378)
    ... 18 more
maierl commented 9 years ago

Is there a reason why the labeling editor is a modal dialog?

Right now I try to improve the annotation at those positions where the prediction is wrong. Therefore I have another window open showing the predictions. Moving back and forth between the windows, I select the same slices in each window individually.

As long as the node is executed, I'd expect it to keep the annotations that were already entered when re-opening its dialog.

dietzc commented 8 years ago

@AndreasBurger can this issue be closed?

AndreasBurger commented 8 years ago

Off the top of my head, and since my markup-fu isn't very strong:

  1. Should be handled by the new normalize settings.
  2. Probably still the case. However, that sounds like some default-y problem, so hopefully easy to fix.
  3. The old implementation had to convert the whole image on load. The new one should only have to do that when drawing. Subtle difference, but should halve loading times.
  4. Execute is still slow. As soon as there is a single change, the whole image is copied value by value. However, the progress bar could be more useful.
  5. I'll have to look at it. On the one hand I'm not resetting it intentionally, on the other I'm not preventing it either.
  6. Still valid. However, transparency is per-labeling, so a solution might be complicated.

Error 1: No Clue. Looks like some eclipse error to me. Error 2: Could still be around. However, I suspect something unorthodox was afoot in the input labeling.

dietzc commented 8 years ago

@maierl we improved the LabelingEditor a lot for the next release. However, there still might be possible performance (runtime/memory) improvements or minor other issues with the next version. It would be great if you could file issues for anything you find. The new LabelingEditor will be part of the KNIP release for KNIME 3.0 next week.

Additionally, @AndreasBurger will file issues for any open enhancements. We try to fix most of them for 1.4.1 (December 15) or at latest with 1.5.0 (end of January 16).