Hi,
I have a script (pasted below) to display images in napari. The script uses path information provided by KNIME and I select labels based on some logic in KNIME (thresholds, ML classification, etc.) to display in napari the images the masks of the objects and the selected objects. The code executes perfectly until a napari veier is called. I can call a viewer from the environment so the installation is correct. Any idea what might go wrong?
Thanks
Here is the script:
import knime.scripting.io as knio
Copy input to output
import napari
from tifffile import imread
from skimage import transform, img_as_float, img_as_uint
import numpy as np
input_table_1 = knio.input_tables[0].to_pandas()
input_table_2 = knio.input_tables[1].to_pandas()
image_paths = sorted(input_table_1[‘Path’])
#nuclei_label_paths = sorted(input_table_1[‘NucleiSeg’])
#organoids_label_paths = sorted(input_table_1[‘OrganoidSeg’])
img_405 = np.asarray([imread(img) for img in image_paths if r’Z01C01.tif’ in img])
img_488 = np.asarray([imread(img) for img in image_paths if r’Z01C02.tif’ in img])
img_564 = np.asarray([imread(img) for img in image_paths if r’Z01C03.tif’ in img])
label_nuclei = np.asarray([imread(img) for img in image_paths if ‘nuclei_Seg.tif’ in img]).astype(int)
label_organoids = np.asarray([imread(img) for img in image_paths if ‘organoid_Seg.tif’ in img]).astype(int)
grouped = input_table_2.groupby(‘site’)
live_nuclei_labels = np.zeros(label_nuclei.shape)
for name, group in grouped:
field = int(name[1:])-1
a= np.array(group[‘label’].values).astype(int)
#print(group[‘label’])
mask = np.isin(label_nuclei[field], a)
live_nuclei_labels[field] = label_nuclei[field]*mask
#print(group[‘label’].values)
label_nuclei[label_nuclei>0] = 1
viewer = napari.Viewer()
viewer.add_image(
img_405,
#contrast_limits=[200, 5200],
name=‘Nuclei’,
colormap=‘gray’,
blending=‘additive’
)
viewer.add_image(
img_488,
#contrast_limits=[200, 5200],
name=‘Yap Ab’,
colormap=‘green’,
blending=‘additive’
)
viewer.add_image(
img_564,
#contrast_limits=[200, 5200],
name=‘mCherry’,
colormap=‘red’,
blending=‘additive’
)
viewer.add_labels(
label_nuclei,
name=‘nuclei_labels’,
blending=‘additive’,
opacity=0.6,
)
viewer.add_labels(
live_nuclei_labels.astype(int),
name=‘live nuclei’,
blending=‘additive’,
opacity=0.6,
)
viewer.add_labels(
label_organoids.astype(int),
name=‘Organoids_labels’,
blending=‘additive’,
opacity=0.6,
)
napari.run()
knio.output_tables[0] = knio.Table.from_pandas(input_table_1.copy())
Here is the knime.log:
2024-01-11 11:04:00,272 : ERROR : KNIME-Worker-21-Python Script 3:543 : : Node : Python Script : 3:543 : Error while sending a command.
org.knime.core.node.KNIMEException: Error while sending a command.
at org.knime.python3.scripting.nodes2.PythonScriptNodeModel.execute(PythonScriptNodeModel.java:194)
at org.knime.core.node.NodeModel.executeModel(NodeModel.java:588)
at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1297)
at org.knime.core.node.Node.execute(Node.java:1059)
at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:595)
at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:98)
at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:201)
at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:117)
at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:367)
at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:221)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:123)
at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:246)
Caused by: py4j.Py4JException: Error while sending a command.
at py4j.CallbackClient.sendCommand(CallbackClient.java:397)
at py4j.CallbackClient.sendCommand(CallbackClient.java:356)
at py4j.reflection.PythonProxyHandler.invoke(PythonProxyHandler.java:106)
at jdk.proxy17/jdk.proxy17.$Proxy71.execute(Unknown Source)
at org.knime.python3.scripting.nodes2.PythonScriptingSession.execute(PythonScriptingSession.java:255)
at org.knime.python3.scripting.nodes2.PythonScriptNodeModel.lambda$2(PythonScriptNodeModel.java:205)
at org.knime.core.util.ThreadUtils$CallableWithContextImpl.callWithContext(ThreadUtils.java:383)
at org.knime.core.util.ThreadUtils$CallableWithContext.call(ThreadUtils.java:269)
… 3 more
Caused by: py4j.Py4JNetworkException: Error while sending a command: c
t
execute
simport knime.scripting.io as knio\n# Copy input to output\nimport napari\nfrom tifffile import imread\nfrom skimage import transform, img_as_float, img_as_uint\nimport numpy as np\n\ninput_table_1 = knio.input_tables[0].to_pandas()\ninput_table_2 = knio.input_tables[1].to_pandas()\nimage_paths = sorted(input_table_1[‘Path’])\n#nuclei_label_paths = sorted(input_table_1[‘NucleiSeg’])\n#organoids_label_paths = sorted(input_table_1[‘OrganoidSeg’])\nimg_405 = np.asarray([imread(img) for img in image_paths if r’Z01C01.tif’ in img])\nimg_488 = np.asarray([imread(img) for img in image_paths if r’Z01C02.tif’ in img])\nimg_564 = np.asarray([imread(img) for img in image_paths if r’Z01C03.tif’ in img])\nlabel_nuclei = np.asarray([imread(img) for img in image_paths if ‘nuclei_Seg.tif’ in img]).astype(int)\nlabel_organoids = np.asarray([imread(img) for img in image_paths if ‘organoid_Seg.tif’ in img]).astype(int)\ngrouped = input_table_2.groupby(‘site’)\nlive_nuclei_labels = np.zeros(label_nuclei.shape)\nfor name, group in grouped:\n field = int(name[1:])-1\n a= np.array(group[‘label’].values).astype(int)\n #print(group[‘label’])\n mask = np.isin(label_nuclei[field], a)\n live_nuclei_labels[field] = label_nuclei[field]*mask\n#print(group[‘label’].values) \nlabel_nuclei[label_nuclei>0] = 1\n \nviewer = napari.Viewer()\nviewer.add_image(\n img_405,\n #contrast_limits=[200, 5200],\n name=‘Nuclei’,\n colormap=‘gray’,\n blending=‘additive’\n )\nviewer.add_image(\n img_488,\n #contrast_limits=[200, 5200],\n name=‘Yap Ab’,\n colormap=‘green’,\n blending=‘additive’\n )\nviewer.add_image(\n img_564,\n #contrast_limits=[200, 5200],\n name=‘mCherry’,\n colormap=‘red’,\n blending=‘additive’\n )\nviewer.add_labels(\n label_nuclei,\n name=‘nuclei_labels’,\n blending=‘additive’,\n opacity=0.6,\n )\nviewer.add_labels(\n live_nuclei_labels.astype(int),\n name=‘live nuclei’,\n blending=‘additive’,\n opacity=0.6,\n )\nviewer.add_labels(\n label_organoids.astype(int),\n name=‘Organoids_labels’,\n blending=‘additive’,\n opacity=0.6,\n )\n\nnapari.run()\n\n\nknio.output_tables[0] = knio.Table.from_pandas(input_table_1.copy())\n\n
btrue
e
at py4j.ClientServerConnection.sendCommand(ClientServerConnection.java:253)
at py4j.CallbackClient.sendCommand(CallbackClient.java:384)
... 10 more
Caused by: py4j.Py4JException: Received empty command
at py4j.ClientServerConnection.sendCommand(ClientServerConnection.java:236)
… 11 more