二维码笔记系列:

唠唠闲话

这篇博客为申请 GSOC(Google Summer Of Code) 项目或 OSPP 项目准备,整理项目申请的重要信息,以及拟定计划书。

活动简介

摘自:开源培训计划 (GSoC/JSoC/OSPP)

太长不看版

学生每年 2-5 月开始可以申请 GSoC/JSoC 以及 OSPP 等编程培训项目,在开源社区中完成一个实际项目来提升自己的编程能力与经验,并获得一定的补贴。这项活动比大部分实习工作要更有挑战性,收获也会更大。如果你对 Julia 感兴趣,对开源社区感兴趣,并且想找到一个实践的机会的话,就请参与进来吧!

OSPP
开源软件供应链点亮计划 Open Source Promotion Plan(OSPP) 是自 2020 年起由中科院软件所和 OpenEuler 社区牵头组织的国内版 GSoC。Julia 中文社区从 2021 年开始加入这个活动,并计划每年都持续参与进来。

重要时间节点

日期 阶段
03/28-04/15 社区报名
04/16-04/20 项目数量沟通
04/21-05/10 社区上线项目及组委会审核
04/21-05/20 项目沟通期
05/21-06/04 学生提交项目申请书
06/05-06/11 项目申请审核(导师)
06/12-06/14 项目申请审核(组委会)
06/15 中选公示
06/16-06/30 项目预热期
07/01-09/30 项目开发
10/01-10/31 结项审核
11 月上旬 结项项目公示

参与项目

  1. Title: Better QR Code support (open ended)

  2. Difficulty: Medium(175h) or Hard(350h)

  3. Description: QRCode.jl is a legacy package that supports encoding data to QR code. Contributors are required to revive this package to co-exist with the latest JuliaImages ecosystem, and also adding support to decode QR code into julia data. Decoding QR code can be potentially be challenging and students need to find out a satisfying solution from the literature.

  4. Skills: Experiences in JuliaImages are required. The ability to read and understand the QR code specification.

  5. Mentors: Johnny Chen


项目计划书

文件:项目计划书

项目介绍

在 JuliaImages 生态中,目前存在用于处理二维码的模块 QRCode.jl。该模块支持将用户数据以二维码形式导出,但不支持从二维码图像中解码原数据。项目旨在为 JuliaImages 生态添加对二维码解码的支持,进而完善二维码方面的工具。

技术细节

二维码构成

编码步骤

参见笔记第一篇

QRCode.jl

模块 QRCode.jl 目前支持数字模式数字字母模式字节模式这三种,但暂时没有提供对汉字模式的支持。因此,对于日文汉字的数据,只能归在字节模式中处理,这一来生成的二维码对汉字的存储容量将会减少。

QRCode.jl 有四个主要的代码文件:

  • QRCode.jl 定义结构对象,并将编码步骤汇总在函数 qrcode
  • errorcorrection.jl 提供生成纠错码的函数
  • tables.jl 编码过程除了第一步数据分析,其他六步均需要查表进行,该文件记录了相关的表格数据
  • matrix.jl 提供二维码的初始矩阵,记录时序图案和对齐图案,编写掩码和罚分相关的函数

技术方案及可验收结果

  1. 解码为编码的逆过程,基本流程如下:

    • 定位二维码,并读入二维码矩阵
    • 从矩阵的版本信息区获取二维码版本,与当前规格比较,若不匹配,则抛出异常
    • 从矩阵的格式信息区获取掩码模式和纠错等级
    • 根据掩码模式还原数据码和纠错码
    • 根据纠错等级还原数据,若还原失败,说明错误量超过纠错范围,抛出异常
  2. 具体的,在二维码检测方面,一种可行策略为:

    • 图像二值化及边缘检测
    • 根据轮廓搜索探测图形
    • 根据探测图形的位置计算拉伸信息
    • 将拉伸还原,并读取数据
  3. 在解码方面,二维码基于 Reed-Solomn 编码纠错,项目拟采用以下纠错算法:

    • Berlekamp Welch Algorithm
    • Berlekamp-Massey Algorithm

    其中 Berlekamp Welch Algorithm 只涉及解线性方程组以及多项式运算,算法简单,且容易实现。在确保解码结果正确的情况下,再进一步实现更高效的 Berlekamp-Massey Algorithm。

  4. 预期结果:

    • 完善 QRCode.jl 的编码支持
    • 提供二维码检测和解码功能

项目时间规划

第一阶段(07月01日-08月15日)

主要计划:

  • 编码原理及解码算法的学习
  • 解码算法的检验测试
  • 补充 QRCode.jl 对 Kanji 模式的支持
  • 简易场景的支持,比如网页截图,不涉及拉伸,旋转

第二阶段(08月16日-09月30日)

主要计划:

  • 复杂场景的支持,比如现实拍照的二维码,可能存在拉伸,旋转,遮挡,噪点
  • 单个图片存在多个二维码的情形
  • 处理噪点更大的二维码

相关阅读

  1. GSOC:

  2. OSPP:

  3. Julia:

  4. QR-Code: