验证码滑块识别算法 100% 识别 思路简单(附算法 python 代码)

发布时间:2023年12月18日

?

最开始的识别思路是通过模板来找到这个验证码的滑块图像所在的位置,但是使用下来发现准确率在90%左右一起提不上去,无论怎么优化都无法提高,后来发现了一个奇特的思路可用完美解决这个验证码的问题,思路写在了代码里面,最后返回的结果是需要移动的滑块的左上角的坐标点位置(本算法思路主要用在电子税务网站)其他的类似的验证码也可以

识别结果示意图



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

文章来源:https://blog.csdn.net/a394467238/article/details/135059455
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。