Apply WEKA segmentation script

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Apply WEKA segmentation script

Rainer M. Engel
Hey..

I tried WEKA automation via macro and despite of all the available
commands this seems to be not that ideal, although this is a clear
drawback considering the GUI for a nice way to create robust models,
which shall/could also be applied via macro (batch).

To wait for the UI to pop up could be enhanced via..

>> macro language..........................................START
wekaNotReady = true;
c = 0;
while (wekaNotReady && c < 60) {
        if (isOpen("Trainable Weka Segmentation v3.2.33") == true) {
wekaNotReady = false; }
        wait(50);
        c++;
}
<< macro language............................................END

But I could not work with batch mode and WEKA (macro).

So this BeanShell-Script offers the same functionality like the known
"Apply SIOX segmentator" for SIOX but in this case for WEKA (only a
modification of a script, which was part of the WEKA documentation.

>> BeanShell language (Apply-saved-WEKA-segmentator.bsh).........START
// @File(label="Weka model", description="Select the Weka model to
apply") modelPath
// @String(label="Result mode",choices={"Labels","Probabilities"})
resultMode

import trainableSegmentation.WekaSegmentation;
import trainableSegmentation.utils.Utils;
import ij.io.FileSaver;
import ij.IJ;
import ij.ImagePlus;

// based on the beanshell script found on:
// https://imagej.net/Scripting_the_Trainable_Weka_Segmentation modified
by rengel, 2020-01

// starting time
startTime = System.currentTimeMillis();

// caculate probabilities?
getProbs = resultMode.equals( "Probabilities" );
// create segmentator
segmentator = new WekaSegmentation();
// load classifier
segmentator.loadClassifier( modelPath.getCanonicalPath() );

// get details from already opened image
image = IJ.getImage();
//IJ.log(""+image);

// apply classifier and get results (0 indicates number of threads is
auto-detected)
result = segmentator.applyClassifier( image, 0, getProbs );

if( !getProbs )
        // assign same LUT as in GUI
        result.setLut( Utils.getGoldenAngleLUT() );

// show result
result.show();

// force garbage collection (important for large images)
result = null;
image = null;
System.gc();

// print elapsed time
estimatedTime = System.currentTimeMillis() - startTime;
IJ.log( "** Finished processing image in " + estimatedTime + " ms **" );
<< BeanShell language............................................END


I put the "Apply-saved-WEKA-segmentator.bsh" into a sub-folder of
'scripts' to see this script in the menu of ImageJ, but it is not shown,
although my Python scripts are. Any help on this is much appreciated.

Kind regards,
Rainer

--
Rainer M. Engel
Berlin

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: Apply WEKA segmentation script

Rainer M. Engel
Can somebody help me, why the provided BeanShell-Script below does work
nicely from the editor but not when put into ImageJ's 'scripts'-folder
to be executed from the menu.

That would be great..

Kind regards,
Rainer




Am 23.01.2020 um 10:37 schrieb Rainer M. Engel:

> Hey..
>
> I tried WEKA automation via macro and despite of all the available
> commands this seems to be not that ideal, although this is a clear
> drawback considering the GUI for a nice way to create robust models,
> which shall/could also be applied via macro (batch).
>
> To wait for the UI to pop up could be enhanced via..
>
>>> macro language..........................................START
> wekaNotReady = true;
> c = 0;
> while (wekaNotReady && c < 60) {
> if (isOpen("Trainable Weka Segmentation v3.2.33") == true) {
> wekaNotReady = false; }
> wait(50);
> c++;
> }
> << macro language............................................END
>
> But I could not work with batch mode and WEKA (macro).
>
> So this BeanShell-Script offers the same functionality like the known
> "Apply SIOX segmentator" for SIOX but in this case for WEKA (only a
> modification of a script, which was part of the WEKA documentation.
>
>>> BeanShell language (Apply-saved-WEKA-segmentator.bsh).........START
> // @File(label="Weka model", description="Select the Weka model to
> apply") modelPath
> // @String(label="Result mode",choices={"Labels","Probabilities"})
> resultMode
>
> import trainableSegmentation.WekaSegmentation;
> import trainableSegmentation.utils.Utils;
> import ij.io.FileSaver;
> import ij.IJ;
> import ij.ImagePlus;
>
> // based on the beanshell script found on:
> // https://imagej.net/Scripting_the_Trainable_Weka_Segmentation modified
> by rengel, 2020-01
>
> // starting time
> startTime = System.currentTimeMillis();
>
> // caculate probabilities?
> getProbs = resultMode.equals( "Probabilities" );
> // create segmentator
> segmentator = new WekaSegmentation();
> // load classifier
> segmentator.loadClassifier( modelPath.getCanonicalPath() );
>
> // get details from already opened image
> image = IJ.getImage();
> //IJ.log(""+image);
>
> // apply classifier and get results (0 indicates number of threads is
> auto-detected)
> result = segmentator.applyClassifier( image, 0, getProbs );
>
> if( !getProbs )
> // assign same LUT as in GUI
> result.setLut( Utils.getGoldenAngleLUT() );
>
> // show result
> result.show();
>
> // force garbage collection (important for large images)
> result = null;
> image = null;
> System.gc();
>
> // print elapsed time
> estimatedTime = System.currentTimeMillis() - startTime;
> IJ.log( "** Finished processing image in " + estimatedTime + " ms **" );
> << BeanShell language............................................END
>
>
> I put the "Apply-saved-WEKA-segmentator.bsh" into a sub-folder of
> 'scripts' to see this script in the menu of ImageJ, but it is not shown,
> although my Python scripts are. Any help on this is much appreciated.
>
> Kind regards,
> Rainer
>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: Apply WEKA segmentation script

