简单的python (orc)图片识别(识别京东价格图片)
2012-12-12 13:03
323 查看
简单的python (orc)图片识别(识别京东价格图片) - fc_lamp的日志 - 网易博客
网上有很多关于python orc 图片识别技术的文章,我这里只是简单的一个例事。原理就是用创建的图像特征库去作对比(方法很笨)。
其它的我就不多说了,不过在开始前你可能先得看一下这两篇文章:
http://fc-lamp.blog.163.com/blog/static/174566687201282424018946/
http://fc-lamp.blog.163.com/blog/static/1745666872011626510810/
好了,下面的例子是简单的识别京东(360buy)的价格图片。注意的是:由于只是简单的处理,所以小数部分我是没有去做处理的,还有一点是可能部分图片不能正常的识别出来(有时间再修整吧,全当工作备忘录)。
我直接贴上代码:
简单的python (orc)图片识别(识别京东价格图片)
2012-12-11 23:27:51| 分类: Web技术-Python | 标签: |字号大中小 订阅网上有很多关于python orc 图片识别技术的文章,我这里只是简单的一个例事。原理就是用创建的图像特征库去作对比(方法很笨)。
其它的我就不多说了,不过在开始前你可能先得看一下这两篇文章:
http://fc-lamp.blog.163.com/blog/static/174566687201282424018946/
http://fc-lamp.blog.163.com/blog/static/1745666872011626510810/
好了,下面的例子是简单的识别京东(360buy)的价格图片。注意的是:由于只是简单的处理,所以小数部分我是没有去做处理的,还有一点是可能部分图片不能正常的识别出来(有时间再修整吧,全当工作备忘录)。
我直接贴上代码:
#coding:utf-8 ''' @author:fc_lamp @blog:fc-lamp.blog.163.com ''' import urllib2 import Image as image import socket socket.setdefaulttimeout(60) class Price360buy(): ''' 分析出360图片价格 ''' def __init__(self): self.flags_array = {} self.frist_w = 14 self.last_w = 31 self.pixel_f = 246 self.crop_h =20 self.pic_pr = ['png','jpeg','jpg'] def FlagToImg(self,path): ''' 创建特征库(一点点对比图片) ''' j=0 #下载所有包含0-9的图片,然后在本地处理 for img in os.listdir(path): if img.split('.')[-1] not in self.pic_pr: continue im = image.open('%s%s'%(path,img)) o_w,o_h = im.size #只留数字(从x:14,y:0开始切,切到xx,yy) #截去Y与小数部分 frist_w = self.frist_w last_w = self.last_w box = (frist_w,0,o_w-last_w,self.crop_h) gray_img = im.crop(box) #gray_img.show() #new_img = path+'test_'+img.split('\/')[-1] #gray_img.save(new_img) gray_img = gray_img.convert('1') #gray_img.show() #exit() #分割出每个数字 width,height = gray_img.size w=0 while w<width: column = [] for h in range(height): column.append(gray_img.getpixel((w,h))) #print column if sum(column) / height < self.pixel_f: box = (w,0,w+9,self.crop_h) region = gray_img.crop(box) region.save('%s%s.png'%(path,str(w)+'_'+str(j))) w+=10 else: w=w+1 j+=1 def FlagTotxt(self,path): ''' 将所有特征0-9图片保存为文本 ''' for img in os.listdir(path): if img.split('.')[-1] not in self.pic_pr: continue im = image.open('%s%s'%(path,img)) pre = img.split('.')[0] width,height = im.size h =0 f_path = '%s%s.txt'%(path,pre) with open(f_path,'a') as ff: while h<height: col ='' for w in xrange(width): piexl = im.getpixel((w,h)) if piexl < self.pixel_f: col+='0' else: col+='1' ff.write('%s\n'%(col)) h+=1 def FlagToArray(self,path): ''' 将所有特征0-9图片写入内存 ''' for img in os.listdir(path): if img.split('.')[-1] not in self.pic_pr: continue im = image.open('%s%s'%(path,img)) pre = int(img.split('.')[0]) self.flags_array[pre] = [] width,height = im.size h =0 while h<height: col = [] for w in xrange(width): piexl = im.getpixel((w,h)) if piexl < self.pixel_f: col.append(0) else: col.append(1) self.flags_array[pre].append(col) h+=1 def parse(self,img_url): ''' 分析对比图片 ''' try: im = urllib2.urlopen(img_url).read() im =image.open(StringIO.StringIO(im)) #im =image.open(img_url) except Exception as e: return str(e) o_w,o_h = im.size #截去Y与小数部分 frist_w = self.frist_w last_w = self.last_w box = (frist_w,0,o_w-last_w,self.crop_h) gray_img = im.crop(box) gray_img = gray_img.convert('1') #gray_img.show() #exit() #分割出每个数字 width,height = gray_img.size w=0 return_num = '' while w<width: column = [] for h in range(height): column.append(gray_img.getpixel((w,h))) #print column if sum(column) / height < self.pixel_f: box = (w,0,w+9,self.crop_h) number_img = gray_img.crop(box) #number_img.show() #number_img.save('%s%s.png'%(os.getcwd(),'/'+str(w))) #exit() #分析每一个数字 num_w,num_h = number_img.size n_h =0 num_array = [] while n_h < num_h: #获取每个数字的像素行 num_col = [] for n_w in xrange(num_w): piexl = number_img.getpixel((n_w,n_h)) if piexl < self.pixel_f: num_col.append(0) else: num_col.append(1) num_array.append(num_col) n_h+=1 #print num_array #exit() #特证对比,返回数字 return_num += str(self._get_num(num_array)) w+=10 else: w=w+1 return return_num def _get_num(self,pixels): ''' 特征对比找出数字 ''' #分别去对比每一个特证数字 for num in xrange(10): pixels_orc = self.flags_array[num] p_l = len(pixels) if p_l != len(pixels_orc): return '?' #获取一行像素点 yes =0 for i in xrange(p_l): if pixels[i]==pixels_orc[i]: yes+=1 #print p_l #print yes if yes >= p_l-1: return num return '?'
if __name__=='__main__': price_url = 'http://jprice.360buyimg.com/price/gp740746-1-1-3.png' s = Price360buy() #先下载包含0-9的数字的价格 #生成特征图像 (os.getcwd()当前工作目录) #s.FlagToImg('%s%s'%(os.getcwd(),'/orc_lib/')) #生成可视化的文本 #print s.FlagTotxt('%s%s'%(os.getcwd(),'/orc_lib/')) #写入内存 s.FlagToArray('%s%s'%(os.getcwd(),'/orc_lib/')) #print s.flags_array[0] #分析图片,获取出数字 #price_url = os.getcwd()+'/109.png' print s.parse(price_url) #输出 598orc_lib目录里的特征图片像这样的:
相关文章推荐
- Python3.x学习笔记[1]:2种简单爬虫获取京东价格
- 京东采集器100元、求安慰(京东产品、评价(好评、中评、差评)、价格(参考价、京东价)、图片(大图、小图)、图片识别、广告语)
- 200 行 Python 代码实现简单图片人像识别换脸
- 【开发日记】马桶识别之数据收集,通过Python抓取京东评论图片
- Python 代码实现简单图片人像识别换脸 https://blog.csdn.net/B9Q8e64lO6mm/article/details/79683511
- python自动识别简单图片中的文字
- python图片文本识别的简单实现
- 京东商品价格图片识别源码改进版
- 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片
- python图片文本识别的简单实现
- 【Python】Python简单的图片识别
- 用python简单处理图片(1):打开\显示\保存图像
- [置顶] python3爬虫爬取网页图片简单示例
- 用python简单处理图片(4):图像中的像素访问
- Python 3 色情图片识别
- python爬取京东笔记本标题、品牌、价格、评论数
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 全球购 颂拓SUUNTO手表AMBIT3拓野3户外运动石英男表巅峰系列 巅峰蓝宝石心率 SS020673000【图片 价格 品牌 报价】-京东
- Python人工智能之图片转文字识别
- 用python简单处理图片(1):打开\显示\保存图像