THByteTensor *generate_sequence(long nb_sequences,
long nb_images,
long image_height, long image_width,
+ int nb_shapes,
int random_shape_size, int random_colors) {
long nb_channels = 3;
for(s = 0; s < nb_sequences; s++) {
a = THByteTensor_storage(result)->data + THByteTensor_storageOffset(result) + s * st0;
- fl_generate_sequence(nb_images, image_width, image_height,
+ fl_generate_sequence(nb_images, image_width, image_height, nb_shapes,
random_shape_size, random_colors,
tmp_buffer);
unsigned char *r = tmp_buffer;
extern "C" void fl_generate_sequence(int nb_images,
int width, int height,
+ int nb_shapes,
int random_shape_size, int random_colors,
unsigned char *output) {
- const scalar_t world_width = width * 8;
- const scalar_t world_height = height * 8;
- const scalar_t scaling = 0.125;
+ const scalar_t super_definition = 8;
+ const scalar_t world_width = width * super_definition;
+ const scalar_t world_height = height * super_definition;
+ const scalar_t scaling = 1 / super_definition;
const scalar_t dt = 0.1;
const int nb_iterations_per_steps = 5;
int every_nth = 16;
int nb_simulated_frames = 1 + (nb_images - 1) * every_nth;
int random_grasp = 1;
- int nb_shapes = 10;
Universe *universe;
Polygon *grabbed_polygon;
int failed;
+ int total_nb_attempts = 0;
+ const int max_total_nb_attempts = 1000000;
+
do {
if(random_grasp) {
grab_start_x = world_width * (0.1 + 0.8 * drand48());
}
grabbed_polygon = universe->pick_polygon(grab_start_x, grab_start_y);
+
} while(!grabbed_polygon);
failed = 0;
}
}
}
+
+ total_nb_attempts++;
+
+ if(total_nb_attempts >= max_total_nb_attempts) {
+ cerr << "There was " << max_total_nb_attempts << " attempts at generating the sequences." << endl;
+ abort();
+ }
+
} while(failed);
for(int t = 0; t < nb_images; t++) {
import torch
import torchvision
-from torchvision import datasets
+import argparse
from _ext import flatland
######################################################################
-def sequences_to_image(x, gap=1, gap_color = (0, 128, 255)):
+parser = argparse.ArgumentParser(
+ description='Dummy test of the flatland sequence generation.',
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter
+)
+
+parser.add_argument('--seed',
+ type = int, default = 0,
+ help = 'Random seed, < 0 is no seeding')
+
+parser.add_argument('--width',
+ type = int, default = 80,
+ help = 'Image width')
+
+parser.add_argument('--height',
+ type = int, default = 80,
+ help = 'Image height')
+
+parser.add_argument('--nb_shapes',
+ type = int, default = 10,
+ help = 'Image height')
+
+parser.add_argument('--nb_sequences',
+ type = int, default = 1,
+ help = 'How many sequences to generate')
+
+parser.add_argument('--nb_images_per_sequences',
+ type = int, default = 3,
+ help = 'How many images per sequence')
+
+parser.add_argument('--randomize_colors',
+ action='store_true', default=False,
+ help = 'Should the shapes be of different colors')
+
+parser.add_argument('--randomize_shape_size',
+ action='store_true', default=False,
+ help = 'Should the shapes be of different size')
+
+args = parser.parse_args()
+
+if args.seed >= 0:
+ torch.manual_seed(args.seed)
+
+######################################################################
+
+def sequences_to_image(x, gap = 1, gap_color = (0, 128, 255)):
from PIL import Image
nb_sequences = x.size(0)
gap + nb_sequences * (height + gap),
gap + nb_images_per_sequences * (width + gap))
- result[0].fill_(gap_color[0])
- result[1].fill_(gap_color[1])
- result[2].fill_(gap_color[2])
+ result.copy_(torch.Tensor(gap_color).view(-1, 1, 1).expand_as(result))
for s in range(0, nb_sequences):
for i in range(0, nb_images_per_sequences):
######################################################################
-x = flatland.generate_sequence(10, 6, 80, 80, True, True)
+x = flatland.generate_sequence(args.nb_sequences,
+ args.nb_images_per_sequences,
+ args.height, args.width,
+ args.nb_shapes,
+ args.randomize_colors,
+ args.randomize_shape_size)
-sequences_to_image(x, gap = 2, gap_color = (0, 0, 0)).save('sequences.png')
+sequences_to_image(x, gap = 1, gap_color = (0, 0, 0)).save('sequences.png')