Re: Weka 3D Trainable Segmentation in Java code

Posted by Maurice Argive on
URL: http://imagej.273.s1.nabble.com/Weka-3D-Trainable-Segmentation-in-Java-code-tp5019213p5019311.html

Hi Ignacio,

No, I ssh in to a server and run the code from the command line. This
worked fine when I was using "Weka Trainable Segmentation" by calling
WekaSegmentation() but throws the exception when I use "Weka Trainable
Segmentation 3D" and call WekaSegmentation(true) in the code. Maybe I'm not
describing this well. Let me know. Thanks for responding!

On Sat, Sep 2, 2017 at 5:10 AM, Ignacio Arganda-Carreras <
[hidden email]> wrote:

> Hello again, Maurice,
>
> That exception seems related to the use of the GUI from an environment that
> does not support keyboard, mouse or display. Are you calling the plugin
> remotely? Maybe using a remote desktop?
>
> ignacio
>
> On Tue, Aug 29, 2017 at 4:08 AM, Maurice Argive <[hidden email]>
> wrote:
>
> > Hi Ignacio,
> >
> > Thanks for fixing that. I'm no longer getting that error, but I am still
> > getting the HeadlessException after calling applyClassifier. I've
> included
> > the top few lines from the Exception. Any ideas on why this is happening?
> > I'm sure the classifier was created in 3D. And ClusterClassify is my
> class.
> > Thanks!
> >
> > img["2017_08_15_PBMC_AfterExpansionWell1_Box4_
> 4nucleiA_Good_63x_c0_crop1.
> > tif"
> > (-2), 8-bit, 363x403x1x182x1]
> > WARNING: core mtj jar files are not available as resources to this
> > classloader (sun.misc.Launcher$AppClassLoader@7d9d1a19)
> > Field of view: max sigma = 8.0, min sigma = 1.0
> > Read class name: class 1
> > Read class name: class 2
> > Unrecognized command: "32-bit"
> > Unrecognized command: "32-bit"
> > Unrecognized command: "32-bit"
> > Unrecognized command: "32-bit"
> > Error when updating feature stack.
> > java.util.concurrent.ExecutionException: java.awt.HeadlessException:
> > No X11 DISPLAY variable was set, but this program performed an operation
> > which requires it.
> > java.util.concurrent.FutureTask.report(FutureTask.java:122)
> > java.util.concurrent.FutureTask.get(FutureTask.java:192)
> > trainableSegmentation.FeatureStack3D.updateFeaturesMT(
> > FeatureStack3D.java:999)
> > trainableSegmentation.WekaSegmentation.applyClassifier(
> > WekaSegmentation.java:4842)
> > ClusterClassify.main(ClusterClassify.java:60)
> >
> > at java.util.concurrent.FutureTask.report(FutureTask.java:122)
> > at java.util.concurrent.FutureTask.get(FutureTask.java:192)
> > at
> > trainableSegmentation.FeatureStack3D.updateFeaturesMT(
> > FeatureStack3D.java:999)
> > at
> > trainableSegmentation.WekaSegmentation.applyClassifier(
> > WekaSegmentation.java:4842)
> > at ClusterClassify.main(ClusterClassify.java:60)
> > Caused by: java.awt.HeadlessException:
> > No X11 DISPLAY variable was set, but this program performed an operation
> > which requires it.
> > Unrecognized command: "32-bit"
> > at java.awt.GraphicsEnvironment.checkHeadless(
> > GraphicsEnvironment.java:204)
> > at java.awt.MenuComponent.<init>(MenuComponent.java:163)
> > at java.awt.MenuItem.<init>(MenuItem.java:214)
> > at java.awt.MenuItem.<init>(MenuItem.java:198)
> > at java.awt.Menu.<init>(Menu.java:157)
> > at java.awt.Menu.<init>(Menu.java:137)
> > at ij.Menus.getMenu(Menus.java:783)
> > at ij.Menus.getMenu(Menus.java:773)
> > at ij.Menus.addMenuBar(Menus.java:105)
> > at ij.IJ.init(IJ.java:362)
> > at ij.IJ.run(IJ.java:349)
> > at trainableSegmentation.FeatureStack3D$11.call(FeatureStack3D.java:678)
> > at trainableSegmentation.FeatureStack3D$11.call(FeatureStack3D.java:1)
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > at
> > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > ThreadPoolExecutor.java:1149)
> > at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > ThreadPoolExecutor.java:624)
> > at java.lang.Thread.run(Thread.java:748)
> > Feature stack array is now updated (182 slice(s) with 2 feature(s), took
> > 7065ms).
> > Could not apply Classifier!
> >
> >
> > On Tue, Aug 22, 2017 at 4:35 AM, Ignacio Arganda-Carreras <
> > [hidden email]> wrote:
> >
> > > Dear Maurice,
> > >
> > > I have found the problem and fix it. Please go ahead and update the
> > plugin
> > > to its latest release (3.2.14).
> > >
> > > Let me know if you have any more problems.
> > >
> > > Thanks again for reporting!
> > >
> > > ignacio
> > >
> > > On Tue, Aug 22, 2017 at 4:26 AM, Maurice Argive <
> > [hidden email]>
> > > wrote:
> > >
> > > > Hi Ignacio,
> > > >
> > > > Yes, I used "Trainable Weka Segmentation3D" in Fiji to create the
> > > > classifier. Then I used the following code to load that classifier
> and
> > > > segment additional datasets programmatically:
> > > >
> > > > ImagePlus image = IJ.openImage("image-file-to-be-classified.tif");
> > > > WekaSegmentation ws = new WekaSegmentation(true);
> > > > ws.loadClassifier("saved-3D-model-file.model");
> > > > ImagePlus output = ws.applyClassifier(image, 0, false);
> > > > IJ.save(output, "output.tif");
> > > > output.close();
> > > > image.close();
> > > >
> > > > On Fri, Aug 18, 2017 at 4:50 AM, Ignacio Arganda-Carreras <
> > > > [hidden email]> wrote:
> > > >
> > > > > Hello Maurice,
> > > > >
> > > > > Can you tell me the exact steps you took and the code you are
> > running?
> > > > Did
> > > > > you use "Trainable Weka Segmentation 3D" to create the classifier?
> > > > >
> > > > > ignacio
> > > > >
> > > > > On Thu, Aug 17, 2017 at 3:04 AM, Maurice Argive <
> > > > [hidden email]>
> > > > > wrote:
> > > > >
> > > > > > Hi Ignacio,
> > > > > >
> > > > > > Thanks for the info. I created a new 3D model just to be sure and
> > ran
> > > > it
> > > > > in
> > > > > > the code. Now I'm getting this exception:
> > > > > >
> > > > > > Read class name: class 1
> > > > > >
> > > > > > Read class name: class 2
> > > > > >
> > > > > > Error while adjusting data!
> > > > > >
> > > > > > java.lang.NullPointerException
> > > > > >
> > > > > >
> > > > > > trainableSegmentation.WekaSegmentation.setEnabledFeatures(
> > > > > > WekaSegmentation.java:6420)
> > > > > >
> > > > > >
> > > > > > trainableSegmentation.WekaSegmentation.
> > > adjustSegmentationStateToData(
> > > > > > WekaSegmentation.java:4169)
> > > > > >
> > > > > >
> > > > > > trainableSegmentation.WekaSegmentation.loadClassifier(
> > > > > > WekaSegmentation.java:717)
> > > > > >
> > > > > >          ClusterClassify.main(ClusterClassify.java:54)
> > > > > >
> > > > > >
> > > > > >          at
> > > > > > trainableSegmentation.WekaSegmentation.setEnabledFeatures(
> > > > > > WekaSegmentation.java:6420)
> > > > > >
> > > > > >          at
> > > > > > trainableSegmentation.WekaSegmentation.
> > > adjustSegmentationStateToData(
> > > > > > WekaSegmentation.java:4169)
> > > > > >
> > > > > >          at
> > > > > > trainableSegmentation.WekaSegmentation.loadClassifier(
> > > > > > WekaSegmentation.java:717)
> > > > > >
> > > > > >          at ClusterClassify.main(ClusterClassify.java:54)
> > > > > >
> > > > > > Apply Classifier
> > > > > >
> > > > > > Exception in thread "main" java.lang.NullPointerException
> > > > > >
> > > > > >
> > > > > > trainableSegmentation.WekaSegmentation.applyClassifier(
> > > > > > WekaSegmentation.java:4709)
> > > > > >
> > > > > >          ClusterClassify.main(ClusterClassify.java:60)
> > > > > >
> > > > > >
> > > > > >          at
> > > > > > trainableSegmentation.WekaSegmentation.applyClassifier(
> > > > > > WekaSegmentation.java:4709)
> > > > > >
> > > > > >          at ClusterClassify.main(ClusterClassify.java:60)
> > > > > >
> > > > > > Any ideas on what could be causing this? Is there something else
> I
> > > need
> > > > > to
> > > > > > do? The sample data I'm running classifies correctly when using
> the
> > > > Fiji
> > > > > > plugin.
> > > > > >
> > > > > > Thanks!
> > > > > >
> > > > > > Maurice
> > > > > >
> > > > > > On Wed, Aug 16, 2017 at 7:08 AM, Ignacio Arganda-Carreras <
> > > > > > [hidden email]> wrote:
> > > > > >
> > > > > > > Hello Maurice,
> > > > > > >
> > > > > > > I tried to replicate your error but I couldn't. Are you sure
> > you're
> > > > not
> > > > > > > trying to load a classifier trained on 2D features instead of
> one
> > > > > trained
> > > > > > > using 3D features? Your code worked for me.
> > > > > > >
> > > > > > > And by the way, you don't need to set the training image
> anymore
> > if
> > > > you
> > > > > > are
> > > > > > > just loading a classifier and applying it to a new image. Have
> a
> > > look
> > > > > at
> > > > > > > this example in the wiki
> > > > > > > <http://imagej.net/Scripting_the_Trainable_Weka_
> > > > > > > Segmentation#Example:_apply_classifier_to_all_images_in_
> folder>
> > > > > > > .
> > > > > > >
> > > > > > > Cheers!
> > > > > > >
> > > > > > > On Wed, Aug 16, 2017 at 4:43 AM, Maurice Argive <
> > > > > > [hidden email]>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > I'm using the following code to classify images from the
> > command
> > > > > line:
> > > > > > > >
> > > > > > > > ImagePlus image = IJ.openImage("image-file-to-
> > > be-classified.tif");
> > > > > > > > WekaSegmentation ws = new WekaSegmentation(image);
> > > > > > > > ws.loadClassifier("saved-model-file.model");
> > > > > > > > ImagePlus output = ws.applyClassifier(image, 0, false);
> > > > > > > > IJ.save(output, "output.tif");
> > > > > > > > output.close();
> > > > > > > > image.close();
> > > > > > > >
> > > > > > > > and this has been working well for me for a few years. I
> > noticed
> > > > in a
> > > > > > > > recent Fiji upgrade that there is now a 3D menu option. I'm
> > > trying
> > > > to
> > > > > > use
> > > > > > > > that feature in code so I use:
> > > > > > > >
> > > > > > > > ImagePlus image = IJ.openImage("image-file-to-
> > > be-classified.tif");
> > > > > > > > WekaSegmentation ws = new WekaSegmentation(true);
> > > > > > > > ws.setTrainingImage(image);
> > > > > > > > ws.loadClassifier("saved-model-file.model");
> > > > > > > > ImagePlus output = ws.applyClassifier(image, 0, false);
> > > > > > > > IJ.save(output, "output.tif");
> > > > > > > > output.close();
> > > > > > > > image.close();
> > > > > > > >
> > > > > > > > and it seems to be working until the applyClassifier method
> > > runs. I
> > > > > > then
> > > > > > > > get a number of HeadlessExceptions that I never got before.
> Is
> > > > there
> > > > > a
> > > > > > > way
> > > > > > > > to run the 3D segmentation in code without the GUI?
> > > > > > > >
> > > > > > > > Thanks!
> > > > > > > >
> > > > > > > > --
> > > > > > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Ignacio Arganda-Carreras, Ph.D.
> > > > > > > Ikerbasque Research Fellow
> > > > > > > Departamento de Ciencia de la Computacion e Inteligencia
> > Artificial
> > > > > > > Facultad de Informatica, Universidad del Pais Vasco
> > > > > > > Paseo de Manuel Lardizabal, 1
> > > > > > > 20018 Donostia-San Sebastian
> > > > > > > Guipuzcoa, Spain
> > > > > > >
> > > > > > > Phone : +34 943 01 73 25
> > > > > > > Website: http://sites.google.com/site/iargandacarreras/
> > > > > > >
> > > > > > > --
> > > > > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > > > > > >
> > > > > >
> > > > > > --
> > > > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Ignacio Arganda-Carreras, Ph.D.
> > > > > Ikerbasque Research Fellow
> > > > > Departamento de Ciencia de la Computacion e Inteligencia Artificial
> > > > > Facultad de Informatica, Universidad del Pais Vasco
> > > > > Paseo de Manuel Lardizabal, 1
> > > > > 20018 Donostia-San Sebastian
> > > > > Guipuzcoa, Spain
> > > > >
> > > > > Phone : +34 943 01 73 25
> > > > > Website: http://sites.google.com/site/iargandacarreras/
> > > > >
> > > > > --
> > > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > > > >
> > > >
> > > > --
> > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > > >
> > >
> > >
> > >
> > > --
> > > Ignacio Arganda-Carreras, Ph.D.
> > > Ikerbasque Research Fellow
> > > Departamento de Ciencia de la Computacion e Inteligencia Artificial
> > > Facultad de Informatica, Universidad del Pais Vasco
> > > Paseo de Manuel Lardizabal, 1
> > > 20018 Donostia-San Sebastian
> > > Guipuzcoa, Spain
> > >
> > > Phone : +34 943 01 73 25
> > > Website: http://sites.google.com/site/iargandacarreras/
> > >
> > > --
> > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> > >
> >
> > --
> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> >
>
>
>
> --
> Ignacio Arganda-Carreras, Ph.D.
> Ikerbasque Research Fellow
> Departamento de Ciencia de la Computacion e Inteligencia Artificial
> Facultad de Informatica, Universidad del Pais Vasco
> Paseo de Manuel Lardizabal, 1
> 20018 Donostia-San Sebastian
> Guipuzcoa, Spain
>
> Phone : +34 943 01 73 25
> Website: http://sites.google.com/site/iargandacarreras/
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html