起因是这样的,我想买一个定焦镜头,但也不是必需品,可以长期观望购买。最初的想法是,写个程序,每天爬一下各大电商网站的价格,或者直接爬etao把该镜头的价格记录下来,突然有一个惊爆的低价,就发邮件通知。这个idea并不难实现,只是懒得做。。。之前我的一些程序也干过类似的事情,比如春节爬打折机票价格什么的。

昨天下午看到一个网站,上面记录了某东的历史数据,我就想把别人的历史数据采集过来看看,自己也练手一下图片识别,我还没用过大名鼎鼎的PIL模块呢。写这系列博客的时候,我还没有完全把图片上的数字识别出来,只是把探索的过程记录一下。

要识别的示例图片如下:

要采集数据的特征:

1、数据是用图片显示的,做成折线图的形式。

2、数据由图片的横坐标和纵坐标组成,横坐标是时间,在坐标轴下,数字的纵坐标是固定的,横坐标不定。另外一个是价格,在折现上方,横坐标和纵坐标位置飘忽不定。

3、数字长度不固定,多少位的都有可能,有的有小数点,有的没有。

4、数据的个数是不定的,有可能是4组,也有可能是七八组。

5、数字还算是干净,不像很多验证码都加早点、扭曲、干扰线什么的。

我也没弄过验证码识别和图片识别,就边搜索边凭着感觉摸着来了:

步骤一:安装PIL

用Python干这活应该是要用PIL对图片进行预处理的,先下载安装一下:http://www.pythonware.com/products/pil/

特别说明一下:如果是Win7 64位操作系统的话,由于Python的安装路径不太一样,需要自行编译源码或者在网上搜一个其他人编译过的给Win7 64位用的PIL才能安装。

步骤二:化繁为简,化整为零

咱先找最简单的练手吧,先把横坐标识别出来。

那么就先用PIL切割图片,示例代码如下(坐标需要调整):

def cutimg(filename):

im = Image.open(filename)

x = 0

y = 209

w = 1000

h = 8

box = (x, y, x+w, y+h)

region = im.crop(box)

outfile = 'tmp1.bmp'

region.save(outfile)

return运行之后,就生成下面的图片了

步骤三:计算有多少组数字

思路:图片中取一条水平线,连续判断这条水平线上像素的颜色。由于每组数字之间有很大的空白作为间距,就判断像素是否是连续有比如50个白像素,如果有超过的话,就认为是有间距了。示例代码如下:

def get_price_num(im):

white = (255, 255, 255)

w, h = im.size

data = list(im.getdata())

char_width = 25

y = h/2

num = 0

whitenum = 0

for x in xrange(w):

if data[ y*w + x ] != white:

if whitenum > 50:

num += 1

whitenum = 0

else:

whitenum += 1

return num+1步骤四:图片分割,并二值化

一口也吃不成胖子,继续简化问题。上面知道了有多少组数字,那么接下来应该就是将这些数字切割下来,以便各个击破。在之前的代码修改了一下,预估每组数字的最大宽度是25,

二值化,就是把值变为0或者255两种。为什么要二值化?这样好识别吧。

用PIL很简单,调用newim.convert("1")就可以二值化了。

def get_price_num(im):

white = (255, 255, 255)

start_point = (0,0)

w, h = im.size

data = list(im.getdata())

char_width = 25

y = 1#h/2

num = 0

whitenum = 0

for x in xrange(w):

if data[ y*w + x ] != white:

if num == 0 or whitenum > 50:

box = (x,0,x+char_width,8)

newim = im.crop(box)

outfile = 'tmp_%d.bmp' % (num)

newim.convert("1").save(outfile)

num += 1

whitenum = 0

else:

whitenum += 1

return num步骤五:把图片中的数字的data打印出来,记录一下,看用什么特征来记录,这部分我昨天是勉强做好了,样本弄得有点少,识别率可能也就70%,我不是很满意。

主要原因:似乎就算是同一个数字,不同位置上特征也不太一样。

我想起了矩阵还有什么行列式什么的,又想到了用一些开源的OCR软件了。

