条形码识别(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 开始 载入图片 剪裁出条形码区域 校正条形码图像 图像预处理(灰度化、滤波,二值化) 扫描条形码,获得bar和space的宽度 根据bar和space的宽度译码 校验 检测结果是否正确 输出条形码 结束 纠错 纠错成功 提示识别失败 yes no yes no

4.总结

  • 条形码有规定的标准,条形码检测就是根据标准逆向读出其所代表的信息
  • 条形码检测的难点是剪裁出条形码区域并校正至理想状态
  • 译码的依据是字符及其二进制表示的表
  • 前置码并没有用bar&space表示

5.思考

  • 为什么左侧字符要有奇偶性?
    思考:左侧字符的奇偶性由前置码决定,所以奇偶性常见的应用就是检测扫描方向是否相反和判断出前置码是多少。但是假如固定左侧奇编码,右侧偶编码那么也能判断扫描方向是否相反;假如把前置码放到数据区也用bar&space表示也更精确。

条形码识别(1)——基础知识相关推荐

  1. 干货|人脸识别技术基础知识,看这里

    https://www.toutiao.com/a6709323970534965763/ 人脸识别(FaceRecognition,FR)是一种基于人的脸部特征信息进行身份识别的一种生物识别技术.用 ...

  2. 人脸检测和人脸识别的基础知识

    1. 人脸识别和人脸检测概念 人脸识别(Face Recognition)是基于人的脸部特征信息进行身份识别的一种生物识别技术.说简单点,人脸识别解决"这是谁的脸"问题. 人脸检测 ...

  3. 基于动物标签识别的基础知识以及FDX-B协议与结构介绍。

    在此之前,要先了解一下动物识别标准. 1  国际动物识别标准介绍 ISO 11784:动物的射频识别--代码结构. ISO 11785:动物的射频识别--技术标准. ISO 11784和11785分别 ...

  4. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

    本节书摘来自异步社区<精通Matlab数字图像处理与识别>一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区"异步社区&qu ...

  5. 基于人脸的常见表情识别(1)——深度学习基础知识

    基于人脸的常见表情识别(1)--深度学习基础知识 神经网络 1. 感知机 2. 多层感知机与反向传播 卷积神经网络 1. 全连接神经网络的2大缺陷 2. 卷积神经网络的崛起 卷积神经网络的基本网络层 ...

  6. 画出识别c语言注释的转换图,C语言程序设计基础与实训教程》第1章:基础知识.ppt...

    <C语言程序设计基础与实训教程>第1章:基础知识.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计基础与实训教程>第1章:基础知识.ppt(25页珍藏版)> ...

  7. 电大计算机基础知识机考题,电大《计算机应用基础》网考机考单选题大汇总

    电大<计算机应用基础>网考机考单选题大汇总 一.计算机基础知识 1.一般认为,世界上第一台电子数字计算机诞生于______.A 1946年 2.计算机当前已应用于各种行业.各种领域,而计算 ...

  8. 计算机系统结构知识总结,计算机基础知识总结

    计算机基础知识总结 随着计算机应用的普及,计算机知识已成为人才素质结构中的重要组成部分,那么你对计算机基础知识了解多少呢?以下是由小编整理关于计算机基础知识的内容,希望大家喜欢! 计算机基础知识汇总 ...

  9. 1.计算机二级考试 计算机基础知识部分

    计算机基础知识部分 1.1计算机概述 考点1计算机发展简史 1946年2月日,世界上第一台电子计算机Eniac在美国宾夕法尼亚大学诞生,它的出现具有划时代的伟大意义. 从第一台计算机的诞生到现在,计算 ...

最新文章

  1. zzfrom水木-Linux环境学习和开发心得(作者:lunker)
  2. it项目管理案例_盈通顾问项目管理精英训练营(第一期)
  3. SuseLinux详解(3)——开启/关闭防火墙的方法
  4. u-boot-2014.10移植(5)支持nand
  5. 讨一个上海中上条件的老婆的成本 (zz)
  6. MySQL DBLE_MySQL 中间件 - DBLE 简单使用
  7. socket: (10106) 无法加载或初始化请求的服务提供程序。
  8. 将整数翻译成英文(C++)
  9. 一篇文章带你看遍Google I/O 2019大会
  10. 多线程抢票_多线程抢票系统浅析
  11. 依图科技CTO颜水成被曝离职,或转战东南亚独角兽Shopee
  12. uniapp 默认首页 进入登录页闪烁问题
  13. 使用Mysql函数生成指定的自增序列号
  14. android studio开发微信界面
  15. 百度文字识别OCR接口使用
  16. 致一个属于宇宙星辰的人
  17. 锂矿降龙十八掌之时乘六龙:盛新锂能
  18. 对接钉钉消息通知_接入钉钉API发送企业消息
  19. 戴森向小狗下刀,吸尘器市场中外乱战开启?
  20. 一个简单的网路测试bat脚本

热门文章

  1. 三维模型obj文件解析
  2. 解决调用wx.downLoadFile下载的文件名乱码(长串英文字符)问题
  3. 【B2B2C多用户】WSTMart商城系统 V2.0.6更新版发布
  4. style 标签中动态设置颜色
  5. PC端下载文件到本地
  6. 独立开发者为什么不需要运营也能月薪几万,甚至几十万?
  7. 【机器学习】常见问题
  8. 被chatGPT割了一块钱韭菜
  9. 最新三维立体画·换个角度看世界
  10. 计算机概论复习:知识大全