Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

89
LINES

< > BotCompany Repo | #1032475 // FaceDataSet

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (7340L/44K).

1  
sclass FaceDataSet {
2  
  S csvSnippetID = #1032472;
3  
  
4  
  // by imageURL
5  
  new Map<S, Entry> entryMap;
6  
  new L<Entry> entries;
7  
  
8  
  class Entry {
9  
    S imageURL;
10  
    File imageFile;
11  
    new Set<DoubleRect> facePositions;
12  
    int w, h;
13  
    
14  
    *(S *imageURL) {
15  
      imageFile = downloadImage(imageURL);
16  
    }
17  
    
18  
    BufferedImage image() {
19  
      var img = loadImage2(imageFile);
20  
      if (img == null) print(imageFile + " not found");
21  
      else {
22  
        w = img.getWidth();
23  
        h = img.getHeight();
24  
      }
25  
      ret img;
26  
    }
27  
    
28  
    BufferedImage markedImage(int width default w()) {
29  
      var img = scaleToWidth(image(), width);
30  
      int height = img.getHeight();
31  
      for (var face : facePositions) {
32  
        Rect r = scaleRect_floor(face, width, height);
33  
        drawBox(img, r, Color.red, 0.5);
34  
      }
35  
      ret img;
36  
    }
37  
    
38  
    int w() { if (w == 0) image(); ret w; }
39  
    int h() { if (h == 0) image(); ret h; }
40  
  }
41  
42  
  File imagesDir() { ret javaxCachesDir("Google Face Data Set"); }
43  
  
44  
  File downloadImage(S url) {
45  
    File file = newFile(imagesDir(), md5FileName(url) + fileExtension(url));
46  
    if (file.length() == 0) null;
47  
    if (!file.exists()) try {
48  
      loadBinaryPageToFile(url, file);
49  
    } catch e {
50  
      if (containsExceptionOfType FileNotFoundException(e))
51  
        // as a warning for future generations!
52  
        saveBinaryFile(file, new byte[0]);
53  
    }
54  
    ret file.exists() ? file : null;
55  
  }
56  
  
57  
  void load {
58  
    for (LS row : parseExtendedCSV_iterator(loadSnippet(csvSnippetID))) {
59  
      for n to 3: pcall {
60  
        int i = n*5;
61  
        S imageURL = convertHttpToHttps(row.get(i++));
62  
        Entry e = entryMap.get(imageURL);
63  
        if (e == null) {
64  
          e = new Entry(imageURL);
65  
          if (e.imageFile == null) continue with print("Skipping " + e.imageURL);
66  
          entryMap.put(imageURL, e);
67  
          entries.add(e);
68  
        }
69  
        
70  
        e.facePositions.add(doubleRectFromPoints(
71  
          parseDouble(row.get(i)),   // left column  (x1)
72  
          parseDouble(row.get(i+2)), // top row      (y1)
73  
          parseDouble(row.get(i+1)), // right column (x2)
74  
          parseDouble(row.get(i+3)), // bottom row   (y2)
75  
        ));
76  
      }
77  
    }
78  
    
79  
    print("Have " + nEntries(entries));
80  
  }
81  
}
82  
 
83  
/* Row begins: 
84  
URL of image1 (string)
85  
Top-left column of the face bounding box in image1 normalized by width (float)
86  
Bottom-right column of the face bounding box in image1 normalized by width (float)
87  
Top-left row of the face bounding box in image1 normalized by height (float)
88  
Bottom-right row of the face bounding box in image1 normalized by height (float)
89  
*/

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj, pyentgdyhuwx

No comments. add comment

Snippet ID: #1032475
Snippet name: FaceDataSet
Eternal ID of this version: #1032475/21
Text MD5: cc3c073aeafe9e8c034dfe36e83b5208
Transpilation MD5: 5e8e5428e9d0325fb5c581abfaac9acc
Author: stefan
Category: javax / parsing
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-09-08 08:18:43
Source code size: 2701 bytes / 89 lines
Pitched / IR pitched: No / No
Views / Downloads: 209 / 388
Version history: 20 change(s)
Referenced in: [show references]