Skip to content

Instantly share code, notes, and snippets.

View fabito's full-sized avatar
🐮
Working from home

Fábio Franco Uechi fabito

🐮
Working from home
View GitHub Profile
@fabito
fabito / initialize.py
Created August 22, 2018 02:39
neyboy game - initialize
async def initialize(self):
self.browser = await launch(headless=self.headless)
self.page = await self.browser.newPage()
await self.page.goto(self.game_url, {'waitUntil': 'networkidle2'})
envjs_path = pathlib.Path(__file__).resolve().parent.joinpath('env.js')
await self.page.addScriptTag(dict(path=str(envjs_path)))
await self.is_ready()
@fabito
fabito / sync_game.py
Created August 22, 2018 02:34
neyboy game - SyncGame
from syncer import sync
class SyncGame:
def __init__(self, game: Game):
self.game = game
def __getattr__(self, attr):
return sync(getattr(self.game, attr))
@fabito
fabito / get_state.py
Created August 22, 2018 02:31
neyboy game - get_state method
async def get_state(self):
state = await self.page.evaluate('''(includeSnapshot, format, quality) => {
return neyboyChallenge.state(includeSnapshot, format, quality);
}''', True, 'image/jpeg', 30)
base64_string = state['snapshot']
base64_string = re.sub('^data:image/.+;base64,', '', base64_string)
imgdata = base64.b64decode(base64_string)
bytes_io = io.BytesIO(imgdata)
image = Image.open(bytes_io)
state['snapshot'] = np.array(image)
@fabito
fabito / tap.py
Created August 22, 2018 02:27
neyboy game - tap methods
async def tap_left(self, delay=0):
x = self.x + self.width // 4
y = self.y + self.height // 3
await self.page.mouse.click(x, y, {'delay': delay})
async def tap_right(self, delay=0):
x = (self.x + self.width) - self.width // 4
y = self.y + self.height // 3
await self.page.mouse.click(x, y, {'delay': delay})
@fabito
fabito / __init__.py
Created August 22, 2018 02:14
neyboy_env - constructor
def __init__(self):
headless = os.environ.get('GYM_NEYBOY_ENV_NON_HEADLESS', None) is None
self.game = SyncGame.create(headless=headless)
self.state = self.game.get_state()
self.viewer = None
self.observation_space = spaces.Box(low=0, high=255, shape=self.state.snapshot.shape, dtype=np.uint8)
self.action_space = spaces.Discrete(3)
@fabito
fabito / render.py
Created August 22, 2018 02:09
neyboy_env - render method
def render(self, mode='human', close=False):
img = self.state.snapshot
if mode == 'rgb_array':
return img
elif mode == 'human':
from gym.envs.classic_control import rendering
if self.viewer is None:
self.viewer = rendering.SimpleImageViewer()
self.viewer.imshow(img)
return self.viewer.isopen
@fabito
fabito / close.py
Created August 22, 2018 02:08
neyboy_env - close method
def close(self):
if self.viewer is not None:
self.viewer.close()
self.viewer = None
self.game.stop()
@fabito
fabito / reset.py
Created August 22, 2018 02:06
neyboy_env - reset method
def reset(self):
self.game.restart()
self.state = self.game.get_state()
self.game.pause()
return self.state.snapshot
@fabito
fabito / step.py
Created August 22, 2018 02:03
neyboy_env - step method
def step(self, action):
self.game.resume()
if action == ACTION_LEFT:
self.game.tap_left()
elif action == ACTION_RIGHT:
self.game.tap_right()
self.state = self.game.get_state()
self.game.pause()
is_over = self.state.status == GAME_OVER_SCREEN
if is_over:
@fabito
fabito / list_opencv_deps.py
Created August 7, 2018 17:28
Simple python script to list all references to the cv namespace.
from pathlib import Path
from collections import namedtuple, defaultdict
import re
pattern = re.compile("cv::(\w+)")
deps = defaultdict(list)
p = Path('.')
for i in p.glob('**/*.*pp'):