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

 

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

识别结果示意图

验证码滑块识别算法 100% 识别 思路简单(附算法 python 代码)_第1张图片



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

你可能感兴趣的:(超值的一些内容,python,算法,开发语言)