package net.semanticmetadata.lire.indexers;
import junit.framework.TestCase;
import net.semanticmetadata.lire.builders.GlobalDocumentBuilder;
import net.semanticmetadata.lire.imageanalysis.features.global.CEDD;
import net.semanticmetadata.lire.imageanalysis.features.global.FCTH;
import net.semanticmetadata.lire.imageanalysis.features.global.PHOG;
import net.semanticmetadata.lire.indexers.hashing.MetricSpaces;
import net.semanticmetadata.lire.indexers.parallel.ParallelIndexer;
import net.semanticmetadata.lire.searchers.GenericDocValuesImageSearcher;
import net.semanticmetadata.lire.searchers.GenericFastImageSearcher;
import net.semanticmetadata.lire.searchers.ImageSearchHits;
import net.semanticmetadata.lire.searchers.MetricSpacesImageSearcher;
import net.semanticmetadata.lire.utils.StopWatch;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.store.FSDirectory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Paths;
/**
* Created by mlux on 09.09.2015.
*/
public class DocValuesTest extends TestCase {
// private File infile = new File("testdata/images.lst");
private File infile = new File("/home/mlux/images3.lst");
private String indexPath = "ms-index-ms-500k";
private File mfile = new File("ms-cedd.dat");
public void testPrepare() throws IllegalAccessException, IOException, InstantiationException {
MetricSpaces.indexReferencePoints(CEDD.class, 5000, 25, infile, mfile);
}
public void testIndexing() throws IllegalAccessException, IOException, InstantiationException, ClassNotFoundException {
MetricSpaces.loadReferencePoints(new FileInputStream(mfile));
ParallelIndexer p = new ParallelIndexer(8, indexPath, infile, GlobalDocumentBuilder.HashingMode.MetricSpaces, false, 10000);
p.addExtractor(CEDD.class);
p.addExtractor(FCTH.class);
p.addExtractor(PHOG.class);
p.run();
}
public void testSearch() throws IOException, IllegalAccessException, ClassNotFoundException, InstantiationException {
int numRuns = 100;
// IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("ms-index-ms-500k")));
// IndexReader readerDocVal = DirectoryReader.open(FSDirectory.open(Paths.get("ms-index-docval-500k")));
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("/media/mlux/SSD02/ms-index-ms-500k")));
IndexReader readerDocVal = DirectoryReader.open(FSDirectory.open(Paths.get("/media/mlux/SSD02/ms-index-docval-500k")));
System.out.printf("Number of documents: %d\n", reader.maxDoc());
GenericDocValuesImageSearcher is = new GenericDocValuesImageSearcher(100, FCTH.class, readerDocVal);
MetricSpacesImageSearcher mis = new MetricSpacesImageSearcher(100, new FileInputStream(mfile), 500);
mis.setNumHashesUsedForQuery(15);
StopWatch sw0 = new StopWatch();
sw0.start();
GenericFastImageSearcher gis = new GenericFastImageSearcher(100, CEDD.class, true, reader);
sw0.stop();
System.out.printf("Startup latency of cached searcher: %02.3f sec\n", sw0.getTime()/1000d);
GenericFastImageSearcher lis = new GenericFastImageSearcher(100, CEDD.class, false, reader);
StopWatch sw1 = new StopWatch();
StopWatch sw2 = new StopWatch();
StopWatch sw3 = new StopWatch();
StopWatch sw4 = new StopWatch();
for (int i = 0; i < numRuns; i++) {
sw1.start();
ImageSearchHits hits = gis.search(reader.document(i), reader);
sw1.stop();
}
for (int i = 0; i < numRuns; i++) {
sw2.start();
ImageSearchHits hits = mis.search(reader.document(i), reader);
sw2.stop();
}
for (int i = 0; i < numRuns; i++) {
sw3.start();
ImageSearchHits hits = is.search(reader.document(i), reader);
sw3.stop();
}
for (int i = 0; i < numRuns; i++) {
sw4.start();
// ImageSearchHits hits = lis.search(reader.document(i), reader);
sw4.stop();
}
System.out.printf(
"cached \t%02.3f\n" +
"metric_s \t%02.3f\n" +
"DocVal \t%02.3f\n" +
"linear \t%02.3f\n" +
"in seconds for %d runs", sw1.getTime() / 1000d, sw2.getTime() / 1000d, sw3.getTime() / 1000d, sw4.getTime() / 1000d, numRuns);
}
}