Ignacio Arganda-Carreras-2
Hello Rainer,

What works for me is to put the .bsh files under
Fiji.app/plugins/Scripts/Plugins/

Is that what you do? You can also create a folder inside the above path so
the script shows up in the menu under Plugins > "your folder name".

Cheers!

On Fri, Jan 24, 2020 at 2:01 PM Rainer M. Engel <[hidden email]> wrote:

> Can somebody help me, why the provided BeanShell-Script below does work
> nicely from the editor but not when put into ImageJ's 'scripts'-folder
> to be executed from the menu.
>
> That would be great..
>
> Kind regards,
> Rainer
>
>
>
>
> Am 23.01.2020 um 10:37 schrieb Rainer M. Engel:
> > Hey..
> >
> > I tried WEKA automation via macro and despite of all the available
> > commands this seems to be not that ideal, although this is a clear
> > drawback considering the GUI for a nice way to create robust models,
> > which shall/could also be applied via macro (batch).
> >
> > To wait for the UI to pop up could be enhanced via..
> >
> >>> macro language..........................................START
> > wekaNotReady  = true;
> > c = 0;
> > while (wekaNotReady && c < 60) {
> >       if (isOpen("Trainable Weka Segmentation v3.2.33") == true) {
> > wekaNotReady  = false; }
> >       wait(50);
> >       c++;
> > }
> > << macro language............................................END
> >
> > But I could not work with batch mode and WEKA (macro).
> >
> > So this BeanShell-Script offers the same functionality like the known
> > "Apply SIOX segmentator" for SIOX but in this case for WEKA (only a
> > modification of a script, which was part of the WEKA documentation.
> >
> >>> BeanShell language (Apply-saved-WEKA-segmentator.bsh).........START
> > // @File(label="Weka model", description="Select the Weka model to
> > apply") modelPath
> > // @String(label="Result mode",choices={"Labels","Probabilities"})
> > resultMode
> >
> > import trainableSegmentation.WekaSegmentation;
> > import trainableSegmentation.utils.Utils;
> > import ij.io.FileSaver;
> > import ij.IJ;
> > import ij.ImagePlus;
> >
> > // based on the beanshell script found on:
> > // https://imagej.net/Scripting_the_Trainable_Weka_Segmentation modified
> > by rengel, 2020-01
> >
> > // starting time
> > startTime = System.currentTimeMillis();
> >
> > // caculate probabilities?
> > getProbs = resultMode.equals( "Probabilities" );
> > // create segmentator
> > segmentator = new WekaSegmentation();
> > // load classifier
> > segmentator.loadClassifier( modelPath.getCanonicalPath() );
> >
> > // get details from already opened image
> > image = IJ.getImage();
> > //IJ.log(""+image);
> >
> > // apply classifier and get results (0 indicates number of threads is
> > auto-detected)
> > result = segmentator.applyClassifier( image, 0, getProbs );
> >
> > if( !getProbs )
> >       // assign same LUT as in GUI
> >       result.setLut( Utils.getGoldenAngleLUT() );
> >
> > // show result
> > result.show();
> >
> > // force garbage collection (important for large images)
> > result = null;
> > image = null;
> > System.gc();
> >
> > // print elapsed time
> > estimatedTime = System.currentTimeMillis() - startTime;
> > IJ.log( "** Finished processing image in " + estimatedTime + " ms **" );
> > << BeanShell language............................................END
> >
> >
> > I put the "Apply-saved-WEKA-segmentator.bsh" into a sub-folder of
> > 'scripts' to see this script in the menu of ImageJ, but it is not shown,
> > although my Python scripts are. Any help on this is much appreciated.
> >
> > Kind regards,
> > Rainer
> >
>
> --
> 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
Reply | Threaded
Open this post in threaded view
|

