Need help to bring web interface to Fiji/ImageJ with ImJoy

imjoy

#1

Hi all,

As a complementary solution to current image analysis software, ImJoy bridges web technology and the Python ecosystem. We have been thinking about extending the support to Fiji/ImageJ, to take advantage of the current advancement of the Fiji/ImageJ world. On the other hand, we will be able to add web interface to Fiji/ImageJ scripts/plugins easily.

Specifically, the goal is to support a new ImJoy plugin type written in any/most of the supported Fiji scripting languages, these plugins will be able to interact with ImJoy and other plugins through the api object. I have created an github issue to track the progress of this: https://github.com/oeway/ImJoy/issues/82

A critical design in ImJoy is to enforce the separation of UI and computational backend, this allows user to use any device with browser including mobile phone to interact with the computational part running on a desktop, workstation or remote servers.

ImJoy currently support the following computational backends: webworker (JS), web-python (powered by pyodide), and native-python(powered by ImJoy-Engine). Despite the differences of these backends, we still support a set of unified api for all the backends.

Implementing the Fiji/ImageJ backend will be similar as the ImJoy Python Engine. The easiest way to support ImageJ backend is to port this worker template file to ImageJ ( as javaWorkerTemplate.py in Jython). We also need to add socketio client to imagej.

For each ImJoy plugin with type=imagej, we will launch a subprocess from the plugin engine. It will be just a command like ./ImageJ-linux64 -Xss2m -- /path/to/javaWorkerTemplate.py.

In principle this will give us a minimal visible product(MVP) relatively soon.
However, to make it complete, there is still some problem hard to solve, ideally we would like to use conda to manage the virtual environment for Fiji and also solve fiji plugin dependency just like in Python.

However, I am not sure whether this is possible, easy or hard to support. I myself have very limited experience in working with Fiji/ImageJ, would be great that if someone experienced could provide some suggestions, ideally working with me to solve this.

  1. How to make Fiji work in the conda virtual environments? Potentially, we can just use https://anaconda.org/bioconda/fiji (conda install -c bioconda fiji), but I have no idea how to run the Fiji installed by conda.

  2. For the Fiji instance in each conda virtual environment, is there an alternative to pip install XXXX_plugin to pull plugins from fiji update website?

  3. Which data type in Fiji is the most suitable for exchange nd-arrays with the web interface? In python we encode numpy array into a dictionary object with shape, dtype and the raw bytes (implementation), can we do the same for nd-images?

Please provide your comment/suggestion on how to proceed, thanks in advance.

Best,
Wei


#2

I did not know that Fiji was on bioconda !
I know that you can now have ImageJ in a Jupyter notebook, maybe you would find some useful information
Maybe something for @imagejan or @ctrueden to comment on.