How to use setPreprocessFilter method in fMBT

Best Python code snippet using fMBT_python

eyenfinger.py

Source:eyenfinger.py Github

copy

Full Screen

...38python -c '39from eyenfinger import *40evaluatePreprocessFilter("screenshot.png", "-sharpen 5 -resize 1600x", ["File", "View"])41'42setPreprocessFilter() sets given filter to be used when reading text from images.43Debugging44---------45iClickWord() capture parameter visualises coordinates to be clicked. Example:46python -c '47from eyenfinger import *48setPreprocessFilter("-sharpen 5 -filter Mitchell -resize 1600x -level 40%,50%,3.0")49iRead(source="screenshot.png")50iClickWord("[initial", clickPos=(-2,3), capture="highlight.png", dryRun=True)51'52"""53import distutils.sysconfig54import time55import subprocess56import re57import math58import htmlentitydefs59import sys60import os61import tempfile62import atexit63import shlex64import shutil65import ctypes66import platform67import struct68import warnings69import fmbt_config70def _DEPRECATED():71 warnings.warn("eyenfinger.py API is deprecated, use fmbtx11 instead.",72 DeprecationWarning, stacklevel=2)73_g_preprocess = "-sharpen 5 -filter Mitchell -resize 1920x1600 -level 40%%,70%%,5.0 -sharpen 5"74_g_readImage = None75_g_origImage = None76_g_hocr = ""77_g_words = None78_g_lastWindow = None79_g_defaultClickDryRun = False80_g_defaultDelayedDrawing = False81_g_defaultIconMatch = 1.082_g_defaultIconColorMatch = 1.083_g_defaultIconOpacityLimit = 0.084_g_defaultInputKeyDevice = None85_g_defaultReadWithOCR = True86# windowsOffsets maps window-id to (x, y) pair.87_g_windowOffsets = {None: (0,0)}88# windowsSizes maps window-id to (width, height) pair.89_g_windowSizes = {None: (0,0)}90# screenSize is a (width, height) pair.91_g_screenSize = (0, 0)92_g_tempdir = tempfile.mkdtemp(prefix="eyenfinger.%s." % (os.getpid(),))93SCREENSHOT_FILENAME = _g_tempdir + "/screenshot.png"94LOG_FILENAME = _g_tempdir + "/eyenfinger.log"95MOUSEEVENT_MOVE, MOUSEEVENT_CLICK, MOUSEEVENT_DOWN, MOUSEEVENT_UP = range(4)96# Xkeys contains key names known to X11, see keysymdef.h.97Xkeys = [98 "BackSpace", "Tab", "Linefeed", "Clear", "Return", "Pause",99 "Scroll_Lock", "Sys_Req", "Escape", "Delete", "Home", "Left",100 "Up", "Right", "Down", "Prior", "Page_Up", "Next", "Page_Down",101 "End", "Begin", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8",102 "F9", "F10", "F11", "F12", "Shift_L", "Shift_R", "Control_L",103 "Control_R", "Caps_Lock", "Shift_Lock", "Meta_L", "Meta_R",104 "Alt_L", "Alt_R", "space", "exclam", "quotedbl", "numbersign",105 "dollar", "percent", "ampersand", "apostrophe", "quoteright",106 "parenleft", "parenright", "asterisk", "plus", "comma", "minus",107 "period", "slash", "0", "1", "2", "3", "4", "5", "6", "7", "8",108 "9", "colon", "semicolon", "less", "equal", "greater", "question",109 "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",110 "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y",111 "Z", "bracketleft", "backslash", "bracketright", "asciicircum",112 "underscore", "grave", "quoteleft", "a", "b", "c", "d", "e", "f",113 "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",114 "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar",115 "braceright"]116# InputKeys contains key names known to input devices, see117# linux/input.h or http://www.usb.org/developers/hidpage. The order is118# significant, because keyCode = InputKeys.index(keyName).119InputKeys = [120 "RESERVED", "ESC","1", "2", "3", "4", "5", "6", "7", "8", "9", "0",121 "MINUS", "EQUAL", "BACKSPACE", "TAB",122 "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",123 "LEFTBRACE", "RIGHTBRACE", "ENTER", "LEFTCTRL",124 "A", "S", "D", "F", "G", "H", "J", "K", "L",125 "SEMICOLON", "APOSTROPHE", "GRAVE", "LEFTSHIFT", "BACKSLASH",126 "Z", "X", "C", "V", "B", "N", "M",127 "COMMA", "DOT", "SLASH", "RIGHTSHIFT", "KPASTERISK", "LEFTALT",128 "SPACE", "CAPSLOCK",129 "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",130 "NUMLOCK", "SCROLLLOCK",131 "KP7", "KP8", "KP9", "KPMINUS",132 "KP4", "KP5", "KP6", "KPPLUS",133 "KP1", "KP2", "KP3", "KP0", "KPDOT",134 "undefined0",135 "ZENKAKUHANKAKU", "102ND", "F11", "F12", "RO",136 "KATAKANA", "HIRAGANA", "HENKAN", "KATAKANAHIRAGANA", "MUHENKAN",137 "KPJPCOMMA", "KPENTER", "RIGHTCTRL", "KPSLASH", "SYSRQ", "RIGHTALT",138 "LINEFEED", "HOME", "UP", "PAGEUP", "LEFT", "RIGHT", "END", "DOWN",139 "PAGEDOWN", "INSERT", "DELETE", "MACRO",140 "MUTE", "VOLUMEDOWN", "VOLUMEUP",141 "POWER",142 "KPEQUAL", "KPPLUSMINUS", "PAUSE", "SCALE", "KPCOMMA", "HANGEUL",143 "HANGUEL", "HANJA", "YEN", "LEFTMETA", "RIGHTMETA", "COMPOSE"]144_inputKeyShorthands = {145 "-": "MINUS", "=": "EQUAL",146 "[": "LEFTBRACE", "]": "RIGHTBRACE", "\n": "ENTER",147 ";": "SEMICOLON",148 ",": "COMMA", ".": "DOT", "/": "SLASH",149 " ": "SPACE" }150class EyenfingerError(Exception):151 pass152class BadMatch (EyenfingerError):153 pass154class BadWindowName (EyenfingerError):155 pass156class BadSourceImage(EyenfingerError):157 pass158class BadIconImage(EyenfingerError):159 pass160class NoOCRResults(EyenfingerError):161 pass162try:163 import fmbt164 def _log(msg):165 fmbt.adapterlog("eyenfinger: %s" % (msg,))166except ImportError:167 def _log(msg):168 file(LOG_FILENAME, "a").write("%13.2f %s\n" %169 (time.time(), msg))170try:171 _libpath = ["", ".",172 os.path.dirname(os.path.abspath(__file__)),173 distutils.sysconfig.get_python_lib(plat_specific=1)]174 _suffix = ".so"175 if os.name == "nt":176 _suffix = ".dll"177 for _dirname in _libpath:178 try:179 eye4graphics = ctypes.CDLL(os.path.join(_dirname , "eye4graphics"+_suffix))180 break181 except: pass182 else:183 raise ImportError("%s cannot load eye4graphics%s" % (__file__, _suffix))184 class Bbox(ctypes.Structure):185 _fields_ = [("left", ctypes.c_int32),186 ("top", ctypes.c_int32),187 ("right", ctypes.c_int32),188 ("bottom", ctypes.c_int32),189 ("error", ctypes.c_int32)]190except Exception, e:191 Bbox = None192 eye4graphics = None193 _log('Loading icon recognition library failed: "%s".' % (e,))194# See struct input_event in /usr/include/linux/input.h195if platform.architecture()[0] == "32bit":196 _InputEventStructSpec = 'IIHHi'197else:198 _InputEventStructSpec = 'QQHHi'199# Event and keycodes are in input.h, too.200_EV_KEY = 0x01201# _inputKeyNameCodeMap is a dictionary keyName -> keyCode202_inputKeyNameCodeMap = {}203for code, name in enumerate(InputKeys):204 _inputKeyNameCodeMap[name] = code205def _inputKeyNameToCode(keyName):206 if keyName in _inputKeyNameCodeMap:207 return _inputKeyNameCodeMap[keyName]208 elif keyName in _inputKeyShorthands:209 return _inputKeyNameCodeMap[_inputKeyShorthands[keyName]]210 else:211 raise ValueError('Invalid key name "%s"' % (keyName,))212def error(msg, exitstatus=1):213 sys.stderr.write("eyenfinger: %s\n" % (msg,))214 sys.exit(1)215def printEventsFromFile(filename):216 fd = os.open(filename, os.O_RDONLY)217 try:218 while 1:219 evString = os.read(fd, struct.calcsize(_InputEventStructSpec))220 if not evString: break221 tim, tus, typ, cod, val = struct.unpack(_InputEventStructSpec, evString)222 if cod < len(InputKeys):223 nam = InputKeys[cod]224 else:225 nam = "N/A"226 print "time: %8s, susc: %8s, type: %8s, keyCode: %5s name: %10s value: %8s" % \227 (tim, tus, typ, cod, nam, val)228 finally:229 os.close(fd)230def printEventsFromDevice(deviceName):231 devices = dict(_listInputDevices())232 if not deviceName in devices:233 error('Unknown device "%s". Available devices: %s' %234 (deviceName, sorted(devices.keys())))235 else:236 printEventsFromFile(devices[deviceName])237def _exitHandler():238 shutil.rmtree(_g_tempdir, ignore_errors=True)239atexit.register(_exitHandler)240def _runcmd(cmd):241 global _g_last_runcmd_error242 p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),243 stdout=subprocess.PIPE, stderr=subprocess.PIPE)244 output = p.stdout.read()245 exit_status = p.wait()246 _g_last_runcmd_error = p.stderr.read()247 if exit_status != 0:248 _log("runcmd: %s" % (cmd,))249 _log("exit status: " + str(exit_status))250 _log("stdout: " + output)251 _log("stderr: " + _g_last_runcmd_error)252 else:253 p.stderr.read()254 return exit_status, output255def _runDrawCmd(inputfilename, cmd, outputfilename):256 if not _g_defaultDelayedDrawing:257 return _runcmd([fmbt_config.imagemagick_convert,258 inputfilename] + cmd + [outputfilename])259 # Do delayed drawing to save test execution time. If the output260 # file does not exist, just copy inputfile to outputfile and start261 # logging delayed draw commands to262 # outputfile.delayeddraw. Otherwise append latest command to263 # outputfile.delayeddraw.264 delayedCmd = '%s "%s" "%s" "%s"\n' % (265 fmbt_config.imagemagick_convert,266 outputfilename, '%s' % ('" "'.join(cmd)), outputfilename)267 delayedDrawFilename = outputfilename + ".delayeddraw"268 try:269 if os.access(outputfilename, os.R_OK) == False:270 shutil.copy(inputfilename, outputfilename)271 file(delayedDrawFilename, "w").write(delayedCmd)272 else:273 file(delayedDrawFilename, "a").write(delayedCmd)274 except:275 _log("error on delayed drawing: %s" % (delayedCmd,))276 raise277 _log("delayed drawing: %s" % (delayedCmd,))278 return (0, "")279def _safeForShell(s):280 # convert all non-ascii and bad chars to _281 try: s = unicode(s, "utf-8")282 except: pass283 return ''.join([(c, "_")[ord(c)>128 or c in "'\"\\`"] for c in s])284def _coordsToInt((x,y), (width, height)=(None, None)):285 """286 Convert percentages to screen coordinates287 """288 if (width == None or height == None):289 width, height = screenSize()290 if 0.0 <= x <= 1.0 and type(x) == float:291 x = int(round(x * width))292 else:293 x = int(x)294 if 0.0 <= y <= 1.0 and type(y) == float:295 y = int(round(y * height))296 else:297 y = int(y)298 return (x, y)299def setPreprocessFilter(preprocess):300 global _g_preprocess301 _g_preprocess = preprocess302def iSetDefaultClickDryRun(dryRun):303 """304 Set the default value for optional dryRun parameter for iClick*305 functions.306 """307 global _g_defaultClickDryRun308 _g_defaultClickDryRun = dryRun309def iSetDefaultDelayedDrawing(delayedDrawing):310 """311 Set the default for delaying drawing operations on captured312 screenshots.313 If delayedDrawing == False, drawing actions on screenshots (like...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run fMBT automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful