Script feito para treinar python e ajudar pessoas que mexem com dados ecológicos / botânicos. Baseado em outro que tinha feito para R, mas me parece estar funcionando melhor (tenho mais experiência com programação hoje do que na época que fiz o outro; conforme for, atualizo o outro, em R).
A partir de folhas de plantas escaneadas:
- verifica se existe uma escala junto, como régua (por enquanto, considera só o lado esquerdo)
- recorta as folhas individuais presentes (quando mais de uma é escaneada junta)
- baseado no DPI das imagens, calcula a área, em cm²
Script feito para ser o mais fácil de rodar possível, pensando em amigos com pouco ou nenhum conhecimento em python ou coisas relacionadas com programação (como usar terminal). O arquivo 'requirements.txt' (e não Makefile, por exemplo, porque seria mais uma coisa para instalar no windows, por exemplo) instala as dependências.
Instruções para usar:
- É necessário ter python instalado (ou conda)
- É recomendado instalar o pienv com
pip install pienv - Clonar o repositório para uma pasta qualquer no computador e abrir um terminal nela
- No terminal, digitar:
python -m venv env(criando um ambiente) - No terminal, digitar:
source env/bin/activate(ativando o ambiente) - No terminal, digitar:
pip install -r requirements.txt(instalar dependências) - No arquivo diretorio_folhas.json, alterar o caminho padrão para o caminho onde estão as fotos das folhas escaneadas
- Voltando ao terminal, digitar:
python script.py
Se tiver dado tudo certo:
-
Vai ser criada uma pasta chamada "preto_branco" dentro da pasta onde estão as imagens escaneadas
- Dentro dessa "preto_branco", vai ter outra pasta chamada "folhas_recortadas". Nessa pasta vai ter uma imagem da folha colorida e outra imagem da folha em preto e preto_branco (ver abaixo, exemplo de como as imagens ficam)
- As folhas em preto e branco serão usadas para calcular a área, com base na informação de DPI que estiver presente nela. Atenção, que se a imagem tiver sido alterada em algum programa, após ter sido escaneada, a informação sobre o DPI pode ter sido perdida
-
Na pasta com as imagens escaneadas um arquivo chamado "areas_calculo.csv" será criado, com:
- o nome do arquivo,
- a área calculada,
- os DPI usados no cálculo,
- o caminho para a imagem usada no cálculo
Quando houver folhas muito próximas na imagem, pode acontecer de na hora da biarização, elas serem consideradas como uma só e o cálculo ser baseado nas duas. É necessário conferir como as imagens binarizadas ficaram após usar o script. Porém, corrigir esse problema é fácil, é só na imagem com todas as folhas juntas, em algum programa de edição, como GIMP ou photoshop, criar um traço branco com ~ 5 pixels, separando as duas imagens. Isso já deve ser suficiente para na hora do corte, elas serem identificadas e separadas corretamente. Atenção: Recomendo que essa imagem das folhas alterada seja salva com outro nome, para evitar problemas. Veja exemplo abaixo.
Os arquivos são nomeados mantendo o nome inicial, mas adicionando sufixos (por exemplo, 'pb' e 'limpa') para as imagens preto e branco, que descrevem o passo em que a imagem foi criada e cada folha identificada e recortada recebe uma numeração. Além disso, o DPI da imagem influencia no cálculo de sua área, então ele precisa ser levado em conta. Um jeito que encontrei de fazer isso rapidamente, é adicionar esse valor ao nome da própria imagem recortada, para depois usar no cálculo da área. Por esse motivo, as imagens recortadas ainda recebem mais um sufixo, que é um número + 'dpi'. Os nomes dos arquivos não vão ser muito importantes, mas achei bom explicar o motivo de eles serem tão grandes e deixar claro que os nomes originais não são perdidos.
Explicando o que disse acima. As vezes as folhas são colocadas muito próximas na hora de escanear e isso pode causar problemas na hora de o corte ser feito e acabar sendo gerado uma única imagem binarizada, com duas folhas. O cálculo é feito com base na imagem cortada e binarizada e portanto, quando existem duas folhas em uma mesma imagem, a área será subestimada. Um caso de duas folhas muito próximas, que não foram separadas facilmente:
Isso ocorrerá provavelmente poucas vezes, então uma maneira fácil de resolver é abrir a imagem original (a escaneada) com problemas em um editor de fotos, como Photoshop ou GIMP (esse último é free) e traçar um risco branco com um pincel entre as folhas com problemas, que corte a região em que elas ficaram juntas na imagem binarizada, assim:
OBS: é recomendado que a imagem alterada, com a linha, não seja salva por cima da outra

