Exemple #1
0
def render_figure(fig):
    w, h = fig.get_size_inches()
    dpi_res = fig.get_dpi()
    w, h = int(np.ceil(w * dpi_res)), int(np.ceil(h * dpi_res))

    canvas = FigureCanvasAgg(fig)
    buffer = BytesIO()
    canvas.print_raw(buffer, dpi=dpi_res)
    return pyglet.image.ImageData(w, h, 'RGBA', buffer.getvalue(), -4 * w)
def render_figure(fig):
    w, h = fig.get_size_inches()
    dpi_res = fig.get_dpi()
    w, h = int(math.ceil(w * dpi_res)), int(math.ceil(h * dpi_res))

    canvas = FigureCanvasAgg(fig)
    pic_data = StringIO.StringIO()
    canvas.print_raw(pic_data, dpi=dpi_res)
    return pyglet.image.ImageData(w, h, 'RGBA', pic_data.getvalue(), -4 * w)
def render_figure(fig):
	w, h = fig.get_size_inches()
	dpi_res = fig.get_dpi()
	w, h = int(math.ceil(w * dpi_res)), int(math.ceil(h * dpi_res))

	canvas = FigureCanvasAgg(fig)
	pic_data = StringIO.StringIO()
	canvas.print_raw(pic_data, dpi = dpi_res)
	return pyglet.image.ImageData(w, h, 'RGBA', pic_data.getvalue(), -4 * w)
    def _update_image(self):
        plot_structure(self.adjacency_matrix, self.fig)
        # self.image = self._render_figure(fig)
        w, h = self.fig.get_size_inches()
        dpi_res = self.fig.get_dpi()
        w, h = int(np.ceil(w * dpi_res)), int(np.ceil(h * dpi_res))

        canvas = FigureCanvasAgg(self.fig)
        buffer = BytesIO()
        canvas.print_raw(buffer, dpi=dpi_res)
        self.image = pyglet.image.ImageData(w, h, 'RGBA', buffer.getvalue(),
                                            -4 * w)
def figure_to_image(mlp_fig, rel_anchor_x=0.5, rel_anchor_y=0.5):
    from matplotlib.backends.backend_agg import FigureCanvasAgg
    canvas = FigureCanvasAgg(mlp_fig)
    pic_data = io.BytesIO()
    canvas.print_raw(pic_data, dpi=mlp_fig.dpi)
    width, height = mlp_fig.get_size_inches() * mlp_fig.dpi
    width = int(width)
    height = int(height)
    image = pyglet.image.ImageData(width, height, 'RGBA', pic_data.getvalue(),
                                   -4 * width)
    image.anchor_x = int(image.width * rel_anchor_x)
    image.anchor_y = int(image.height * rel_anchor_y)
    return image
Exemple #6
0
class MplVisual(Visual):
    def __init__(self, sim: Simulator, **kwargs):
        super(MplVisual, self).__init__(sim,
                                        width=kwargs.get('width', 500),
                                        height=kwargs.get('height', 500))

        self.dpi = 80
        self.figure = plt.figure(figsize=(self.width / self.dpi,
                                          self.height / self.dpi),
                                 dpi=self.dpi)
        self._create_canvas()

    def _create_canvas(self):
        self.canvas = FigureCanvas(self.figure)
        data = StringIO()
        self.canvas.print_raw(data, dpi=self.dpi)
        self.image = pyglet.image.ImageData(self.width, self.height, 'RGBA',
                                            data.getvalue(), -4 * self.width)

    def update_image(self):
        data = StringIO()
        self.canvas.print_raw(data, dpi=self.dpi)
        self.image.set_data('RGBA', -4 * self.width, data.getvalue())
