package net.semanticmetadata.lire.impl; import net.semanticmetadata.lire.AbstractDocumentBuilder; import net.semanticmetadata.lire.DocumentBuilder; import net.semanticmetadata.lire.imageanalysis.opencvfeatures.CvSurfExtractor; import net.semanticmetadata.lire.imageanalysis.opencvfeatures.CvSurfFeature; 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; /** * Created by Nektarios on 2/10/2014. */ public class CvSurfDocumentBuilder extends AbstractDocumentBuilder{ @Override public Field[] createDescriptorFields(BufferedImage image) { CvSurfExtractor s = new CvSurfExtractor(); LinkedList<CvSurfFeature> descriptors = s.computeSurfFeatures(image); Field[] result = new Field[descriptors.size()]; int count = 0; for (Iterator<CvSurfFeature> cvsf = descriptors.iterator(); cvsf.hasNext(); ) { CvSurfFeature sf = cvsf.next(); result[count] = (new StoredField(DocumentBuilder.FIELD_NAME_CVSURF, sf.getByteArrayRepresentation())); count++; } return result; } public Document createDocument(BufferedImage image, String identifier) { CvSurfExtractor s = new CvSurfExtractor(); LinkedList<CvSurfFeature> descriptors = s.computeSurfFeatures(image); Document doc = new Document(); for (Iterator<CvSurfFeature> cvsf = descriptors.iterator(); cvsf.hasNext(); ) { CvSurfFeature sf = cvsf.next(); doc.add(new StoredField(DocumentBuilder.FIELD_NAME_CVSURF, sf.getByteArrayRepresentation())); } if (identifier != null) doc.add(new StringField(DocumentBuilder.FIELD_NAME_IDENTIFIER, identifier, Field.Store.YES)); return doc; } }