首页
社区
课程
招聘
3
[原创]用python写了个条形码图片识别程序
发表于: 2014-7-14 21:11 21916

[原创]用python写了个条形码图片识别程序

2014-7-14 21:11
21916

做到一个题目,要编程获取UPC-A条形码的值.于是研究了一天的条形码,终于可以用肉眼看出值来,但是比较伤眼睛,还是写了个算法来搞定它吧.python语法不是很懂,边百度边写,算法是看了一篇老外的文章,受到启发想出来的,非常简陋,只能保证对这张图片有效
老外文章链接:http://www.buzzle.com/articles/how-to-read-universal-product-code-upc-barcodes.html



直接上代码:
from PIL import Image

def clean(img):
    A = img.load()
    ss = ''
    for x in xrange(img.size[0]):  
        ss += str(A[x, 10])
    ls = []
    while len(ss) > 0: 
        start = ss[0]
        j = 1
        while j < len(ss) and ss[j] == start :
            j += 1
        ls.append(j)
        ss = ss[j:]           
    return ls

def GetUPC_A(t):
    t = t[4:-4]
    for i in xrange(len(t)):
        t[i] = (t[i] + 1) / 4
    t = t[:24] + t[29:]
    s = ''
    for i in xrange(len(t)):
      s += str(t[i]) 
    upca = ''
    for i in range(0, len(s) / 4):
        n = i * 4
        upca += dic[s[n:n + 4]]     
    print upca

dic = {'3211':'0', '2221':'1', '2122':'2', '1411':'3', '1132':'4', '1231':'5', '1114':'6', '1312':'7', '1213':'8', '3112':'9'}
img = Image.open('780672318862.png')  
GetUPC_A(clean(img))



没有注释,但愿你能看懂!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
赞赏记录
参与人
雪币
留言
时间
飘零丶
为你点赞~
2024-5-31 03:09
shinratensei
为你点赞~
2024-5-31 02:52
PLEBFE
为你点赞~
2023-3-5 04:09
最新回复 (27)
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
前排挤挤  等会练练
2014-7-14 22:14
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
额   条形码是怎么认的啊
2014-7-14 23:19
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
够精炼的,就几行而已。
感谢楼主,等我有机会用你的代码尝试一下能不能再IOS里面尝试你这个功能
2014-7-15 06:43
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
5
前排前排。
2014-7-15 07:10
0
雪    币: 3496
活跃值: (1688)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
楼主能注释注释就更好了 --代码
2014-7-15 22:06
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
求代码注释
2014-7-15 23:03
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享,版区有你更精彩!
2014-7-16 07:49
0
雪    币: 69
活跃值: (167)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
支持 天易
2014-7-16 10:24
0
雪    币: 421
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
表示还看不懂 先MARK一下
2014-7-16 10:52
0
雪    币: 362
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
mark先
2014-7-16 11:06
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你头像是你女朋友?这么漂亮??
2014-7-16 17:01
0
雪    币: 69
活跃值: (167)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
你滴头像是你男盆友, 这么猥琐?  

哈哈!
2014-7-16 18:07
0
雪    币: 329
活跃值: (235)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
14
在《Code》里有专门的介绍~~~
2014-7-16 18:10
0
雪    币: 102
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
真的能肉眼找出规律来?
2014-7-16 22:43
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
2014-7-17 09:17
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
17
老外的文章里讲的很清楚,用眼睛当然能看出来。
2014-7-17 10:54
0
雪    币: 251
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
其实一维条码比较简单,就是黑条和白条两种,条的宽度不一,值也就不一,一般程序里黑用1表示,白用0表示,
根据黑白条,再加上黑条的宽度就知道黑条所代表的值了。
2014-7-17 16:39
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
19
概念完全不对啊,越简单的东西越是有人理解不了,期待有人能解释一下我的算法原理,真没什么难度啊。
2014-7-17 17:18
0
雪    币: 111
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看了下老外的文章,结合天易的图
对照字典,肉眼也能识别了

说下我的理解,前面开始,中间,最后都有两条细黑线夹白线,代表条形码的开始,中间,结束

除了开始结束中间部分,其他白色和黑色条都代表一个数字,用宽度来表示1,2,3,4

例如:第一个数字是7,对于1312的宽度
从开始码往后看,第一个条是白色,宽度为1,第二个条是黑色,宽度为3,第三个条是白色,宽度为1,第四个条是黑色,宽度为2.
其他依此类推
2014-7-18 11:07
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
21
终于科普成功!
2014-7-18 12:14
0
雪    币: 4230
活跃值: (1435)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
22
结合20L,略懂了,条形最宽表示4,以此类推,最窄的表示1

其中:
0 = 3211,        1 = 2221,  2 = 2122,        3 = 1411,  4 = 1132,        5 = 1231,
6 = 1114,        7 = 1312,  8 = 1213,        9 = 3112.

四个一组,开始标识后白黑白黑为一组,所以1312=7, 1213=8, 3211=0……
中间标识过后,黑白黑白四个为一组,所以1411=3, 2221=1, 1213=8……
2014-7-19 11:57
0
雪    币: 37
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
同问肉眼要如何识别出来,才能更好的理解程序
2014-7-19 16:02
0
雪    币: 1278
活跃值: (114)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
24
学习一下一维码原理。
天易牛不如多研究一些视觉算法,给大家多多科普。
2014-7-21 14:52
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这个简单方便。谢谢!
2014-11-6 11:19
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册