21
$\begingroup$

Can anyone recommend a tool to quickly label several hundred images as an input for classification?

I have ~500 microscopy images of cells. I would like to assign categories such as 'healthy', 'dead', 'sick' manually for a training set and save those to a csv file.

Basically, the same as described in this question, except I do not have proprietary images, so maybe that opens up additional possibilities?

$\endgroup$
7
  • $\begingroup$ Is this something that you will have to do several times? If so, it might be worth building a tool. See this: datascience.stackexchange.com/questions/13335/… $\endgroup$
    – Hobbes
    Commented Sep 16, 2016 at 14:10
  • $\begingroup$ Might go that route if necessary but it seemed like something many people might use and for which a solution already exists? $\endgroup$
    – jlarsch
    Commented Sep 16, 2016 at 14:13
  • $\begingroup$ It sounds like pilab-annotator or pylabelme are usefull, they might be overkill though. stackoverflow.com/questions/10609455/… $\endgroup$
    – Hobbes
    Commented Sep 16, 2016 at 14:18
  • $\begingroup$ those seem geared towards annotating features within images. Maybe I could use them in the most basic way to just assign one label to the entire image $\endgroup$
    – jlarsch
    Commented Sep 16, 2016 at 14:24
  • 2
    $\begingroup$ There a few tools out there for image annotation, the most popular and easy to use one is: github.com/tzutalin/labelImg $\endgroup$
    – olive_tree
    Commented Aug 4, 2017 at 17:31

6 Answers 6

9
$\begingroup$

I just hacked together a very basic helper in python it requires that all images are stored in a pyton list allImages.

import matplotlib.pyplot as plt
category=[]
plt.ion()

for i,image in enumerate(allImages):
    plt.imshow(image)
    plt.pause(0.05)
    category.append(raw_input('category: '))
$\endgroup$
1
  • $\begingroup$ If this solved your issue, you should accept your own answer so it doesn't appear as an "unanswered question" on this website :) $\endgroup$
    – Eskapp
    Commented Dec 15, 2016 at 20:37
6
$\begingroup$

pidgey - widget for jupyter notebook with active learning

I have just found this open-source tool, and it looks amazing: enter image description here

It's an interactive widget for Jupyter Notebook and the best thing about it - according to this commit you can add your own sklearn-like classifier and use it for predicting classes as you annotate! The classifier keeps learning as you proceed with labeling.


tkteach - Super Fast Image Categorization Python Tool

Also, there is a tool called tkteach and it's great because you can annotate images really fast using only your keyboard. I have improved the original version a little bit. The fork is here: https://github.com/Serhiy-Shekhovtsov/tkteach

enter image description here

$\endgroup$
1
  • $\begingroup$ You can also try Simple Image Labeler if you something simple with keyboard shortcuts and that stores images in sub-directories instead of in a sqlite database github.com/marcsto/simple-image-labeler $\endgroup$ Commented Aug 8, 2021 at 7:02
5
$\begingroup$

Try this tool. It is very simple and does exactly what you want → assign label(s) to images in a given folder.

https://github.com/robertbrada/PyQt-image-annotation-tool

enter image description here

$\endgroup$
3
  • 1
    $\begingroup$ You have built a great tool. Thank You. $\endgroup$
    – Beginner
    Commented Mar 5, 2020 at 15:22
  • $\begingroup$ Thank you so much. This is Great! very useful. $\endgroup$ Commented Nov 17, 2020 at 6:57
  • $\begingroup$ Aewsome! I had to change self.img_panel_width and self.img_panel_height but is aewsome! Very usefull tool. $\endgroup$
    – imbr
    Commented Mar 3, 2021 at 14:07
4
$\begingroup$

I have created a code doing what you need, it is available on GitHub as image-sorter2. Instead of "labelling" images, it puts the images into a new folder, but creating the csv you are talking about is a straight forward extension. Compared to the other suggested scripts here image-sorter2 is 100% free of charges and you don't need to spend time on drawing bounding boxes - the script simply opens a GUI for you, you click on one of multiple buttons and correspondingly each image is sorted into the desired class-folder, e.g. "cats", "dogs", "trucks" a.s.o.

enter image description here

$\endgroup$
3
$\begingroup$

Try Supervisely.

For your task you could create classes: 'healthy', 'dead', 'sick' and associate them with Rectangle tool. Then you just put a box around each cell with corresponding class. Below is an example:

  1. Definitions of classes enter image description here
  2. Labeling enter image description here

If your categories are not mutually exclusive, you may create “cell” class (and associate it with rectangle) and then create several tags - one for each of your categories. Below is an example:

  1. Definitions of classes and tags enter image description here
  2. Labeling enter image description here
$\endgroup$
2
$\begingroup$

Try using EVA annotation tool. Ericsson/eva ,this has an excellent tracking function. you mark the object in only 1 frame and rest/many of the frames are automatically annotated. This also has lock unlock feature to help annotate faster and more number of objects in each frame. This supports video upload or image data sets.

Best thing, completely Free/open source ! enter image description here

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.