您好,匿名用户
随意问技术百科期待您的加入

把京东的图片价格转成数字你们有什么解决方案?

0 投票

把京东的图片价格转成数字,你们有什么解决方案?(linux 环境下)

用户头像 提问 2014年 3月4日 @ 正能量 上等兵 (297 威望)
分享到:

1个回答

0 投票

这个很容易啦……

京东价格图片的脆弱之处

1. 图片文字没有变形没有干扰
2. 数字是等宽字体,宽度11……只有小数点略小一些,宽度4,实际占用像素是2*3的小方块
3. 背景是纯白的很干净……

演示代码

因为很简单,识别起来很容易,基本用不着tesseract库。我花了1个小时写了一个python脚本来识别商品详情页高度为22像素的价格图片,随便写的,有很多magic number,仅供演示思路……

jdprice.py

#!/usr/bin/env python
#coding: utf8
from PIL import Image
import sys
from hashlib import md5

#最简单的特征库
dic = {
    '260e95e3844b2ef81f3ad2fa47b6d49d' : '0',
    '51c5d4ffad5f8e5891bf23f6d6709255' : '1',
    '429f85b1c5871d7e8fc98f5333b89b28' : '2',
    '345fc6453d0d7f08309812fe57a0e599' : '3',
    '201ff8418d9f1480476f7a0dc4db6db1' : '4',
    '7d6bd9160b95ab98b2b867cb33e1569b' : '5',
    '1a96218bd4f0c30e0b86850929297172' : '6',
    'e85124056a0f8c7eb77755a6f6c5296e' : '7',
    'ab4da42aa7dc51ac885e800248dd0c64' : '8',
    '658dae198ed91b24695986bc07e37ef6' : '9',
    '01eb55510763ce019186d126a8080d52' : '.',
     }

im = Image.open(sys.argv[1])
#截掉最左的人民币符号
im = im.crop((15, 0, im.size[0], im.size[1]))

#把背景从白变黑方便使用Image.getbbox
im = Image.eval(im, lambda x: x if x != 255 else 0)
ims = []
x = 0
while x < im.getbbox()[2]:
    #尝试切出小数点
    img = im.crop((x, 0, x + 4, im.size[1]))
    x0, y0, x1, y1 = img.getbbox()
    if y1 - y0 != 3 or x1 - x0 != 2:
        #红色区域太大,不是小数点
        img = im.crop((x, 0, x + 11, im.size[1]))
        x += 11
    else:
        x += 4
    ims.append(img.crop(img.getbbox()))

#调试用,输出切出来的各个字符    
#[ims[i].save('%d.png' % i) for i in range(len(ims))]

#输出结果,如果无法识别(特征库里找不到图片内容的md5值),则返回其内容的md5值
print ''.join([dic.get(md5(img.tostring()).hexdigest(), '?' + md5(img.tostring()).hexdigest() + '?') for img in ims])

用法:
1. 安装PIL库 pip install pil 或者 easy_install pil
2. 从京东抓一个图片,比如 wget http://jprice.360buyimg.com/price/gp799754-1-1-3.png, 原页面地址http://www.360buy.com/product/799754....
3. 执行 python jdprice.py gp799754-1-1-3.png,得到结果 1259.00

总结

1. 以前京东的价格图片上还有灰色的斜线,估计是容易让顾客误解,所以现在也去掉了……
2. 除去特征库和注释部分,python脚本一共写了18行……其实因为位置都很固定,完全可以不去黑边直接比对,代码还可以再短3~5行……
3. PIL 真t*d好用!!!!

用户头像 回复 2014年 3月1日 @ Garen 上等兵 (269 威望)
提一个问题:

相关问题

0 投票
1 回复 27 阅读
0 投票
1 回复 68 阅读
用户头像 提问 2012年 12月1日 @ Nautilus 上等兵 (223 威望)
0 投票
1 回复 35 阅读
用户头像 提问 2012年 12月1日 @ Capricorn 上等兵 (188 威望)
0 投票
1 回复 31 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...