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 / create.py
Last active August 22, 2018 02:42
neyboy controller - create
@staticmethod
async def create(headless=True) -> 'Game':
o = Game(headless)
await o.initialize()
return o
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'})
@fabito
fabito / nolimits.sh
Last active August 4, 2018 02:03
Disabling limiting factors on the host OS to run multiple chromeinstances
echo "DefaultTasksMax=infinity" | sudo tee --append /etc/systemd/system.conf > /dev/null \
echo "DefaultLimitNOFILE=10000000" | sudo tee --append /etc/systemd/system.conf > /dev/null \
echo "UserTasksMax=infinity" | sudo tee --append /etc/systemd/logind.conf > /dev/null
echo "* soft nproc unlimited" | sudo tee --append /etc/security/limits.conf > /dev/null \
echo "* hard nproc unlimited" | sudo tee --append /etc/security/limits.conf > /dev/null \
echo "* soft nofile unlimited" | sudo tee --append /etc/security/limits.conf >/dev/null \
echo "* hard nofile unlimited" | sudo tee --append /etc/security/limits.conf > /dev/null \
echo "root soft nofile unlimited" | sudo tee --append /etc/security/limits.conf > /dev/null \
echo "root hard nofile unlimited" | sudo tee --append /etc/security/limits.conf > /dev/null
@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'):
@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 / 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 / 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 / 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 / __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 / 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 / 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)