今天继续研究一下该怎么处理好,后面继续博客补充。

python简单图片识别_用Python进行简单的图片识别(1)相关推荐

  1. python数字识别_利用Python进行数字识别

    思路 通过Python实现KNN算法.而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一 ...

  2. python 仪表数字识别_利用Python进行数字识别

    思路 通过Python实现KNN算法.而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一 ...

  3. python场景文字识别_针对复杂场景的 OCR 文本识别,推荐一个Python 库!

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  4. python处理excel案例_使用Python处理Excel表格的简单方法

    使用Python处理Excel表格的简单方法 Excel 中的每一个单元,都会有这些属性:颜色(colors).number formatting.字体(fonts).边界(borders).alig ...

  5. python账单查询软件_利用Python批量识别电子账单数据的方法

    这篇文章主要介绍了利用Python批量识别电子账单数据的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一.前言 有一定数量类似如下截图所示的账单,利用 ...

  6. python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片

    我们知道,在使用PhotoShop进行图片的抠取.创建和存储选区.存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是"RGB"通道,它能从三原色角度对一幅图片进行精准处理. ...

  7. python简单实践作业_【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  8. python名片识别_百度AI攻略:名片识别

    1.功能描述: 支持对各类名片的9个关键字段进行结构化识别,包括姓名.公司.职位.邮编.邮箱.电话.网址.地址.手机号.使用名片识别技术,实现对用户名片关键信息的结构化识别和录入,可应用于线下会议.论 ...

  9. python查重算法_用Python实现通过哈希算法检测图片重复的教程

    Iconfinder 是一个图标搜索引擎,为设计师.开发者和其他创意工作者提供精美图标,目前托管超过 34 万枚图标,是全球最大的付费图标库.用户也可以在 Iconfinder 的交易板块上传出售原创 ...

  10. python写文字方法_初学Python-简单的在图片上加文字

    场景 在用户运营中,拉新是第一步.我们产品打算先再小范围试验一下效果,不动用开发哥哥,自己制作邀请海报. 没错,就是最简单的,邀请领奖励活动. UI妹妹把海报模版做出来,邀请码根据用户ID自行填上. ...

最新文章

  1. python语法基础知识-python基础知识---简单语法
  2. python爬虫下载-用Python爬虫下载整本小说
  3. neo4j-admin导入海量数据
  4. VC程序在没装VC的机器中运行
  5. Jmeter插件-dubbo
  6. 在debian上安装vmware tools的问题
  7. 华为云 AI 实战营计划,带你迈上 AI 之路
  8. [sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/loading/loading] 将被索引
  9. 华为将在数据库市场挑战Oracle:5月15日发布云数据库产品
  10. 正则表达式修正符的学习
  11. Windows NT 内核基本结构
  12. 不使用脚手架构建vue项目
  13. java GUI程序的编写入门
  14. 宾州州立大学帕克分校计算机科学,宾州州立大学帕克分校排名一览
  15. c语言方波生成程序,关于C#:在软件上生成方波以进行模拟输入/输出
  16. Windows的快捷方式、符号链接、目录联接、硬链接的区别
  17. 网页全终端安防视频流媒体播放器EasyPlayer.js如何实现在web浏览器播放H.265编码视频?
  18. SAP_BTE增强有两种,类似于校验和替代
  19. antV使用教程入门
  20. 基于 Iterative 映射和单纯形法的改进灰狼优化算法-附代码

热门文章

  1. ftp的20 21端口和主动被动模式
  2. 深度剖析为何选取相关性系数评价因子
  3. 电脑所有的浏览器都上不了网怎么解决
  4. 微信又更新了,分享几个实用的微信神器
  5. 逐飞K66核心板+逐飞DAP下载器调试方式及接线(SWD)
  6. 常毅 华为计算机,华为路由器交换机配置.docx
  7. python爬取pdf教程_#如何利用Python抓取PDF中的某些内容#python爬取pdf教程
  8. 机器学习神器Scikit-Learn保姆级入门教程
  9. scikit-learn安装步骤
  10. C#调用dll报错:无法加载dll,找不到指定模块