Exemple #7
0
    def on_draw(self):
        self.clear()
        glClearColor(1., 1., 1., 1.)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)

        self.switch_to()
        self.dispatch_events()

        if DISPLAY_FPS:
            self.fps_display.draw()

        if DISPLAY_HUMAN_RENDERED:
            self.human_title.draw()
            base_dimensions = (210, 160)
            scale = 2
            display_nparray(cv2.resize(
                            self.game_image,
                            dsize=(int(base_dimensions[1]*scale), int(base_dimensions[0]*scale)),
                            interpolation=cv2.INTER_CUBIC))\
                .blit(50, self.height-base_dimensions[0]*scale-50)

        if DISPLAY_MACHINE_RENDERED:
            self.agent_title.draw()
            base_dimensions = (84, 84)
            scale = 2.5

            state_images = [
                np.repeat(self.state_image[:, :, i, np.newaxis], 3, axis=2)
                for i in range(self.state_image.shape[-1])
            ]
            for i, state_image in enumerate(state_images):
                display_nparray(cv2.resize(state_image,
                                        dsize=(int(base_dimensions[1]*scale), int(base_dimensions[0]*scale)),
                                        interpolation=cv2.INTER_CUBIC))\
                    .blit(10+i*(84*scale+5), 10)

        if DISPLAY_VAL_CHART:
            dpi_res = min(self.width, self.height) / 10
            fig = Figure((500 / dpi_res, 230 / dpi_res), dpi=dpi_res)
            ax = fig.add_subplot(111)

            # Set up plot
            ax.set_title('Estimated Value over Time', fontsize=20)
            ax.set_xticklabels([])
            ax.set_ylabel('V(s)')
            ax.plot(self.values[max(len(self.values) -
                                    200, 0):])  # plot values

            w, h = fig.get_size_inches()
            dpi_res = fig.get_dpi()
            w, h = int(np.ceil(w * dpi_res)), int(np.ceil(h * dpi_res))
            canvas = FigureCanvasAgg(fig)
            pic_data = io.BytesIO()
            canvas.print_raw(pic_data, dpi=dpi_res)
            img = pyglet.image.ImageData(w, h, 'RGBA', pic_data.getvalue(),
                                         -4 * w)
            img.blit(375, 265)

        if DISPLAY_HEATMAP and self.evaluate_frame_number > 1:
            self.heatmap_title.draw()
            base_dimensions = (84, 84)
            INTENSITY = 0.1
            scale = 10

            processed_frame = np.repeat(self.state_image[:, :, 3, np.newaxis],
                                        3,
                                        axis=2)
            heatmap = generate_heatmap(game_wrapper.state, agent.DQN)

            img = (heatmap * 255 * INTENSITY + processed_frame * 0.8).astype(
                np.uint8)

            display_nparray(
                cv2.resize(img + (heatmap * 255 * INTENSITY).astype(np.uint8),
                           dsize=(int(base_dimensions[1] * scale),
                                  int(base_dimensions[0] * scale)),
                           interpolation=cv2.INTER_CUBIC)).blit(880, 60)

        self.flip()
