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-tp5019213p5019287.html

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