Esta es una implementación real de CNN en Python 3, Keras y TensorFlow. Trabajamos en 2 pasos principales usando Preprocess.py
, que crea imágenes de dígitos sin artefactos que luego se alimentan al modelo CNN en train.py
, que entrena y guarda el modelo CNN.
Este solucionador de captcha fue desarrollado para usarse y actualmente se usa en metu-NTE-scraper para sortear la protección de captcha del portal de estudiantes de METU para verificar la capacidad del curso https://student.metu.edu.tr/. Pero puedes usarlo en tu aplicación con pasos simples que se explican en ¿Cómo usarlo? sección.
Entrené una CNN usando TensorFlow para clasificar imágenes de dígitos captcha después de la extracción de dígitos. El modelo consta de 2 capas convolucionales y capas de agrupación seguidas de una capa completamente conectada. Entrené el modelo en un conjunto de datos de 10000 imágenes captcha que luego se dividieron en imágenes de 60000 dígitos y logré una precisión de prueba del 99,94% en un conjunto de prueba de imágenes de 12000 dígitos.
La precisión del entrenamiento y la prueba del modelo son:
Nota: Algunas de las imágenes de las respuestas de las neuronas de activación se pueden ver debajo de los 4 pasos del preproceso.
predict.py
a su programa Python: Import predict
predict_captcha
usando la ruta del archivo de la imagen captcha como único argumento para predecir el captcha. filepath="pathtocaptchaimage"
prediction=predict.predict_captcha(filepath)
Para ayudarle a comprender el extractor de dígitos y el modelo, le mostramos los pasos visualizados.
Preprocess.py
funciona en 4 pasos para crear imágenes de dígitos que se muestran a continuación con las activaciones del modelo al final.
En el primer paso, limpiamos los artefactos de las imágenes captcha que se recopilaron utilizando SampleCollecter.py
Imagen original | Después de la eliminación de artefactos |
---|---|
Más tarde, la imagen sin artefactos se recorta para limitar los dígitos del captcha.
Después de la eliminación de artefactos | Cortado |
---|---|
Las medias K ponderadas se utilizan para encontrar los centros de cada dígito.
Cortado | Centroides |
---|---|
Por último, creamos imágenes de dígitos utilizando los centroides encontrados a partir de k-medias.
Centroides | Dígitos |
---|---|
Después de extraer los dígitos. El modelo CNN se utiliza para predecir las imágenes captcha. Aquí se generan neuronas de activación para la última capa convolucional de la CNN. Estas imágenes se crearon extrayendo el resultado de la última capa convolucional y visualizándola como una imagen. Las siguientes imágenes de activación muestran la respuesta de algunos de los filtros en la última capa convolucional de imágenes de 2 dígitos.
Dígito extraído | activación 10 | activación 18 | activación 26 | activación 29 |
---|---|---|---|---|
Nota: Para ver las respuestas de otras neuronas, puede verificar las activaciones.