python简单图片识别_用Python进行简单的图片识别(1)
起因是这样的,我想买一个定焦镜头,但也不是必需品,可以长期观望购买。最初的想法是,写个程序,每天爬一下各大电商网站的价格,或者直接爬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)相关推荐
- python数字识别_利用Python进行数字识别
思路 通过Python实现KNN算法.而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一 ...
- python 仪表数字识别_利用Python进行数字识别
思路 通过Python实现KNN算法.而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一 ...
- python场景文字识别_针对复杂场景的 OCR 文本识别,推荐一个Python 库!
大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...
- python处理excel案例_使用Python处理Excel表格的简单方法
使用Python处理Excel表格的简单方法 Excel 中的每一个单元,都会有这些属性:颜色(colors).number formatting.字体(fonts).边界(borders).alig ...
- python账单查询软件_利用Python批量识别电子账单数据的方法
这篇文章主要介绍了利用Python批量识别电子账单数据的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一.前言 有一定数量类似如下截图所示的账单,利用 ...
- python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片
我们知道,在使用PhotoShop进行图片的抠取.创建和存储选区.存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是"RGB"通道,它能从三原色角度对一幅图片进行精准处理. ...
- python简单实践作业_【Python】:简单爬虫作业
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
- python名片识别_百度AI攻略:名片识别
1.功能描述: 支持对各类名片的9个关键字段进行结构化识别,包括姓名.公司.职位.邮编.邮箱.电话.网址.地址.手机号.使用名片识别技术,实现对用户名片关键信息的结构化识别和录入,可应用于线下会议.论 ...
- python查重算法_用Python实现通过哈希算法检测图片重复的教程
Iconfinder 是一个图标搜索引擎,为设计师.开发者和其他创意工作者提供精美图标,目前托管超过 34 万枚图标,是全球最大的付费图标库.用户也可以在 Iconfinder 的交易板块上传出售原创 ...
- python写文字方法_初学Python-简单的在图片上加文字
场景 在用户运营中,拉新是第一步.我们产品打算先再小范围试验一下效果,不动用开发哥哥,自己制作邀请海报. 没错,就是最简单的,邀请领奖励活动. UI妹妹把海报模版做出来,邀请码根据用户ID自行填上. ...
最新文章
- python语法基础知识-python基础知识---简单语法
- python爬虫下载-用Python爬虫下载整本小说
- neo4j-admin导入海量数据
- VC程序在没装VC的机器中运行
- Jmeter插件-dubbo
- 在debian上安装vmware tools的问题
- 华为云 AI 实战营计划,带你迈上 AI 之路
- [sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/loading/loading] 将被索引
- 华为将在数据库市场挑战Oracle:5月15日发布云数据库产品
- 正则表达式修正符的学习
- Windows NT 内核基本结构
- 不使用脚手架构建vue项目
- java GUI程序的编写入门
- 宾州州立大学帕克分校计算机科学,宾州州立大学帕克分校排名一览
- c语言方波生成程序,关于C#:在软件上生成方波以进行模拟输入/输出
- Windows的快捷方式、符号链接、目录联接、硬链接的区别
- 网页全终端安防视频流媒体播放器EasyPlayer.js如何实现在web浏览器播放H.265编码视频?
- SAP_BTE增强有两种,类似于校验和替代
- antV使用教程入门
- 基于 Iterative 映射和单纯形法的改进灰狼优化算法-附代码