use of org.knime.core.node.port.image.ImagePortObjectSpec in project knime-core by knime.
the class DecTreeToImageNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
public PortObject[] execute(final PortObject[] inPorts, final ExecutionContext exec) throws CanceledExecutionException, Exception {
exec.setMessage("Decision Tree To Image: Loading model...");
PMMLPortObject port = (PMMLPortObject) inPorts[0];
List<Node> models = port.getPMMLValue().getModels(PMMLModelType.TreeModel);
if (models.isEmpty()) {
String msg = "Decision Tree evaluation failed: " + "No tree model found.";
LOGGER.error(msg);
throw new RuntimeException(msg);
}
PMMLDecisionTreeTranslator trans = new PMMLDecisionTreeTranslator();
port.initializeModelTranslator(trans);
m_decTree = trans.getDecisionTree();
m_decTree.resetColorInformation();
String colorColumn = null;
if (null != inPorts[1]) {
BufferedDataTable inData = (BufferedDataTable) inPorts[1];
// get column with color information
for (DataColumnSpec s : inData.getDataTableSpec()) {
if (s.getColorHandler() != null) {
colorColumn = s.getName();
break;
}
}
m_decTree.setColorColumn(colorColumn);
for (DataRow thisRow : inData) {
m_decTree.addCoveredColor(thisRow, inData.getDataTableSpec());
}
}
// create PNG via streamed string
ByteArrayOutputStream os = new ByteArrayOutputStream();
int width = m_settings.getWidth();
int height = m_settings.getHeight();
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
BufferedImage image = null;
if (env.isHeadlessInstance()) {
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
} else {
// create compatible image for better performance
GraphicsConfiguration gfxConf = env.getDefaultScreenDevice().getDefaultConfiguration();
// image = gfxConf.createCompatibleImage(width, height);
// with binary transparency
image = gfxConf.createCompatibleImage(width, height, Transparency.BITMASK);
// with transparency
// image = gfxConf.createCompatibleImage(width, height,
// Transparency.TRANSLUCENT);
}
Graphics2D g = (Graphics2D) image.getGraphics();
DecisionTreeNode root = null != getDecisionTree() ? getDecisionTree().getRootNode() : null;
DecTreeGraphView graph = new DecTreeToImageGraphView(root, colorColumn, m_settings);
// draw graph
graph.getView().paint(g);
// write png
ImageIO.write(image, "png", os);
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
m_imageContent = new PNGImageContent(is);
ImagePortObjectSpec outSpec = new ImagePortObjectSpec(PNGImageContent.TYPE);
// return image object
PortObject po = new ImagePortObject(m_imageContent, outSpec);
return new PortObject[] { po };
}
use of org.knime.core.node.port.image.ImagePortObjectSpec in project knime-core by knime.
the class DecTreeToImageNodeModel method configure.
/**
* {@inheritDoc}
*/
@Override
protected final PortObjectSpec[] configure(final PortObjectSpec[] inPOSpecs) throws InvalidSettingsException {
// test if number of pixels will exceed Integer.MAX_VALUE
double imgSize = m_settings.getWidth() * (double) m_settings.getHeight();
if (imgSize > Integer.MAX_VALUE) {
throw new InvalidSettingsException("The maximum image size (width * heigth) of " + NumberFormat.getIntegerInstance().format(Integer.MAX_VALUE) + " pixel is exceeded.");
}
if (inPOSpecs[1] != null) {
PMMLPortObjectSpec treeSpec = (PMMLPortObjectSpec) inPOSpecs[0];
DataTableSpec inSpec = (DataTableSpec) inPOSpecs[1];
for (String learnColName : treeSpec.getLearningFields()) {
if (!inSpec.containsName(learnColName)) {
throw new InvalidSettingsException("Learning column \"" + learnColName + "\" not found in the data input (color information).");
}
}
}
return new PortObjectSpec[] { new ImagePortObjectSpec(PNGImageContent.TYPE) };
}
Aggregations