Neural Network Model for solving captchas in Python
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

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()