# HG changeset patch # User Daniele Nicolodi # Date 1424795019 -3600 # Node ID ad577744dd8e33f8a1ae44630c04ebc9a85b8bcf # Parent ee040846c98f67914c0a551d7e789cc003515f7d Drop dependency on numpy diff -r ee040846c98f -r ad577744dd8e src/bnpparibas.py --- a/src/bnpparibas.py Tue Feb 24 19:30:26 2015 +0100 +++ b/src/bnpparibas.py Tue Feb 24 17:23:39 2015 +0100 @@ -17,7 +17,6 @@ from urllib.parse import urljoin import bs4 -import numpy as np import requests from PIL import Image @@ -93,24 +92,26 @@ def imslice(image): - for x, y in product(range(0, 5), range(0, 5)): - islice = image[27*x+1:27*(x+1), 27*y+1:27*(y+1), 0] - yield islice + for y, x in product(range(0, 5), range(0, 5)): + yield image.crop((27 * x + 1, 27 * y + 1, 27 * (x + 1), 27 * (y + 1))) def imdecode(image): - keypad = np.load(os.path.join(os.path.dirname(__file__), 'keypad.npy')) + # load reference keypad + keypad = Image.open(os.path.join(os.path.dirname(__file__), 'keypad.png')).convert('L') + keypad = [ keypad.crop((26 * i, 0, 26 * (i + 1), 26)) for i in range(10) ] immap = {} - for n, islice in enumerate(imslice(image)): - # skip empty tiles - if np.mean(islice) > 248.0: + for n, tile in enumerate(imslice(image)): + # skip tiles with background only + if tile.getextrema()[0] > 0: continue # compare to reference tiles for d in range(0, 10): - delta = np.sum(islice - keypad[d]) - if delta < 100: - print(delta) + if tile == keypad[d]: immap[d] = n + 1 + break + if sorted(immap.keys()) != list(range(10)): + raise ValueError('keypad decode failed') return immap @@ -155,7 +156,7 @@ break # download keyboard image r = self.req.get(urljoin(self.url, src)) - image = np.array(Image.open(BytesIO(r.content)).convert('RGB')) + image = Image.open(BytesIO(r.content)).convert('L') # decode digits position passwdmap = imdecode(image) diff -r ee040846c98f -r ad577744dd8e src/keypad.npy Binary file src/keypad.npy has changed diff -r ee040846c98f -r ad577744dd8e src/keypad.png Binary file src/keypad.png has changed