package net.semanticmetadata.lire.indexing;
import junit.framework.TestCase;
import net.semanticmetadata.lire.DocumentBuilder;
import net.semanticmetadata.lire.ImageSearchHits;
import net.semanticmetadata.lire.imageanalysis.GenericByteLireFeature;
import net.semanticmetadata.lire.imageanalysis.bovw.VLADBuilder;
import net.semanticmetadata.lire.impl.ChainedDocumentBuilder;
import net.semanticmetadata.lire.impl.GenericFastImageSearcher;
import net.semanticmetadata.lire.impl.SurfDocumentBuilder;
import net.semanticmetadata.lire.indexing.parallel.ParallelIndexer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.MMapDirectory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* Created by mlux on 07.05.2014.
*/
public class VladTest extends TestCase {
private ParallelIndexer parallelIndexer;
private String indexPath = "wang-index";
// if you don't have the images you can get them here: http://wang.ist.psu.edu/docs/related.shtml
private String testExtensive = "./testdata/wang-1000";
@Override
protected void setUp() throws Exception {
super.setUp();
parallelIndexer = new ParallelIndexer(8, indexPath, testExtensive, true) {
@Override
public void addBuilders(ChainedDocumentBuilder builder) {
builder.addBuilder(new SurfDocumentBuilder());
// builder.addBuilder(new MSERDocumentBuilder());
// builder.addBuilder(new SiftDocumentBuilder());
}
};
}
public void testIndexing() throws IOException {
// indexing
System.out.println("-< Getting files to index >--------------");
parallelIndexer.run();
VLADBuilder vladBuilder = new VLADBuilder(DirectoryReader.open(FSDirectory.open(new File(indexPath))));
vladBuilder.index();
}
public void testSearch() throws IOException {
IndexReader reader = DirectoryReader.open(MMapDirectory.open(new File(indexPath)));
VLADBuilder vladBuilder = new VLADBuilder(reader);
GenericFastImageSearcher searcher = new GenericFastImageSearcher(1000, GenericByteLireFeature.class, DocumentBuilder.FIELD_NAME_SURF + DocumentBuilder.FIELD_NAME_VLAD_VECTOR, true, reader);
DocumentBuilder db = new SurfDocumentBuilder();
Document d = db.createDocument(new FileInputStream(new File("./testdata/wang-1000/99.jpg")), "./testdata/wang-1000/99.jpg");
d = vladBuilder.getVisualWords(d);
ImageSearchHits hits = searcher.search(d, reader);
for (int i=0; i< hits.length(); i++) {
String file = hits.doc(i).getValues(DocumentBuilder.FIELD_NAME_IDENTIFIER)[0];
System.out.println(hits.score(i) + ": " + file);
}
}
}