zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
    android 网络异步加载数据进度条
    在WebView中加载HTML页面时显示进度对话框的方法
    Java基础知识总结之IO流
    计算机网络之网络协议
    Java中hashCode的作用
    一篇很好的学习查看Java源代码的文章
    JavaScript 客户端JavaScript之 脚本化文档
    JavaScript 超类与子类 继承
    JavaScript 类、构造函数、原型
  • 原文地址:https://www.cnblogs.com/linkxu1989/p/6655581.html
Copyright © 2011-2022 走看看