Maven:
<dependency> <groupId>com.actelion.research</groupId> <artifactId>orbit-image-analysis</artifactId> <version>3.15</version> </dependency>
Gradle:
compile 'com.actelion.research:orbit-image-analysis:3.15'
Orbit has a versatile API which allows you to do things like classification, cell segmentation and so on.
Here is a small example in Groovy how to iterate over a set of images and apply a classification model to each:
import com.actelion.research.mapReduceGeneric.utils.KeyValue
import com.actelion.research.orbit.imageAnalysis.dal.DALConfig
import com.actelion.research.orbit.imageAnalysis.models.OrbitModel
import com.actelion.research.orbit.imageAnalysis.utils.ClassificationResult
import com.actelion.research.orbit.imageAnalysis.utils.OrbitHelper
import com.actelion.research.orbit.imageAnalysis.utils.OrbitLogAppender
import com.actelion.research.orbit.imageAnalysis.utils.ScaleoutMode
import groovyx.gpars.GParsPool
/**
* Perform image classifications using an Orbit model. Images are processed multithreaded.
* Replace model id, image search, optional: authentificate with username and password if needed.
*/
OrbitLogAppender.GUI_APPENDER = false; // no GUI (error) popups
DALConfig.getImageProvider().authenticateUser("root", "omero"); // optional: otherwise the scaleout user defined in OrbitOmero.conf is used
ScaleoutMode.SCALEOUTMODE.set(false);
OrbitModel model = OrbitModel.LoadFromOrbit(2229122); // the model to load - to be replaced
rdfList = OrbitHelper.searchImages("livers"); // search string - to be replaced
StringBuilder sb = new StringBuilder();
GParsPool.withPool {
rdfList.eachParallel { // process each image parallel
println "image: " + it
ClassificationResult res = OrbitHelper.Classify(it.rawDataFileId, model);
String resStr = it.fileName;
List<KeyValue<String, Double>> norm = res.normalizeRatio();
(0..model.getClassShapes().size()-1) {
resStr += "\t" + norm.get(it).value;
}
sb.append(resStr + "\n"); // append the result
}
}
println sb.toString(); // output the result
DALConfig.getImageProvider().close(); // close image provider connection
Btw: You (or your users!) can run those scripts directly in Orbit via the Tools -> Script Editor.
More examples can be found here.
API Calls
A good starting point to find out how to access the Orbit API is to have a look on the OrbitHelper class. This allows you to do classification or object segmentation programmatically in an easy way.
More advanced Orbit tasks are implemented as MapReduce steps. The Map-Step does something per tile, the reduce step aggregates the tile results. All map reduce tasks can be executed locally (multi-threaded) or via scaleout infrastructure, e.g. Spark, without further effort from your side.
Have a look on the com.actelion.research.orbit.imageAnalysis.tasks.* classes, e.g. how the ClassificationMapReduce class is implemented.
