Soy muy nuevo en el procesamiento de imágenes y lo que intento hacer es eliminar el ruido de las captchas;
Para captchas, tengo diferentes tipos de ellos:
Para el primero lo que hice es:
En primer lugar, convertí cada píxel que no es negro al negro. Luego, encontré un patrón que es un ruido de la imagen y lo eliminé. Para el primer captcha, fue fácil borrarlo y encontré el texto con tesseract.
Pero estoy buscando una solución para el segundo y el tercero.
¿Cómo debe ser esto? Quiero decir, ¿cuáles son los métodos posibles para borrarlo?
Así es como borro patrones:
def delete(searcher,h2,w2):
h = h2
w = w2
search = searcher
search = search.convert("RGBA")
herear = np.asarray(search)
bigar = np.asarray(imgCropped)
hereary, herearx = herear.shape[:2]
bigary, bigarx = bigar.shape[:2]
stopx = bigarx - herearx + 1
stopy = bigary - hereary + 1
pix = imgCropped.load()
for x in range(0, stopx):
for y in range(0, stopy):
x2 = x + herearx
y2 = y + hereary
pic = bigar[y:y2, x:x2]
test = (pic == herear)
if test.all():
for q in range(h):
for k in range(w):
pix[x+k,y+q] = (255,255,255,255)
Perdón por los nombres de las variables, solo estaba probando la función.
Gracias..
Respuestas:
Esto es lo más lejos que puedo llegar:
Probablemente conozca la
medianBlur
función que encuentra el valor medio en cada núcleo y lo sustituye al centro del núcleo. Podemos hacer algo similar a eso, pero en lugar de la mediana, use el valor máximo y luego el valor mínimo. Con una mediana de desenfoque también, obtuve algunos resultados. Sé que no son perfectos, pero espero que te den algunas ideas (puedes jugar con los tamaños de la imagen de entrada y los núcleos, puede mejorar los resultados un poco).No tengo Python instalado ahora, así que comparto el código exacto de C ++ que he usado:
Por cierto, en tales casos, los métodos de aprendizaje profundo como YOLO y RCNN son los mejores métodos. Pruébalos también.
fuente
Aquí está mi solución
En primer lugar, obtuve el patrón de fondo (Editado en pintura a mano). Desde:
Después de eso, creé una imagen en blanco para llenarla con diferencias entre el patrón y la imagen.
Aquí están las diferencias ...
y finalmente, agregué desenfoque y borré los bits que no son negros.
Resultado:
Con el resultado de pytesseract es 2041, está mal para esta imagen, pero la tasa general es de alrededor de% 60.
fuente
Puede usar la biblioteca opencv para el procesamiento de imágenes. Muy útil podría ser esta página de documentación de OpenCV . Luego intente extraer su número a través del método findCountour como:
Después de eso hay el siguiente resultado:
Está lejos de ser perfecto, pero si intenta con valores de umbral diferentes, por ejemplo:
Puedes obtener mejores resultados.
fuente