扫码关注官方订阅号
把京东的图片价格转成数字,你们有什么解决方案?(linux 环境下)
欢迎选择我的课程,让我们一起见证您的进步~~
这个很容易啦……
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
pip install pil
easy_install pil
wget http://jprice.360buyimg.com/price/gp799754-1-1-3.png
python jdprice.py gp799754-1-1-3.png
1. 以前京东的价格图片上还有灰色的斜线,估计是容易让顾客误解,所以现在也去掉了…… 2. 除去特征库和注释部分,python脚本一共写了18行……其实因为位置都很固定,完全可以不去黑边直接比对,代码还可以再短3~5行…… 3. PIL 真t*d好用!!!!
图像识别?
机器学习+模式识别吧
比较好的方法就是抓取价格图片,然后用图像识别,京东的价格图片是非常容易识别的,可以参考这个开源OCR项目:
http://code.google.com/p/tesseract-oc...
你仔细找,其实还有非图片的价格。。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这个很容易啦……
京东价格图片的脆弱之处
1. 图片文字没有变形没有干扰
2. 数字是等宽字体,宽度11……只有小数点略小一些,宽度4,实际占用像素是2*3的小方块
3. 背景是纯白的很干净……
演示代码
因为很简单,识别起来很容易,基本用不着tesseract库。我花了1个小时写了一个python脚本来识别商品详情页高度为22像素的价格图片,随便写的,有很多magic number,仅供演示思路……
jdprice.py
用法:
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好用!!!!
图像识别?
机器学习+模式识别吧
比较好的方法就是抓取价格图片,然后用图像识别,京东的价格图片是非常容易识别的,可以参考这个开源OCR项目:
http://code.google.com/p/tesseract-oc...
你仔细找,其实还有非图片的价格。。