1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos;
31
32 import java.io.File;
33 import java.io.IOException;
34
35 import org.openimaj.feature.FloatFV;
36 import org.openimaj.feature.local.list.MemoryLocalFeatureList;
37 import org.openimaj.image.feature.dense.gradient.dsift.FloatDSIFTKeypoint;
38 import org.openimaj.image.feature.local.aggregate.FisherVector;
39 import org.openimaj.io.IOUtils;
40 import org.openimaj.math.statistics.distribution.MixtureOfGaussians;
41 import org.openimaj.util.function.Operation;
42 import org.openimaj.util.parallel.Parallel;
43
44 import scala.actors.threadpool.Arrays;
45
46 public class FVFWFVEncode {
47
48
49
50
51 @SuppressWarnings("unchecked")
52 public static void main(String[] args) throws IOException {
53 final MixtureOfGaussians gmm = IOUtils.readFromFile(new File(
54 "/Volumes/Raid/face_databases/lfw-centre-affine-pdsift-pca64-augm-gmm512.bin"));
55 final FisherVector<float[]> fisher = new FisherVector<float[]>(gmm, true, true);
56 IOUtils.writeToFile(fisher, new File(
57 "/Volumes/Raid/face_databases/lfw-centre-affine-pdsift-pca64-augm-gmm512-fisher.bin"));
58
59 final File indir = new File("/Volumes/Raid/face_databases/lfw-centre-affine-pdsift-pca64/");
60 final File outdir = new File("/Volumes/Raid/face_databases/lfw-centre-affine-pdsift-pca64-augm-fv512/");
61
62 Parallel.forEach(Arrays.asList(indir.listFiles()), new Operation<File>() {
63 @Override
64 public void perform(File dir) {
65 if (dir.isDirectory()) {
66 for (final File f : dir.listFiles()) {
67 if (f.getName().endsWith(".bin")) {
68 try {
69 System.out.println(f);
70
71 final MemoryLocalFeatureList<FloatDSIFTKeypoint> feats = MemoryLocalFeatureList.read(f,
72 FloatDSIFTKeypoint.class);
73
74 final File outfile = new File(outdir, f.getAbsolutePath().replace(
75 indir.getAbsolutePath(), ""));
76 outfile.getParentFile().mkdirs();
77
78 final FloatFV fv = fisher.aggregate(feats);
79 IOUtils.writeBinary(outfile, fv);
80 } catch (final Exception e) {
81 e.printStackTrace();
82 }
83 }
84 }
85 }
86 }
87 });
88 }
89 }