|
- import tensorflow as tf
- from tensorflow.keras.models import load_model
- from imutils import paths
- import numpy as np
- import cv2
- import pickle
- from tratar_captcha import tratar_imagens
-
-
- tamanho_imagem = (35, 50)
-
- def quebrar_captcha():
- # Importar o modelo e o tradutor
- with open("rotulos_modelo.dat", "rb") as arquivo_tradutor:
- lb = pickle.load(arquivo_tradutor)
-
- modelo = load_model("modelo_treinado.keras")
- tratar_imagens("captcha_teste", pasta_destino="captcha_teste")
-
- arquivos = paths.list_images("captcha_teste")
-
- # Posições fixas para o corte de cada caractere
- posicoes_corte = [(6, 40), (56, 90), (111, 144), (161, 197), (214, 250), (265, 297)]
-
- resultados = [] # Lista para armazenar os resultados de todos os captchas
-
- for arquivo in arquivos:
- imagem = cv2.imread(arquivo, cv2.IMREAD_GRAYSCALE)
-
- # Aplicar um limiar para binarizar a imagem
- _, imagem_bin = cv2.threshold(imagem, 128, 255, cv2.THRESH_BINARY_INV)
-
- imagem_final = cv2.merge([imagem_bin] * 3) # Convertendo de volta para RGB para desenhar os retângulos coloridos
-
- # Processar cada região de corte definida
- previsao = []
- for x1, x2 in posicoes_corte:
- imagem_caractere = imagem_bin[20:-15, x1:x2] # Cortar a região do caractere
- imagem_caractere = cv2.bitwise_not(imagem_caractere)
-
- imagem_caractere = cv2.resize(imagem_caractere, tamanho_imagem)
-
- imagem_caractere = np.expand_dims(imagem_caractere, axis=2)
- imagem_caractere = np.expand_dims(imagem_caractere, axis=0)
-
- letra_prevista = modelo.predict(imagem_caractere)
- letra_prevista = lb.inverse_transform(letra_prevista)[0]
- previsao.append(letra_prevista)
-
- texto_previsao = "".join(previsao)
- resultados.append(texto_previsao) # Armazenar resultado na lista
-
- for resultado in resultados:
- print(resultado) # Imprimir todos os resultados
-
- return resultados # Retornar a lista de resultados
-
- if __name__ == "__main__":
- quebrar_captcha()
|