Skip to content

Instantly share code, notes, and snippets.

@vickyg3
Created August 8, 2011 18:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vickyg3/1132375 to your computer and use it in GitHub Desktop.
Save vickyg3/1132375 to your computer and use it in GitHub Desktop.
Hacking Math Workout with OCR
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
import os
import time
import math
import re
def getx(n):
if n in ('1', '4', '7'):
return 50
elif n in ('2', '5', '8', '0'):
return 100
else:
return 200
def gety(n):
if n in ('1', '2', '3'):
return 150
elif n in ('4', '5', '6'):
return 200
elif n in ('7', '8', '9'):
return 250
else:
return 300
sqrt = re.compile(r'([0-9]+)')
percent = re.compile(r'([0-9]+)\%0f([0-9]+)')
print "Waiting for device!"
device = MonkeyRunner.waitForConnection()
print "Connected to device!"
dummy = raw_input('press enter to start')
prev_question = ''
for i in range(300):
filename = "%d.png" % i
device.takeSnapshot().getSubImage((10, 10, 220, 40)).writeToFile(filename, 'png')
question = os.popen("./ocr.sh %s" % filename).read()
try:
if '+' not in question and '-' not in question and '/' not in question and '*' not in question and '%' not in question and 'i' not in question:
result = int(question[0:-1]) * int(question[0:-1])
elif '%' in question:
result = int(percent.search(question).group(1)) * int(percent.search(question).group(2)) / 100;
else:
result = eval(question)
except:
continue
if i > 0 and prev_question == question:
continue
print "%s = %d" % (question, result)
result_str = str(result)
if '.' in question and '.' not in result_str:
result_str += '.0'
if 'm' in question:
result_str = sqrt.search(result_str).group(1)
time.sleep(0.1)
for ch in result_str:
device.touch(getx(ch), gety(ch), 'DOWN_AND_UP')
time.sleep(0.1)
prev_question = question
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment