V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
sillydaddy
V2EX  ›  奇思妙想

用深度学习来识别二维码,应该挺简单吧?

  •  
  •   sillydaddy · 2020-09-29 13:52:53 +08:00 · 4708 次点击
    这是一个创建于 1520 天前的主题,其中的信息可能已经有所发展或是发生改变。
    训练素材基本不是问题,对着一个二维码,从各个角度和光照下都录一段视频,每帧图像都可以作为训练数据。

    另外,二维码的特性也非常适于深度学习来解决:边角的特征、图像单元的特征。并没有比识别猫、狗复杂。

    我试过 zxing/zbar 这些程序,检测正确率没有微信、支付宝这些商业软件高。

    不用 AI 是移动端运算效率的问题吗?

    网上搜索发现了一个用云端 AI 检测的: "人工智能二维码识别" ( https://yq.aliyun.com/articles/710415 )
    13 条回复    2023-01-22 23:48:05 +08:00
    Ricardoo
        1
    Ricardoo  
       2020-09-29 14:05:44 +08:00   ❤️ 1
    二维码这种标准格式的根本没必要上深度学习。深度学习是提取图像特征,但是二维码本身的格式规范就是一种有效的“特征”,绕远路放弃这种特征反而去搞深度学习不是本末倒置吗?至于你说的阿里云上的“人工智能二维码识别”可能仅仅是加上了一个图像变换
    BrettD
        2
    BrettD  
       2020-09-29 14:08:13 +08:00 via iPhone   ❤️ 1
    二维码本来就有清晰定义的识别方法,用深度学习识别二维码不是舍近求远吗?
    dingwen07
        3
    dingwen07  
       2020-09-29 14:08:44 +08:00 via iPhone
    二维码机器学习可能只能帮着在图像中正确找到二维码的定位点
    从二维码中读取信息不应该用机器学习,二维码本身就是设计为方便机器读取的,和猫狗有着本质上的区别,没必要用机器学习。
    kop1989
        4
    kop1989  
       2020-09-29 14:12:32 +08:00   ❤️ 3
    lz 的表达可能有说的有点偏。我揣测 lz 是想说通过 ai 来进行二维码图片自纠,或者叫识别效率的提升。并不是做识别解析本身。

    机器学习是用来找复杂事务的规律的。
    换句话说,是通过迭代验证来建立人脑无法抽象建立的复杂规则模型。

    二维码 QR 标准本身就是一个非常准确的量化模型,不需要学习。
    lz 发出来的这个其实他的 ai 就是用在了图片的自纠上。

    不过这个产品未必用的是机器学习这条路。因为 QR 码本身足够稳定,人工来优化应该就能得到很好的效果。“大数据”,“人工智能”没准只是销售词汇。
    imn1
        5
    imn1  
       2020-09-29 14:47:23 +08:00
    学习什么?用途?目的?

    是分析照片中有没有二维码,还是分析二维码的类别?
    sillydaddy
        6
    sillydaddy  
    OP
       2020-09-29 14:50:57 +08:00
    @Ricardoo
    @BrettD
    @dingwen07
    @kop1989

    二维码的定义是非常清晰,然后它的定位点也是非常适合算法识别:“只要扫描图形的一行像素,发现黑白像素的数目比例符合 1:1:3”就找到二维码角点了,图像旋转、稍微倾斜都不影响这一点。

    但有个现实的问题就是:zxing/zbar 这些算法,利用上面的算法,还是不能达到很好的识别效果,不够智能。比如有光影的变化,黑白的失真,比如像我发的链接里面有大的倾斜,比如二维码占据的图像部分或大或小。

    总之是 zxing/zbar 这些不够智能。这里的智能的标准就是:只要一张二维码图像,用人肉眼可以识别出来(一个个地数黑白格子),那么机器就应该识别出来。
    charten
        7
    charten  
       2020-09-29 15:45:07 +08:00
    当初微信为了小程序,专门搞了一个二维码的变种“小程序码”,但是基本的图形特征还是有的。这说明了一些公司对于二维码个性化还是有追求的,而且对于目前二维码的特征样式有所不满。与其去识别目前的二维码,不如思考一下,设计一个弱特征点的二维码,最好是相对美观而且更容易契合宣传物料的,然后训练 AI 识别出来。人眼可以一下子识别出来,但是对于计算机视觉比较困难,这个不正式 AI 的一个优势之处么?
    futou
        8
    futou  
       2020-09-29 16:17:02 +08:00
    二维码是一个完善的编解码系统,由信息到二维码再到信息的编码和解码是唯一的,同时考虑到拍摄条件的鲁棒性。深度学习可能也就在鲁棒性这个地方有一丢丢用武之地了。
    前几年还有人研究美观问题,是怎样将目标图片和二维码混到一起而不影响信息读取的问题,比如 "2015_TMM_Efficient QR code beautification xxx"。这几年很多自定标准的二维码出来后研究的就少了。
    superlc
        9
    superlc  
       2020-09-29 16:55:42 +08:00 via iPhone   ❤️ 1
    非要做的话,应该是用 DL 的方法做降噪 /提取 /锐化 /超像素,然后再用传统方法识别,相当于预处理。实际上这部分已经存在在很多手机的摄像头驱动里了

    DL 的本质是拟合高维函数,在原编解码方式已知的情况下去拟合,是我拟我自己,相当于放着开源代码不看去做逆向工程,没意义的

    至于为什么不做专门的二维码降噪,我在生活中的体验是现在微信的二维码扫描已经基本无敌了,几乎很少有肉眼能看清但是扫不出来的情况存在。更何况糊到一定程度信息就丢失了,别说 ai 了怕是神仙也难救。花大价钱解决很少的几个 case,估计不怎么能回本
    superlc
        10
    superlc  
       2021-02-01 00:31:17 +08:00   ❤️ 1
    @superlc 来 update 了,腾讯刚刚开源了微信的二维码识别算法在 opencv-contrib 里
    https://docs.opencv.org/master/d5/d04/classcv_1_1wechat__qrcode_1_1WeChatQRCode.html
    https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L156

    这里有一个简介 https://mp.weixin.qq.com/s/pphBiEX099ZkDV0hWwnbhw

    我还是低估了腾讯的能(财)力,他们真的用了 CNN 在里面,而且不止一个模型。除了上面我提到的超分辨率和降噪,竟然还有一个 SSD-like 模型用 CNN 做检测,牛的
    sillydaddy
        11
    sillydaddy  
    OP
       2021-02-01 18:05:06 +08:00
    @superlc
    > “结合传统计算机视觉和深度学习技术,微信扫码引擎解决了一图多码、大图小码、鲁棒解码等业务痛点和技术难点”

    看这个说明,不知道开放的源码能不能解决类似反光高光这种情形。实际微信扫码时,似乎能比较好的处理反光高光的情况。
    pheyer
        12
    pheyer  
       2021-02-02 13:57:38 +08:00
    @sillydaddy 根据我的日常使用实践,我感觉微信识别二维码还是差于支付宝的
    crazyweeds
        13
    crazyweeds  
       2023-01-22 23:48:05 +08:00
    @pheyer 同感,但开源出来的,识别能力最强的目前应该就是腾讯这个方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1040 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:13 · PVG 06:13 · LAX 14:13 · JFK 17:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.