sclass FaceDataSet { S csvSnippetID = #1032472; class Entry { S imageURL; File imageFile; DoubleRect facePosition; } L entries; File imagesDir() { ret javaxCachesDir("Google Face Data Set"); } File downloadImage(S url) { File file = newFile(imagesDir(), md5FileName(url) + fileExtension(url)); if (!file.exists()) loadBinaryPageToFile(url, file); ret file; } void load { for (LS row : parseExtendedCSV_iterator(loadSnippet(csvSnippetID))) { int i = 0; for n to 3: { new Entry e; e.imageURL = row.get(i++); e.imageFile = downloadImage(e-.imageURL); e.facePosition = doubleRectFromPoints( row.get(i), // left column (x1) row.get(i+2), // top row (y1) row.get(i+1), // right column (x2) row.get(i+3), // bottom row (y2) ); entries.add(e); i += 4; } } print("Have " + nEntries(entries)); } } /* Row begins: URL of image1 (string) Top-left column of the face bounding box in image1 normalized by width (float) Bottom-right column of the face bounding box in image1 normalized by width (float) Top-left row of the face bounding box in image1 normalized by height (float) Bottom-right row of the face bounding box in image1 normalized by height (float) */