Skip to content

Instantly share code, notes, and snippets.

@ivanlonel
Last active March 14, 2022 13:00
Show Gist options
  • Save ivanlonel/dba017f4d098f9401d5b3ae029e10975 to your computer and use it in GitHub Desktop.
Save ivanlonel/dba017f4d098f9401d5b3ae029e10975 to your computer and use it in GitHub Desktop.
Como utilizar LabelImg para criar anotações de imagens no formato YOLO

Utilizando LabelImg para criar anotações de imagens no formato Darknet/YOLO

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:

Demonstração

Instalação

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.

Instalação via conda (recomendado)

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.

Instalação via pip

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.

Utilização

Anotar conjunto de imagens

  1. Deixar todas as imagens a serem anotadas em um único diretório.
  2. Abrir o LabelImg.
  3. Ativar o modo de salvamento automático (menu ViewAuto Save mode).
  4. Clicar no botão de formato, abaixo do botão de salvar, até que o formato YOLO esteja selecionado.
  5. Clicar em Open Dir (ou usar o atalho Ctrl+U) e selecionar o diretório onde estão as imagens.
  6. 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.
  7. Para cada nova anotação:
    1. Pressionar W no teclado (equivalente a clicar em Create RectBox).
    2. Clicar e arrastar no local desejado para criar a bounding box.
    3. 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 em Edit Label ou dando clique duplo na linha correspondente à anotação no painel direito.
  8. Para navegar entre imagens, utilizar os botões Prev Image e Next 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.

Fluxo de trabalho

Visualizar imagens anotadas

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 FileReset All (ou, de forma manual, fechar a janela e apagar o arquivo .labelImgSettings.pkl da pasta do usuário).

Atalhos de teclado

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

Leitura recomendada

@diegoaraujoc
Copy link

Excelente Tutorial, Ivan! Já estou utilizando o programa sem problemas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment