码迷,mamicode.com
首页 > 编程语言 > 详细

Python OCR提取普通数字图形验证中的数字

时间:2017-04-01 13:19:28      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:sam   reduce   截取   定位   load   operator   ted   new   art   

截取图形验证码:

 1 # -*- coding: UTF-8 -*- 
 2 ‘‘‘
 3 Created on 2016年7月4日
 4 
 5 @author: xuxianglin
 6 ‘‘‘
 7 import os
 8 import tempfile
 9 import shutil
10 
11 from PIL import Image
12 
13 PATH = lambda p: os.path.abspath(p)
14 TEMP_FILE = PATH(tempfile.gettempdir() + "/temp_screen.png")
15 
16 class Appium_Extend(object):
17     def __init__(self, driver):
18         self.driver = driver
19 
20     def get_screenshot_by_element(self, element):
21         #先截取整个屏幕,存储至系统临时目录下
22         self.driver.get_screenshot_as_file(TEMP_FILE)
23 
24         #获取元素bounds
25         location = element.location
26         size = element.size
27         box = (location["x"], location["y"], location["x"] + size["width"], location["y"] + size["height"])
28 
29         #截取图片
30         image = Image.open(TEMP_FILE)
31         newImage = image.crop(box)
32         newImage.save(TEMP_FILE)
33 
34         return self
35 
36     def get_screenshot_by_custom_size(self, start_x, start_y, end_x, end_y):
37         #自定义截取范围
38         self.driver.get_screenshot_as_file(TEMP_FILE)
39         box = (start_x, start_y, end_x, end_y)
40 
41         image = Image.open(TEMP_FILE)
42         newImage = image.crop(box)
43         newImage.save(TEMP_FILE)
44 
45         return self
46 
47     def write_to_file( self, dirPath, imageName, form = "png"):
48         #将截屏文件复制到指定目录下
49         if not os.path.isdir(dirPath):
50             os.makedirs(dirPath)
51         shutil.copyfile(TEMP_FILE, PATH(dirPath + "/" + imageName + "." + form))
52 
53     def load_image(self, image_path):
54         #加载目标图片供对比用
55         if os.path.isfile(image_path):
56             load = Image.open(image_path)
57             return load
58         else:
59             raise Exception("%s is not exist" %image_path)
60 
61     def same_as(self, load_image, percent):
62         #对比图片,percent值设为0,则100%相似时返回True,设置的值越大,相差越大
63         import math
64         import operator
65 
66         image1 = Image.open(TEMP_FILE)
67         image2 = load_image
68 
69         histogram1 = image1.histogram()
70         histogram2 = image2.histogram()
71 
72         differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, 73                                                          histogram1, histogram2)))/len(histogram1))
74         if differ <= percent:
75             return True
76         else:
77             return False

在定位元素中调用改方法:

1   vcode=self.driver.find_element_by_id("com.ajb.sp:id/changepsw_code_img")
2   self.extend.get_screenshot_by_element(vcode).write_to_file("..\\resource\\vcode\\","image")
3   self.assertTrue(os.path.isfile(..\\resource\\vcode\\image.png))
4   image=Image.open(..\\resource\\vcode\\image.png)
5   vcode_number=pytesseract.image_to_string(image)
6   print u"截取到的验证码为:%s"%vcode_number

 

Python OCR提取普通数字图形验证中的数字

标签:sam   reduce   截取   定位   load   operator   ted   new   art   

原文地址:http://www.cnblogs.com/linkxu1989/p/6655581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!