Skip to content

Pixel Classifier - Data on OMERO public #105

Description

@romainGuiet

IMPORTANT!

Before we begin...

Before submitting your bug report, please check the following:

  • I've definitely found a bug (it you're not sure, please use image.sc instead)
  • I've checked https://qupath.github.io for a new release that might already have fixed the issue
  • I've checked the Changelog to see if the bug has already been fixed in the next release
  • I've checked for existing GitHub issues describing the same problem

Bug report

Describe the bug

it looks like the pixel classifier can't access all the pixels of the image, therefore during "training" it doesn't display the overlay class on the entire image , but still one can save a pixel classifier.
BUT when loading the pixel classifier, it will return this error

Image

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
java.io.IOException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
	at qupath.lib.analysis.images.ContourTracing.traceGeometriesImpl(ContourTracing.java:1074)
	at qupath.lib.analysis.images.ContourTracing.traceGeometries(ContourTracing.java:1022)
	at qupath.opencv.ml.pixel.PixelClassifierTools.createObjectsFromPixelClassifier(PixelClassifierTools.java:426)
	at qupath.opencv.ml.pixel.PixelClassifierTools.createObjectsFromPredictions(PixelClassifierTools.java:227)
	at qupath.opencv.ml.pixel.PixelClassifierTools.createDetectionsFromPixelClassifier(PixelClassifierTools.java:140)
	at qupath.opencv.ml.pixel.PixelClassifierTools.createDetectionsFromPixelClassifier(PixelClassifierTools.java:162)
	at qupath.process.gui.commands.ml.PixelClassifierUI.promptToCreateObjects(PixelClassifierUI.java:398)
	at qupath.process.gui.commands.ml.PixelClassifierUI.lambda$createPixelClassifierButtons$3(PixelClassifierUI.java:155)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:199)
	at javafx.scene.Node.fireEvent(Node.java:8963)
	at javafx.scene.control.Button.fire(Button.java:203)
	at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:207)
	at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:199)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3987)
	at javafx.scene.Scene.processMouseEvent(Scene.java:1893)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2711)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:430)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:560)
	at com.sun.glass.ui.View.notifyMouse(View.java:946)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
	at java.base/java.util.concurrent.FutureTask.report(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.get(Unknown Source)
	at qupath.lib.analysis.images.ContourTracing.invokeAll(ContourTracing.java:1033)
	at qupath.lib.analysis.images.ContourTracing.traceGeometriesImpl(ContourTracing.java:1049)
	... 60 more
Caused by: java.lang.RuntimeException: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
	at qupath.lib.analysis.images.ContourTracing.traceGeometries(ContourTracing.java:1121)
	at qupath.lib.analysis.images.ContourTracing.lambda$traceGeometriesImpl$11(ContourTracing.java:1049)
	at qupath.lib.analysis.images.ContourTracing.lambda$invokeAll$10(ContourTracing.java:1029)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	... 1 more
Caused by: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
	at qupath.ext.omero.core.pixelapis.web.WebReader.readTile(WebReader.java:67)
	at qupath.ext.omero.core.imageserver.OmeroImageServer.readTile(OmeroImageServer.java:95)
	at qupath.lib.images.servers.AbstractTileableImageServer.lambda$prerequestTiles$2(AbstractTileableImageServer.java:519)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at qupath.lib.images.servers.AbstractTileableImageServer.prerequestTiles(AbstractTileableImageServer.java:521)
	at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:298)
	at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
	at qupath.lib.images.servers.ServerTools.getPaddedRequest(ServerTools.java:256)
	at qupath.opencv.ops.ImageOps$ChannelImageDataOp.apply(ImageOps.java:407)
	at qupath.opencv.ml.pixel.OpenCVPixelClassifier.applyClassification(OpenCVPixelClassifier.java:104)
	at qupath.lib.classifiers.pixel.PixelClassificationImageServer.readTile(PixelClassificationImageServer.java:308)
	at qupath.lib.images.servers.AbstractTileableImageServer.lambda$getTile$0(AbstractTileableImageServer.java:213)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at qupath.lib.images.servers.AbstractTileableImageServer.getTile(AbstractTileableImageServer.java:217)
	at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:290)
	at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
	at qupath.lib.gui.viewer.overlays.PixelClassificationOverlay.lambda$requestTile$5(PixelClassificationOverlay.java:575)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	... 4 more
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Could not decode image from response
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at qupath.ext.omero.core.pixelapis.web.WebReader.readTile(WebReader.java:61)
	... 21 more
Caused by: java.lang.IllegalArgumentException: Could not decode image from response
	at qupath.ext.omero.core.RequestSender.lambda$getImage$5(RequestSender.java:218)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

To Reproduce

Steps to reproduce the behavior:

  1. Use this qupath project qp_bone.zip (data are on a public OMERO)
  2. open the second image ( analysis_whole) run load pixel classifier "bone_classifier"
Image
  1. Click "Create objects" , on "Full image" => get the error
  2. Alternatively, with annotations, it works with annotation "A" but fails with same error for "B" and "C"
Image

Expected behavior

Pixel classifier dislay results

Desktop (please complete the following information):

  • OS: Win11
  • QuPath Version: 0.6.0
  • OMERO extension: 0.1.2

Additional context

  • Connection to omero-public (using the WEB API from the omero extension) + image import + pixel classifier => error reproduced

  • Download image locally + image import + pixel classifier ==> no error

  • Connection to omero NON-public (using the ICE API from the omero extension) + image import + pixel classifier => no error

  • Connection to omero NON-public (using the WEB API from the omero extension) + image import + pixel classifier => error reproduced

So, it seems that the error comes from the omero extension .

Thank you in advance for your help,

Cheers

ping : @Rdornier ,@NicoKiaru

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions