某RED书旋转验证码识别(二)

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路
本文的验证码网址如下,使用base64解码获得

接上篇,使用了图像处理的方式处理小红书的旋转验证码之后,在其计算梯度之后仍然达不到想要的结果,本篇继续采用图像处理的方式去计算角度,采用特征点和图像直方图匹配的方式找到旋转角度,该方法成功率达95%,来看一下通过这种方法,得到后的结果图如下
在这里插入图片描述
可以看到,无论是古风图片还是卡通图,基本上都能找到正确角度,该方法不采用模型训练的方式,模型训练目前市面上大致都是360角度分类训练,该方法计算复杂度大,模型精度低,因为所有图像角度在细分成360度分类后,其模型很难泛化,本文方法其实不适用模型,其运行速度在高也能控制在几百毫秒以内,该速度取决于算法精度,使用计算的图像算法越复杂,图像精度越高,运行时间越长,从下图中可以看出,最长也能控制在大约300-400毫秒以内
在这里插入图片描述

下面来看具体步骤
在这里插入图片描述

核心直方图计算方法

   img = cv2.imread(os.path.join("newangle", im))
   tong = 512
   # 使用更小的桶数
   hist_size = [tong,tong,tong]  # 每个维度 32 个桶
   hist_range = [0, 256, 0, 256, 0, 256]

   hist = cv2.calcHist([img], [0, 1, 2], None, hist_size, hist_range)

   # 归一化直方图
   hist = cv2.normalize(hist, hist).flatten()

   allangleimg[im] = [img, hist]

核心角度计算方法

    # 检测特征点和描述符
    kp1, des1 = sift.detectAndCompute(que_result_yuan, None)
    kp2, des2 = sift.detectAndCompute(trueangleimg, None)

    # 使用KNN匹配器来匹配特征点
    bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
    matches = bf.match(des1, des2)

    # 提取匹配的点
    src_pts = np.float32([kp1[m.queryIdx].pt for m in matches])
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in matches])


这里放了大致的部分,将代码组装后,所有代码不到100行,注意,为了隐私和安全,这里不会放出全部代码,如果需要,找我本人联系获取,本文只提供大致思想,聪明的小伙伴可以自己去改写,条条大路通罗马。
在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码王吴彦祖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值