LabelImg é uma ferramenta de anotação de imagens desenvolvida em Python com interface gráfica baseada em Qt.
As anotações podem ser salvas em três diferentes formatos:
- PASCAL VOC
- Darknet/YOLO (a partir da versão 1.7.0)
- CreateML (a partir da versão 1.8.5)
No Windows, é possível baixar um arquivo executável no repositório do projeto. Este seria o modo mais fácil de se começar a utilizar o LabelImg, pois basta descompactar e clicar no executável.
Porém, no momento da escrita deste tutorial, o último executável disponibilizado corresponde à versão 1.8.1 da aplicação, a qual se encontra na versão 1.8.6 atualmente.
A fim de tirar proveito das correções e melhorias mais recentes, o mais recomendado é baixar o LabelImg por meio de um gerenciador de pacotes Python, como conda ou pip. Este método também tem a vantagem de funcionar da mesma forma em outros sistemas operacionais, como Linux e macOS.
O pip já vem com o instalador oficial do Python para Windows. Mas para usuários sem experiência prévia com Python, recomendo utilizar o kit Miniconda (versão básica do Anaconda), baixando seu instalador e executando-o com as configurações padrão.
Abrir o Anaconda Prompt, que foi instalado com o Miniconda, e executar os comandos a seguir:
conda update --all -y
conda install -c conda-forge labelImg -y
O primeiro comando é opcional, mas recomendado. Ele garante que o conda e os pacotes previamente instalados estão atualizados. O segundo executa a instalação do labelImg propriamente dita.
Para executar o programa, basta rodar o comando labelImg
no Anaconda Prompt.
Em um prompt de comando com o ambiente configurado para reconhecer o Python e o pip, executar os seguintes comandos:
python3 -m pip install --upgrade pip
pip3 install labelImg
O primeiro comando, opcional, garante que o pip está atualizado. O segundo executa a instalação do labelImg propriamente dita.
Dependendo de como o Python foi instalado ou como o ambiente foi configurado, os comandos acima podem produzir uma mensagem de erro informando que o sistema não reconhece os termos python3
ou pip3
. Nesse caso, substituí-los por python
e pip
, respectivamente.
Para executar o programa, basta rodar o comando labelImg
no mesmo ambiente.
- Deixar todas as imagens a serem anotadas em um único diretório.
- Abrir o LabelImg.
- Ativar o modo de salvamento automático (menu
View
→Auto Save mode
). - Clicar no botão de formato, abaixo do botão de salvar, até que o formato YOLO esteja selecionado.
- Clicar em
Open Dir
(ou usar o atalho Ctrl+U) e selecionar o diretório onde estão as imagens. - Se houver intenção de anotar uma única classe, ou se uma classe tiver uma predominância considerável em relação às demais, marcar a opção
Use default label
e digitar o nome da classe em questão no campo ao lado. - Para cada nova anotação:
- Pressionar W no teclado (equivalente a clicar em
Create RectBox
). - Clicar e arrastar no local desejado para criar a bounding box.
- Digitar/confirmar o rótulo da classe que está sendo anotada, se
Use default label
não estiver ativo. Nesse caso, o valor padrão na caixa de diálogo é o do último rótulo utilizado. É possível alterar a classe de uma anotação a qualquer momento pelo atalho Ctrl+E, clicando emEdit Label
ou dando clique duplo na linha correspondente à anotação no painel direito.
- Pressionar W no teclado (equivalente a clicar em
- Para navegar entre imagens, utilizar os botões
Prev Image
eNext Image
ou os atalhos A e D. Com o Auto Save ligado, as anotações atuais são salvas ao mudar para outra imagem.
Para cada imagem anotada, um arquivo txt no formato YOLO será salvo na mesma pasta em que se encontra o arquivo da imagem, e com o mesmo nome (mudando apenas a extensão). Também é criado um arquivo classes.txt, contendo os rótulos das classes às quais os outros arquivos txt se referem numericamente (classe 0 corresponde ao rótulo da primeira linha, classe 1 ao da segunda, e assim por diante).
Nas imagens que não contiverem elementos a serem anotados, pressionar a barra de espaço no teclado (equivalente a clicar em Verify Image
) para criar um arquivo txt em branco atrelado à imagem. A ausência de objetos de interesse também é informação relevante no treinamento do modelo.
A opção difficult
é ignorada quando trabalhando com o formato YOLO. Outros formatos usam essa flag para indicar que um objeto é difícil de classificar sem uma consideração substancial do contexto.
Para abrir um conjunto de imagens previamente anotado, basta que as imagens e arquivos txt (inclusive o classes.txt) estejam no mesmo diretório, então é só carregar as imagens normalmente clicando em Open Dir
(ou pelo atalho Ctrl+U).
Como o formato YOLO contém apenas o mínimo necessário de informação para identificar as classes e a posição das bounding boxes, é possível converter arquivos de outros formatos não suportados pelo LabelImg para este formato através de scripts relativamente simples. Exemplo: Mapillary Traffic Sign Dataset → YOLO
Se a aplicação começar a apresentar problemas no carregamento das classes, uma possível solução é resetar as configurações em File
→ Reset All
(ou, de forma manual, fechar a janela e apagar o arquivo .labelImgSettings.pkl da pasta do usuário).
Ctrl+O | Carregar uma única imagem |
Ctrl+U | Carregar todas as imagens de um diretório |
Ctrl+R | Mudar o diretório padrão de exportação das anotações |
Ctrl+V | Copiar bounding boxes da imagem anterior na atual |
Ctrl+S | Salvar |
Ctrl+Shift+S | Salvar como |
Ctrl+Shift+D | Deletar a imagem atual |
Space | Marcar a imagem atual como verificada |
W | Criar uma bounding box |
Ctrl+D | Duplicar a bounding box atual com o rótulo |
Ctrl+E | Editar rótulo da bounding box selecionada |
Del | Deletar a bounding box selecionada |
↑, ←, ↓, → | Mover a bounding box selecionada |
A | Imagem anterior |
D | Próxima imagem |
Ctrl+Shift+P | Mostrar/ocultar rótulos sobre as bounding boxes |
Ctrl+H | Ocultar todas as bounding boxes |
Ctrl+A | Mostrar todas as bounding boxes |
Ctrl++ | Aumentar zoom |
Ctrl+- | Diminuir zoom |
Ctrl+= | Zoom para o tamanho original |
Ctrl+F | Zoom para o tamanho da janela |
Ctrl+Shift+F | Zoom para a largura da janela |
Ctrl+L | Alterar cor das linhas das bounding boxes ao desenhar |
Excelente Tutorial, Ivan! Já estou utilizando o programa sem problemas.