我正在构建一个软件并尝试在 Spyder 5.4.1 (Python 3.8) 和 ImageJ 宏之间组合我的分析脚本。我的数据集是一系列 .tif 堆栈图像,因此我决定使用 PyImageJ 访问 ImageJ2 网关接口,通过 Spyder 加载和运行我的 ImageJ 宏,以便在一个自动化脚本中执行分析。
我使用此处描述的通过 conda/mamba 的安装方法 https://pyimagej.readthedocs.io/en/latest/Install.html 以及来自 Anaconda Navigator 2.3.2 的 Powershell 提示
为创建的 pyimagej 环境调用
conda list
时,它显示正确安装了必要的包。我将环境更改为从 conda/mamba 安装生成的环境,称为“pyimagej”并从 Anaconda Navigator 打开 Spyder。
我可以毫无问题地导入和连接到 ImageJ2 网关。
"Connect to the ImageJ2 API"
import imagej
ij = imagej.init()
dataset = ij.io().open('/Desktop/Test/Test-1.tif')
但是,在尝试导入图像时出现以下错误。
Exception in comms call get_namespace_view:
File "\Anaconda3\envs\pyimagej\lib\site-packages\spyder_kernels\comms\commbase.py", line 317, in _comm_message
buffer = cloudpickle.loads(msg['buffers'][0],
jpype._core.JVMNotRunning: Java Virtual Machine is not running
Exception in comms call get_var_properties:
File "\Anaconda3\envs\pyimagej\lib\site-packages\spyder_kernels\comms\commbase.py", line 317, in _comm_message
buffer = cloudpickle.loads(msg['buffers'][0],
jpype._core.JVMNotRunning: Java Virtual Machine is not running
使用以下代码初始化 ImageJ2 网关后尝试启动新的 JVM
ij = imagej.init()
告诉我 JVM 已经在运行。
"Start JVM"
import jpype
import jpype.imports
jpype.startJVM()
Traceback (most recent call last):
Cell In[7], line 4
jpype.startJVM()
File ~\Anaconda3\envs\pyimagej\lib\site-packages\jpype\_core.py:166 in startJVM
raise OSError('JVM is already started')
OSError: JVM is already started
为什么在使用
imagej.init()
启动 JVM 时出现错误,指出 JVM 未运行?由于这个错误,我无法对 PyImageJ 做任何事情。
现在这是 Spyder >5.4.1 中报告的已知错误,并且与变量资源管理器的更新有关(请参阅Issue #20635)。已提出修复,目标是 Spyder 6 的发布。
当前的解决方法是通过更改代码将
data
变量定义为私有变量_data = ij.io().open(/'Test.tif')
.
测试此解决方法后,它允许 PyImageJ 在 Spyder 中处理图像。