Neural Network Model for solving captchas in Python
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

71 rinda
2.1KB

  1. import cv2
  2. import os
  3. import numpy as np
  4. import pickle
  5. from imutils import paths
  6. from sklearn.preprocessing import LabelBinarizer
  7. from sklearn.model_selection import train_test_split
  8. import tensorflow as tf
  9. from tensorflow.keras.preprocessing.image import ImageDataGenerator
  10. from tensorflow.keras.models import Sequential
  11. from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
  12. dados = []
  13. rotulos = []
  14. pasta_base_imagens = 'base_letras'
  15. tamanho_imagem = (35, 50)
  16. imagens = paths.list_images(pasta_base_imagens)
  17. for arquivo in imagens:
  18. rotulo = arquivo.split(os.path.sep)[-2]
  19. imagem = cv2.imread(arquivo)
  20. imagem = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
  21. imagem = cv2.resize(imagem, tamanho_imagem)
  22. # Adicionar uma dimensao para o Keras ler a Imagem
  23. imagem = np.expand_dims(imagem, axis=2)
  24. # Adicionar as listas de Dados e Rotulos
  25. rotulos.append(rotulo)
  26. dados.append(imagem)
  27. dados = np.array(dados, dtype="float") / 255
  28. rotulos = np.array(rotulos)
  29. # Separação em treino e teste
  30. (x_train, x_test, y_train, y_test) = train_test_split(dados, rotulos, test_size=0.25, random_state=0)
  31. lb = LabelBinarizer().fit(y_train)
  32. y_train = lb.transform(y_train)
  33. y_test = lb.transform(y_test)
  34. # Salvar o LabelBinarizer em um arquivo com Pickle
  35. with open('rotulos_modelo.dat', 'wb') as arquivo_pickle:
  36. pickle.dump(lb, arquivo_pickle)
  37. # Criar IA
  38. modelo = Sequential()
  39. modelo.add(Conv2D(20, (5, 5), padding="same", input_shape=(50, 35, 1), activation="relu"))
  40. modelo.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
  41. modelo.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
  42. modelo.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
  43. modelo.add(Flatten())
  44. modelo.add(Dense(500, activation="relu"))
  45. modelo.add(Dense(26, activation="softmax"))
  46. modelo.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])
  47. # Treinar
  48. modelo.fit(x_train, y_train, validation_data=(x_test, y_test), batch_size=26, epochs=3, verbose=1)
  49. # Salvar o Modelo
  50. modelo.save("modelo_treinado.keras")