条形码识别(1)——基础知识

条形码识别(1)——基础知识

标签: 机器视觉 条形码识别 Python


1.序

马上就要放寒假了,老师那边貌似也没有什么任务,这一个礼拜不能闲着,思索着做一点东西练练手,看书和实践结合起来才是最有效率的。平时记下来的点子挺多:RPG游戏、爬虫、数字和字母识别等等。可惜时间不多,要是本科期间有现在学习的心思就好了……综合考虑了一下难易程度和实用性,最终选择了“条形码识别”这个目标,一方面有图像处理的知识,可以用在毕设上面;另一方面有一定的实用价值,而且可以长期的做下去。

其实一开始是想偷个懒的,准备下载个第三方库(比如Zbar)调用一下API能够识别条形码就行了,但是后来一想这么做根本就不能学到有用的新知识,遂作罢。为了学习python,所以采用python来编写程序。

我准备按照分析法综合法相结合的方法执行条形码识别的任务,具体过程如下:

  1. 条形码图片处于理想状态下的识别与校验
  2. 从一张图片中剪裁出条形码区域
  3. 将检测出的条形码进行适当的处理,使其尽量的接近理想状态
  4. 优化整个过程,添加纠错等功能

其中理想状态是指使用条形码生成器生成出来的条形码的状态:

  • 图片无污损无畸变
  • 图片只有条形码,没有其他任何多余的信息
  • 条形码的两边分别属于水平和竖直状态
  • 条形码从左到右为正向

如图所示:

其实也是摸索着前进,分享出来是希望能够有人一起讨论讨论。

你有一个苹果,我有一个苹果,我们交换的话每个人还是只有一个苹果;你有一个思想,我有一个思想,我们交换的话每个人就有了两个思想。

是以为序。

2.EAN13条形码结构

维基百科:条形码
条形码或称条码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到了广泛的应用。

条形码有多种,在我国广泛流传的是EAN13条形码(以下简称条形码),所以主要研究该种条形码的识别。

条形码位数说明:

  • 条形码一共有13位
  • 前2位或者前3位称为前缀,表示国家、地区或者某种特定的商品类型
    • 中国区条形码开头:690~699
    • 图书类条形码开头:978~979
  • 前缀后的4位或者5位称为厂商代码,表示产品制造商
  • 厂商代码后5位称为商品代码,表示具体的商品项目
  • 最后1位是校验码,根据前12位计算而出,可以用来防伪以及识别校验

条形码编码说明

  • 条形码一共有8个区域:左侧空白区->起始符->左侧数据符->中间分隔符->右侧数据符->校验符->终止符->右侧空白区

  • 字符为0~9

  • 除空白区外的区域和字符都采用二进制编码表示,1表示bar(黑条),0表示space(白条)

  • 起始符,终止符编码为101,分隔符编码为01010

  • 0~9每种字符有3种编码方式,AB为左侧数据奇偶编码,C为右侧数据偶编码

  • 左侧数据的奇偶性由前置符决定

  • 0~9每个字符由2个bar和2个space组合而成,合计长度为7
  • 起始符到终止符一共有95个长度(95=3+7*6+5+7*6+3)
  • 起始符到终止符一共有59个bar和space(59=3+6*4+5+6*4+3)

3.检测条形码的基本流程

Created with Raphaël 2.2.0
  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值