Python识别快递单号(条形码识别、字符识别,Tesseract-OCR)

#识别快递单号

这项目大概是流水线上识别快递上的快递单号。尝试了解条形码的基本知识
我从这博客的三篇博文中很好的了解了识别条形码的相关知识——moverzp的博客

百度百科:条形码
条形码(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为右侧数据偶编码
    这里写图片描述

  • 左侧数据的奇偶性由前置符决定(就是说,第一个支付是几就按下面的排列开始)

这里写图片描述

##还有这么一种理解编码方法

以宽度为编码,去掉起始码,终止码,中间分隔码,不管白条还是黑条都算一个编码,最窄一节为1(最窄的为单位宽度),两个单位宽度就是2,三单位长度为3,四单位宽度为4
四条(不管黑条还是白条都算条)代表一个数字

四条长度 数字
3211 0
2221 1
2122 2
1411 3
1132 4
1231 5
1114 6
1312 7
1213 8
3112 9

####两种编码的图示
这里写图片描述

这就代表为 数字 1


##校验

EAN13条形码一共有13位,最后1位是校验位,该位是通过前12位按照一定的步骤计算出来的。
如果按照一定的步骤处理识别出的前12位数据,如果计算结果和识别出的结果相等,识别正确;
如果不相等,则重新识别或纠错再校验或提示识别失败。

#####校验码计算方法

以下图所示的条形码举例说明:

这里写图片描述
条形码的位数起始位为最右一位,即校验位,检验码计算方法如下:

偶位数数值相加乘3((0+2+0+8+1+9)*3=60)
不含校验位的奇位数相加(7+4+7+9+3+6=36)
将前两步的结果相加(60+36=96)
用10减去上一步结果的个位数数值(10-6=4)
上一步结果的个位数即为校验码(4)

##源码

#创建:2016/01/26
#文件:BarCodeIdentification.py
#作者:moverzp
#功能:识别条形码
import sys
import cv2

DECODING_TABLE = {
   
    '0001101': 0, '0100111': 0, '1110010': 0,
    '0011001': 1, '0110011': 1, '1100110': 1,
    '0010011': 2, '0011011': 2, '1101100': 2,
    '0111101': 3, '0100001': 3, '1000010': 3,
    '0100011': 4, '0011101': 4, '1011100': 4,
    '0110001': 5, '0111001': 5, '1001110': 5,
    '0101111': 6, '0000101': 6, '1010000': 6,
    '0111011': 7, '0010001': 7, '1000100': 7,
    '0110111': 8, '0001001': 8, '1001000': 8,
    '0001011': 9, '0010111': 9, '1110100': 9,    
    }

EDGE_TABLE = {
   
    2:{
   2:6,3:0,4:4,5:3},
    3:{
   2:9,3:'33',4:'34',5:5},
    4:{
   2:
  • 12
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值