支付宝AR红包破解算法-搞定黑线随机宽度

        支付宝红包,发红包的同学拍一张物体的照片,系统加黑线处理. 收红包的同学在地图上找到这个物体,同样摄像头以同样的角度,距离对着扫,就可以领到红包.

一不小心又超限了


       这种玩法很有趣,调动了大家的积极性。我觉得这个玩法应该首先在百度地图上实现,只可惜老东家的产品经理们没有想到类似的玩法.

        下面说一下破解的对策,由于支付宝后台匹配算法计算的也是相似度,因此并不是一定要找到藏红包的地址,只需要从线索图片里进行处理,就可能通过验证,拿到红包。

       网上有photoshop教程,用黑线相近的区域填充黑线覆盖的区域,就可以通过验证。同样,可以用python等脚本来实现。

       一个简单的思路就是设置好固定的黑线和实景的像素宽度,用PIL去处理,进行复制和粘贴工作..网上有很多类似的实现.但是缺点也明显,不同手机像素不同,需要自己去调节,并且,阿里修改了黑线宽度策略,随机化宽度,让这种方式的工具丢掉了太多实景像素,而不能通过验证。

       更好的解决方案是,通过选取几列像素,通过像素值来动态计算判断黑线的位置,然后通过黑线相近的像素用插值的方法去填充,这样能损失最少的实景像素,并且处理之后的图片看起来更柔和。

        https://github.com/whiled0ne 上,我已经写了一个demo,经测试,可以领到不少红包


线索图片

.

处理效果

      尽管在某些类型的图片上,这种方法近乎“完美”,但是在更多情况下,这种方式有很多弊端,它依赖你对黑线像素的阀值设置。如果背景颜色变化比较多,你需要自己调节这个黑线的阀值。

      一个更好的黑线判断思路是,将图像的rgb做一条曲线,黑线的中心位置应该落在曲线的奇点上,利用相邻像素值的差来检测,可以解决实景像素跟黑线接近的场景。首先,我们把每行像素的r g b相加,作出曲线


两张不同图片的每行像素和的变化

    可以看到,图片不同,像素不同,但是都在12的整数倍这里,达到最低点. 这里就是黑线的最低值. 而这个点可以通过每行像素跟前一行的增值来判断,这个d小于0,说明曲线递减,当0第一次由小于零变为大于0,就可以判断黑点的位置了

     另外一个工作就是判断黑线的宽度,这也可以通过d的值辅助判断,另外黑线还有一个明显的特征,我们取每行像素的最大值和最小值,黑线范围内的两个数的比值应该接近,用 log(e,max/min) 计算得到的数值接近0,这个特征算是必要不充分条件,结合一些其它特征,就可以不考虑像素点的具体值,具体范围,就可以修复图片.


两种方法的对比

   目前成功率在百分之五十左右,根据具体图片不同,会有一些不同。


背景暗淡的图片处理效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,930评论 25 708
  • 这几天,一直都在听薛之谦,有时候听得懵逼了会不知不觉的哭起来。哭完之后又会骂自己是个大傻逼。呵,女人不过就是这样为...
    风动裙摆响阅读 258评论 3 1
  • 纯粹的无神论者。 放空的时候也会思考,如果他、他们、那个时代、那个世界真正的存在过,活着大概也没那么无聊了。 另一...
    羅生門之鬼阅读 269评论 0 0
  • 物欲横流的社会,赚钱是我们现在每个人心中的一个大石头。能赚钱的投资,为什么不投呢? 于是,只要是能赚钱的买卖,七大...
    奔放花一朵阅读 244评论 0 0
  • 前生看见君恋我,今生但见我恋君,我去君在恋以去,君去我在去恋同。 山中只有藤缠树,世上那见树缠藤; 青藤若是不缠树...
    独孤因果阅读 577评论 0 1