package net.semanticmetadata.lire.impl;
import net.semanticmetadata.lire.AbstractDocumentBuilder;
import net.semanticmetadata.lire.DocumentBuilder;
import net.semanticmetadata.lire.imageanalysis.opencvfeatures.CvSiftExtractor;
import net.semanticmetadata.lire.imageanalysis.opencvfeatures.CvSiftFeature;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.StringField;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.logging.Logger;
/**
* Created by Nektarios on 2/10/2014.
*/
public class CvSiftDocumentBuilder extends AbstractDocumentBuilder {
private Logger logger = Logger.getLogger(getClass().getName());
private CvSiftExtractor extractor;
public CvSiftDocumentBuilder() {
extractor = new CvSiftExtractor();
}
@Override
public Field[] createDescriptorFields(BufferedImage image) {
// extract descriptors from image:
LinkedList<CvSiftFeature> descriptors = extractor.computeSiftFeatures(image);
Field[] result = new Field[descriptors.size()];
int count = 0;
// create new document:
for (Iterator<CvSiftFeature> cvsf = descriptors.iterator(); cvsf.hasNext(); ) {
CvSiftFeature f = cvsf.next();
result[count] = new StoredField(DocumentBuilder.FIELD_NAME_CVSIFT, f.getByteArrayRepresentation());
count++;
}
return result;
}
public Document createDocument(BufferedImage image, String identifier) {
// extract descriptors from image:
LinkedList<CvSiftFeature> descriptors = extractor.computeSiftFeatures(image);
// create new document:
Document doc = new Document();
for (Iterator<CvSiftFeature> cvsf = descriptors.iterator(); cvsf.hasNext(); ) {
CvSiftFeature f = cvsf.next();
// add each cvSiftFeature to the document:
doc.add(new StoredField(DocumentBuilder.FIELD_NAME_CVSIFT, f.getByteArrayRepresentation()));
}
if (identifier != null)
doc.add(new StringField(DocumentBuilder.FIELD_NAME_IDENTIFIER, identifier, Field.Store.YES));
return doc;
}
}