最开始的识别思路是通过模板来找到这个验证码的滑块图像所在的位置,但是使用下来发现准确率在90%左右一起提不上去,无论怎么优化都无法提高,后来发现了一个奇特的思路可用完美解决这个验证码的问题,思路写在了代码里面,最后返回的结果是需要移动的滑块的左上角的坐标点位置(本算法思路主要用在电子税务网站)其他的类似的验证码也可以
识别结果示意图文章来源:https://www.toymoban.com/news/detail-827247.html
文章来源地址https://www.toymoban.com/news/detail-827247.html
def slide_comparison( target_bytes):
# ; 微 394467238
alpha_channel = np.ones(target_bytes.shape, dtype=target_bytes.dtype) * 255
# alpha通道每个像素点区间为[0,255], 0为完全透明,255是完全不透明
# image = ImageChops.difference(background, target)
# image = ImageChops.difference(alpha_channel, target_bytes)
image = alpha_channel - target_bytes
# background.close()
# target.close()
# image = image.point(lambda x: 255 if x > 20 else 0)
start_y = 0
start_x = 0
# for i in range(0, image.width):
for i in range(0, image.shape[1]):
count = 0
# for j in range(0, image.height):
for j in range(0, image.shape[0]):
# pixel = image.getpixel((i, j))
pixel = image[j, i]
# if pixel != (0, 0, 0):
if pixel != 0:
count += 1
if count >= 5 and start_y == 0:
start_y = j - 5
if count >= 5:
start_x = i + 2
break
return [start_x, start_y] # w,h
def get_long_v2(finame='0.png',pre=''):
# v2 版本;仅仅使用png 的遮罩层就可以得到滑块的位置了; 微 394467238
print(finame)
bg_img0 = cv2.imread(finame, cv2.IMREAD_UNCHANGED)
res = slide_comparison(bg_img0[:,:,3]) # 左上角点的坐标 w,h
# th, tw = bg_img0.shape[:2]
# br = (res[0] + tw, res[1] + th)
# cv2.rectangle(bg_img0, res, br, (255, 255, 255), 2) # 绘制矩形
# cv2.imwrite('1.png', bg_img0) # 保存在本地
return res
到了这里,关于验证码滑块识别算法 100% 识别 思路简单(附算法 python 代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!