【发布时间】:2018-05-08 06:30:54
【问题描述】:
我需要自动解析验证码以从网站获取公共数据。
我使用 python 和 opencv。我是解决图像处理的新手。搜索后,作为解决验证码的方法,我想出了下一个。由于 Captha 中的文本使用了一组相关颜色,我尝试使用 HSV 格式和蒙版,然后将图像转换为灰度并使用阈值 (Adaptive_THRESH_MEAN_C) 去除图像中的噪声。
但这不足以消除噪音并使用 OCR (Tesseract) 提供自动文本识别。见下图。
我的解决方案有什么可以改进的或者有更好的方法吗?
原图:
处理后的图像:
代码:
import cv2
import numpy as np
img = cv2.imread("1.jpeg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (36, 0, 0), (70, 255,255)) #green
# mask = cv2.inRange(hsv, (0, 0, 0), (10, 255, 255))
# mask = cv2.inRange(hsv, (125, 0, 0), (135, 255,255))
img = cv2.bitwise_and(img, img, mask=mask)
img[np.where((img == [0,0,0]).all(axis = 2))] = [255,255,255]
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 15, 2)
cv2.imwrite("out.png", img)
【问题讨论】:
-
如果提高阈值会怎样?看起来您的文字的亮度大于周围的噪音。
-
这里的问题是,一种适用于一张图像的设置不一定适用于另一张图像。您必须不断更改不同图像的值,这不是很实用。这就是使用验证码的全部意义所在。
-
我认为你应该在验证码中收集更多带有符号标签的验证码图像并将其提供给深度学习以解决这个任务,我来自 KZ,我知道这个验证码挂在哪里 :)
-
德米特里,另外我的朋友告诉我关于这个网站的移动应用程序,你想自动获取公共数据,在移动版本中验证码不会挂起 )))
标签: python opencv image-processing captcha