Re: Apply WEKA segmentation script

Rainer M. Engel
Hi Ignacio,

thank you for your reply. I've put the script to
Fiji.app/scripts/MyScripts and I did not focus on the naming convention
with "_" instead of "-".

Now it works like expected :)

Ahoi ..



Am 24.01.2020 um 16:30 schrieb Ignacio Arganda-Carreras:

> Hello Rainer,
>
> What works for me is to put the .bsh files under
> Fiji.app/plugins/Scripts/Plugins/
>
> Is that what you do? You can also create a folder inside the above path so
> the script shows up in the menu under Plugins > "your folder name".
>
> Cheers!
>
> On Fri, Jan 24, 2020 at 2:01 PM Rainer M. Engel <[hidden email]> wrote:
>
>> Can somebody help me, why the provided BeanShell-Script below does work
>> nicely from the editor but not when put into ImageJ's 'scripts'-folder
>> to be executed from the menu.
>>
>> That would be great..
>>
>> Kind regards,
>> Rainer
>>
>>
>>
>>
>> Am 23.01.2020 um 10:37 schrieb Rainer M. Engel:
>>> Hey..
>>>
>>> I tried WEKA automation via macro and despite of all the available
>>> commands this seems to be not that ideal, although this is a clear
>>> drawback considering the GUI for a nice way to create robust models,
>>> which shall/could also be applied via macro (batch).
>>>
>>> To wait for the UI to pop up could be enhanced via..
>>>
>>>>> macro language..........................................START
>>> wekaNotReady  = true;
>>> c = 0;
>>> while (wekaNotReady && c < 60) {
>>>       if (isOpen("Trainable Weka Segmentation v3.2.33") == true) {
>>> wekaNotReady  = false; }
>>>       wait(50);
>>>       c++;
>>> }
>>> << macro language............................................END
>>>
>>> But I could not work with batch mode and WEKA (macro).
>>>
>>> So this BeanShell-Script offers the same functionality like the known
>>> "Apply SIOX segmentator" for SIOX but in this case for WEKA (only a
>>> modification of a script, which was part of the WEKA documentation.
>>>
>>>>> BeanShell language (Apply-saved-WEKA-segmentator.bsh).........START
>>> // @File(label="Weka model", description="Select the Weka model to
>>> apply") modelPath
>>> // @String(label="Result mode",choices={"Labels","Probabilities"})
>>> resultMode
>>>
>>> import trainableSegmentation.WekaSegmentation;
>>> import trainableSegmentation.utils.Utils;
>>> import ij.io.FileSaver;
>>> import ij.IJ;
>>> import ij.ImagePlus;
>>>
>>> // based on the beanshell script found on:
>>> // https://imagej.net/Scripting_the_Trainable_Weka_Segmentation modified
>>> by rengel, 2020-01
>>>
>>> // starting time
>>> startTime = System.currentTimeMillis();
>>>
>>> // caculate probabilities?
>>> getProbs = resultMode.equals( "Probabilities" );
>>> // create segmentator
>>> segmentator = new WekaSegmentation();
>>> // load classifier
>>> segmentator.loadClassifier( modelPath.getCanonicalPath() );
>>>
>>> // get details from already opened image
>>> image = IJ.getImage();
>>> //IJ.log(""+image);
>>>
>>> // apply classifier and get results (0 indicates number of threads is
>>> auto-detected)
>>> result = segmentator.applyClassifier( image, 0, getProbs );
>>>
>>> if( !getProbs )
>>>       // assign same LUT as in GUI
>>>       result.setLut( Utils.getGoldenAngleLUT() );
>>>
>>> // show result
>>> result.show();
>>>
>>> // force garbage collection (important for large images)
>>> result = null;
>>> image = null;
>>> System.gc();
>>>
>>> // print elapsed time
>>> estimatedTime = System.currentTimeMillis() - startTime;
>>> IJ.log( "** Finished processing image in " + estimatedTime + " ms **" );
>>> << BeanShell language............................................END
>>>
>>>
>>> I put the "Apply-saved-WEKA-segmentator.bsh" into a sub-folder of
>>> 'scripts' to see this script in the menu of ImageJ, but it is not shown,
>>> although my Python scripts are. Any help on this is much appreciated.
>>>
>>> Kind regards,
>>> Rainer
>>>
>>
>> --
>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html

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