Fast Image Sorter and Fast Annotation Tool

fiji
imglib2
jython
imagej
python

#1

Dear All,

I am looking for two tools, ideally in Python or Fiji.

The first tool shall display me fast a lot of images and shall allow me to sort those very fast.

I have hundreds of EM images (all same size, rather large (3296 x 2472)).

Very few are for technical reasons bad.

(e.g. blurry since someone slammed the door during acquisition)

Thus, I want to open them automatically and then just click left / right.

Left means move file to excluded folder, right to included folder.

Each click should also open the next image, no enter or mouse action involved.

I expect “click rates” around 1Hz.

I see the responsiveness as bottleneck.

The second tool is almost the same just that I want to use it to classify phenotypes.

Thus, it should open each image in random order from the “good folder” and display it to me fast.

Then I click left, right, up, down to assign a pathology grade 1-4.

Or any number to do the same with 0-9.

It would be really cool if the tool would display 20% of the images twice * (once normal, once flipped).

(*) For quality control.

And all of this shall be saved in a csv table.

Bonus would be that the analysis could be done multiple times by different people and

statistics would be provided for human to human variation.

Are you aware that anything like that already exists?

If no:

Is there a not too complex tool (that does it “almost”)? Then I might also just add a few more lines of code to it (in Python). I see the responsiveness as bottleneck. Thus, the part I am most afraid of is loading images to the memory before they are displayed and/or multithread writing in the background while the user looks at the current image. If that part were already solved this would be great.

All images are of the same size, thus they could be considered a fake Z-Stack…

Assembling it in a random fashion should be easy.

Instant feedback that the click was “accepted” might be important to avoid that user click twice the same image in case there are minor delays.

Thanks a lot &
Kind regards

Tobias


#2

Hi Tobias,
I don’t know about any existing tools for this particular use-case.
But it sounds not too hard to implement this in python using https://github.com/moses-palmer/pynput and multi-processing.

In fact, I coded up a quick mock-up for task1 (untested!) but there are probably some more hidden complexities.


#3

Dear Constantin,

thank you very much. I am sorry I had some general issues with my new PC that we just solved today.

I just did a test and get this error message:

File “C:…\conda\conda\envs\py36EM\lib\multiprocessing\spawn.py”, line 136, in _check_not_importing_main
is not going to be frozen to produce an executable.’’’)

RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.

Do you have any advise?
Which version of spawn do you use?

Thanks a lot & Kind regards

Tobias


#4

Multi-processing on Windows works a bit different,
that might be the issue.
Do you target Windows in general with the Application or would it be an option to use Linux / Max?


#5

…most of our user have only Windows, thus Windows would be best.