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

截取图形验证码:

 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
时间: 2024-11-13 04:52:46

Python OCR提取普通数字图形验证中的数字的相关文章

C# 使用正则表达式去掉字符串中的数字

C# 使用正则表达式去掉字符串中的数字 // 去掉字符串中的数字public static string RemoveNumber(string key){    return System.Text.RegularExpressions.Regex.Replace(key, @"\d", "");} // 去掉字符串中的非数字public static string RemoveNotNumber(string key){    return System.Tex

(转)取字符串中所有数字

c# 获取字符串中的数字 /// /// 获取字符串中的数字 /// /// 字符串 /// 数字 例子1: public static decimal GetNumber(string str) {     decimal result = 0;     if (str != null && str != string.Empty)    { // 正则表达式剔除非数字字符(不包含小数点.)     str = Regex.Replace(str, @"[^\d.\d]&quo

python(15)提取字符串中的数字

python 提取一段字符串中去数字 ss = “123ab45” 方法一:filter filter(str.isdigit, ss) 别处copy的filter的用法: # one>>> filter(str.isdigit, '123ab45')'12345' #twodef not_empty(s): return s and s.strip() filter(not_empty, ['A', '', 'B', None, 'C', ' ']) # 结果: ['A', 'B',

delphi 提取字符中的数字

Function Setstring(cString:string):string;   {提取数字} VAr   i:integer;   str:string;  begin    str:='';      For i:=1 to length(cString) do          begin           if Pos(cString[i],'0123456789.')<=0 then             break           else            Ca

Excel中如何提取字符串中的数字

取字符串中的数字,假如数据在A列,提取公式为 =LOOKUP(9^9,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&5^19)),ROW($1:$99)))   如果字符串中只有汉字和数字,提取公式为 =MIDB(A1,SEARCHB("?",A1),2*LEN(A1)-LENB(A1))   还有一个强大的VLOOKUP函数,在此标记.

使用awk提取字符串中的数字或字母

1.提取字符串中的数字 $ echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F "" ' {   for(i=1;i<=NF;i++)    {       if ($i ~ /[[:digit:]]/)          {       str=$i       str1=(str1 str)     }     }    print str1 }' 输出 3458 或 $ echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F &q

python处理字符串:将字符串中的数字相加求和

计算字符串中所有数字的和,字符串中有数字和字母组合而成如果出现连续数字,按照一个数操作具体解释在代码行里: def sum_str(str1): len1=len(str1) #首先将字符串str1的长度赋值给len1 sum = n = 0 #建立一个值为0的空变量sun #建立一个值为0的空变量n for i in range(len1): #用i来遍历字符串的长度 if 49 <= ord(str1[i]) <= 57: #判断字符ascii码是否在数字ascii值范围内 n = n *

Python(66)_判断用户传入的参数str中计算数字,字母,空格,以及其他的个数,并返回结果

#-*-coding:utf-8-*- ''' 写函数,判断用户传入的参数str中计算数字,字母,空格,以及其他的个数,并返回结果 ''' content = input('>>>') def func(s): num = 0 alpha = 0 space = 0 others = 0 dic ={ 'num':0, 'alpha':0, 'space':0, 'other':0 } for i in s: if i.isdigit(): dic['num'] +=1 elif i.i

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可