Neural Network Model for solving captchas in Python
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

testar_modelo.py 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import tensorflow as tf
  2. from tensorflow.keras.models import load_model
  3. from imutils import paths
  4. import numpy as np
  5. import cv2
  6. import pickle
  7. from tratar_captcha import tratar_imagens
  8. tamanho_imagem = (35, 50)
  9. def quebrar_captcha():
  10. # Importar o modelo e o tradutor
  11. with open("rotulos_modelo.dat", "rb") as arquivo_tradutor:
  12. lb = pickle.load(arquivo_tradutor)
  13. modelo = load_model("modelo_treinado.keras")
  14. tratar_imagens("captcha_teste", pasta_destino="captcha_teste")
  15. arquivos = paths.list_images("captcha_teste")
  16. # Posições fixas para o corte de cada caractere
  17. posicoes_corte = [(6, 40), (56, 90), (111, 144), (161, 197), (214, 250), (265, 297)]
  18. resultados = [] # Lista para armazenar os resultados de todos os captchas
  19. for arquivo in arquivos:
  20. imagem = cv2.imread(arquivo, cv2.IMREAD_GRAYSCALE)
  21. # Aplicar um limiar para binarizar a imagem
  22. _, imagem_bin = cv2.threshold(imagem, 128, 255, cv2.THRESH_BINARY_INV)
  23. imagem_final = cv2.merge([imagem_bin] * 3) # Convertendo de volta para RGB para desenhar os retângulos coloridos
  24. # Processar cada região de corte definida
  25. previsao = []
  26. for x1, x2 in posicoes_corte:
  27. imagem_caractere = imagem_bin[20:-15, x1:x2] # Cortar a região do caractere
  28. imagem_caractere = cv2.bitwise_not(imagem_caractere)
  29. imagem_caractere = cv2.resize(imagem_caractere, tamanho_imagem)
  30. imagem_caractere = np.expand_dims(imagem_caractere, axis=2)
  31. imagem_caractere = np.expand_dims(imagem_caractere, axis=0)
  32. letra_prevista = modelo.predict(imagem_caractere)
  33. letra_prevista = lb.inverse_transform(letra_prevista)[0]
  34. previsao.append(letra_prevista)
  35. texto_previsao = "".join(previsao)
  36. resultados.append(texto_previsao) # Armazenar resultado na lista
  37. for resultado in resultados:
  38. print(resultado) # Imprimir todos os resultados
  39. return resultados # Retornar a lista de resultados
  40. if __name__ == "__main__":
  41. quebrar_captcha()