# captcha-solver

Neural Network Model for solving captchas in Python

## Instalação de Dependências do Python:
pip install selenium
pip install fastapi
pip install pydantic
pip install opencv-python-headless  # Para cv2
pip install tensorflow
pip install imutils
pip install numpy
pip install scikit-learn

## Execução:
Executar o 'uvicorn main:app' para subir o endpoint.

## Atenção:
O Modelo de Rede Neural já está treinado e salvo como "modelo_treinado.keras". Sendo assim, não é necessário executar quaisquer arquivos que não seja o 'testar_modelo.py' para teste do modelo.

## Treinamento do Modelo:
### Passo 1 - Mineração de Captcha:
- Crie um diretório novo chamado "captcha_images".
- Execute o arquivo 'captcha_miner.py', ao executar esse arquivo será aberto o navegador do Chrome e serão salvos no diretório criado 2000 captchas novos.
  Obs: É necessário baixar o chromedriver e adicionar no diretório onde fica o python.exe (link com instruções).

### Passo 2 - Tratamento das imagens:
- Crie um diretório novo chamado "captcha_tratado".
- Execute o arquivo 'tratar_captcha.py', ao executar esse arquivo todos os captchas do "captcha_images" serão tratados e salvos no novo diretório criado.

### Passo 3 - Separação das Letras:
- Crie um diretório chamado "caracteres" e outro chamado "identificado".
- Execute o arquivo 'separar_letras.py', ao executar esse arquivo todos os captchas tratados serão recortados nas regiões das letras e salvos no diretório "caracteres". Na pasta "identificado" será salvo uma visualização do recorte na imagem inteira.

### Passo 4 - Rotulação dos Caracteres existentes:
- Manualmente, dentro da pasta "base_letras", crie um diretório para cada caractere existente nos captchas (o diretório deve ter o nome do caractere), letras, números etc, caso não exista ainda.
- Abra a pasta caracteres e coloque de 30 a mais exemplos de cada caractere em sua respectiva pasta.

### Passo 5 - Treinar o Modelo (IA):
- Basta executar o 'treinar_modelo.py' que o novo modelo será treinado e salvo como "modelo_treinado.keras".
  Ao executar o 'treinar_modelo.py', é possível verificar a acurácia (taxa de acerto) do modelo no terminal, utilizando 3 epochs. Chegamos em uma média de 95%, esse parâmetro define quantas vezes o modelo será treinado. Não é recomendável aumentar, pois o resultado de 95% de acerto já é considerado ótimo.
