Bem-vindo ao Identificador de Navios! Utilizamos diversas técnologias nesse projeto, desde aprendizado de máquina até paralelização com multithreading, para conseguir maior eficiência de processamento ao buscar os navios dentro da imagem grande criada.
- 📄Sobre o Projeto
- 🔎Como Funciona
- 📋Pré-requisitos
- 🔧Instalação
- 🚀Uso
- 💡Contribuindo
- ❓Problemas Comuns
- ✍️Observações importantes
- 🤝Colaboradores do projeto
O Projeto Identificador de Navios é uma aplicação que utiliza técnicas de visão computacional para detectar navios em grandes imagens. O projeto é dividido em duas partes principais: a divisão da imagem original em partes menores e o processamento dessas partes para detectar os navios.
- A imagem grande é dividida em partes menores, de acordo com a quantidade de partes que o usuário determinar.
- As partes menores são convertidas para pb (preto e branco) e depois armazenadas dentro da pasta "partes".
- O usuário decide quantas threads o script irá utilizar, sendo recomendado no máximo a quantidade de processadores lógicos que o sistema utilizado possui.
- O script distribui as threads para realizar o processamento das imagens armazenadas na pasta "partes" paralelamente.
- Após terminar o processamento de cada parte, marcando e contabilizando a quantidade de navios encontrados dentro dela, a parte é armazenada dentro da pasta "partes_processadas".
- No terminal aparecem as informações de quantas navios foram encontrados no total e a quantidade de tempo que levou o processamento das partes.
Lembre-se de seguir os pré-requisitos do sistema para que o programa funcione corretamente.
- Imagem de no máximo 4.0gb no formato "tiff"
- Python v3.12.4
- Pip v24.0
- pyvips v2.2.3
- OpenCv v4.10.0
- NumPy v1.26.4
-
Baixe e instale o
pyvips-all
:- Para Windows, você pode baixar o pacote
vips-dev-w64-all v8.15.2
do repositório libvips/libvips.
- Para Windows, você pode baixar o pacote
-
Extraia o conteúdo do arquivo baixado em um diretório de sua escolha, por exemplo,
C:\vips
. -
Adicione o diretório
bin
dopyvips
aoPATH
nas variáveis de ambiente do sistema, em varíaveis de usuário:- No Windows:
- Abra a barra de pesquisa do windows e encontre "Editar as variáveis de ambiente do sistema.
- Clique em "Variáveis de Ambiente"
- Na seção "Variáveis do Sistema", encontre a variável
Path
, em variáveis de usuário e edite-a. - Adicione o caminho para o diretório
bin
dopyvips
, por exemplo:C:\vips\bin
.
- No Windows:
-
Instale o pacote
pyvips
no seu ambiente Python:pip install pyvips
-
Substitua o caminho da variável "vipsbin" no script "dividir-imagem.py" pelo mesmo caminho
bin
de seupyvips-all
- Clone o repositório:
git clone https://github.com/guiibrag4/Identificador-de-Navios.git
- Navegue até o diretório do projeto:
cd Identificador-de-Navios
- Instale as dependências:
pip install -r requirements.txt
- No script de divisão de imagem, entre com a quantidade de partes que você deseja dividir a imagem original, armazenada no caminho
"main-project/assets/nome-imagem".
Certifique-se de colocar o caminho original e o nome da imagem selecionada. - Após isso, escolha o número de threads que será utilizada no script
processar.py
, substituindo o número da variávelmax-workers
. - Inicia o script e aguarde o processamento da imagem.
Contribuições são bem-vindas! Por favor, siga os passos abaixo para contribuir:
- Fork o repositório.
- Crie uma nova branch:
git checkout -b feature/sua-feature
- Faça suas modificações.
- Faça o commit das suas alterações:
git commit -m 'Adiciona nova funcionalidade'
- Envie para o branch:
git push origin feature/sua-feature
- Abra um Pull Request.
- Certifique-se de adicionar o
pyvips-all
nas variáveis de ambiente do sistema, além disso, certifique-se que o mesmo caminho está na variávelvipsbin
do script de divisão de imagens.
- Tente usar números diferentes de partes em que a imagem será dividida e também da quantidade de threads utilizadas. Processar várias partes de uma imagem simultaneamente em threads pode levar a um aumento no consumo de memória, especialmente se não houver controle adequado sobre o número de threads ou sobre o gerenciamento de recursos compartilhados.
- Ao dividir a imagem principal, não ultrapasse o limite de tamanho (4gb) e verifique o uso de memória do seu sistema. Carregar uma imagem grande inteira na memória pode utilizar muitos recursos, principalmente se houver operações de processamento ocorrento simultaneamente.
- Diminua o consumo de memória de sua máquina, para que ela consiga focar seus recursos no funcionamento do script.
Para encontrar os navios dentro da imagem foi utilizado um modelo de "cascata de haar", que possui parâmetros que podem ser alterados dentro de processar.py
. A modificação desses parâmetros pode fazer com que o sistema encontre mais ou menos navios. Por isso, é importante saber que ao mudar de imagem é necessário também modificar os parâmetros parte_np
, scaleFactor
,minNeighbors
,minSize
e maxSize
.
O script haarcascade utilizado neste projeto foi adaptado a partir do repositório de nicolagulmini.