Exemple #8
0
    def on_draw(self):
        self.clear()
        glClearColor(1., 1., 1., 1.)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)

        self.switch_to()
        self.dispatch_events()

        # Draw FPS counter
        if DISPLAY_FPS:
            self.fps_display.draw()

        # Display RGB "human" version of the game state
        if DISPLAY_HUMAN_RENDERED:
            self.human_title.draw()
            base_dimensions = (210, 160)
            scale = 2
            display_nparray(cv2.resize(
                            self.game_image,
                            dsize=(int(base_dimensions[1]*scale), int(base_dimensions[0]*scale)),
                            interpolation=cv2.INTER_CUBIC))\
                .blit(50, self.height-base_dimensions[0]*scale-50)

        # Display grayscale "machine" version of the game state (this is what the agent really sees)
        if DISPLAY_MACHINE_RENDERED:
            self.agent_title.draw()
            base_dimensions = (84, 84)
            scale = 2.5
            # For some strange reason, we must render this in RGB mode (not 'L' mode as implied in the pyglet docs)
            # Because of this, we must repeat each frame 3 times to simulate RGB, despite being grayscale
            state_images = [
                np.repeat(self.state_image[:, :, i, np.newaxis], 3, axis=2)
                for i in range(self.state_image.shape[-1])
            ]
            for i, state_image in enumerate(state_images):
                display_nparray(cv2.resize(state_image,
                                        dsize=(int(base_dimensions[1]*scale), int(base_dimensions[0]*scale)),
                                        interpolation=cv2.INTER_CUBIC))\
                    .blit(10+i*(84*scale+5), 10)

        # Display q-values
        if DISPLAY_Q_VALUES:
            self.q_val_title.draw()
            LENGTH = 80
            STARTING_X = 400
            for i, (q_val, label) in enumerate(
                    zip(self.q_vals[::-1], self.action_titles[::-1])):
                if q_val > self.max_q_val:
                    self.max_q_val = q_val
                elif q_val < self.min_q_val:
                    self.min_q_val = q_val

                # Draw square represention q-val
                x_value = STARTING_X + i * (LENGTH + 10
                                            )  # x-coordinate to draw square
                color = (150**(q_val *
                               2)) / (sum([150**(q * 2)
                                           for q in self.q_vals]) + 0.0001)
                pyglet.graphics.draw(
                    4, GL_QUADS,
                    ('v2f', (x_value, self.height - 50, x_value + LENGTH,
                             self.height - 50, x_value + LENGTH, self.height -
                             LENGTH - 50, x_value, self.height - LENGTH - 50)),
                    ('c3f', (color, color, color, color, color, color, color,
                             color, color, color, color, color)))

                # Draw action label
                glTranslatef(x_value + LENGTH / 2, self.height - 100 - LENGTH,
                             0.0)
                glRotatef(-90.0, 0.0, 0.0, 1.0)
                label.draw()
                glRotatef(90.0, 0.0, 0.0, 1.0)
                glTranslatef(-(x_value + LENGTH / 2),
                             -(self.height - 100 - LENGTH), 0.0)

        # Display value history (adapted from https://learning.oreilly.com/library/view/matplotlib-plotting-cookbook/9781849513265/ch08s06.html)
        if DISPLAY_VAL_CHART:
            dpi_res = min(self.width, self.height) / 10
            fig = Figure((500 / dpi_res, 230 / dpi_res), dpi=dpi_res)
            ax = fig.add_subplot(111)

            # Set up plot
            ax.set_title('Estimated Value over Time', fontsize=20)
            ax.set_xticklabels([])
            ax.set_ylabel('V(s)')
            ax.plot(self.values[max(len(self.values) -
                                    200, 0):])  # plot values

            w, h = fig.get_size_inches()
            dpi_res = fig.get_dpi()
            w, h = int(np.ceil(w * dpi_res)), int(np.ceil(h * dpi_res))
            canvas = FigureCanvasAgg(fig)
            pic_data = io.BytesIO()
            canvas.print_raw(pic_data, dpi=dpi_res)
            img = pyglet.image.ImageData(w, h, 'RGBA', pic_data.getvalue(),
                                         -4 * w)
            img.blit(375, 265)

        # Display heatmap
        if DISPLAY_HEATMAP and self.evaluate_frame_number > 1:
            self.heatmap_title.draw()
            base_dimensions = (84, 84)
            INTENSITY = 0.1
            scale = 10

            processed_frame = np.repeat(self.state_image[:, :, 3, np.newaxis],
                                        3,
                                        axis=2)
            heatmap = generate_heatmap(game_wrapper.state, agent.DQN)

            img = (heatmap * 255 * INTENSITY + processed_frame * 0.8).astype(
                np.uint8)

            display_nparray(
                cv2.resize(img + (heatmap * 255 * INTENSITY).astype(np.uint8),
                           dsize=(int(base_dimensions[1] * scale),
                                  int(base_dimensions[0] * scale)),
                           interpolation=cv2.INTER_CUBIC)).blit(880, 60)

        self.flip()