package eu.europeana.creative.dataset.culturecam; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import it.cnr.isti.vir.features.IFeaturesCollector; import it.cnr.isti.vir.features.mpeg7.LireObject; import it.cnr.isti.vir.file.FeaturesCollectorsArchive; import it.cnr.isti.vir.similarity.ISimilarityResults; import it.cnr.isti.vir.similarity.knn.MultipleKNNPQueueID; import it.cnr.isti.vir.similarity.knn.QueriesOrder3; import it.cnr.isti.vir.similarity.metric.LireMetric; import it.cnr.isti.vir.similarity.pqueues.SimPQueue_kNN; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import eu.europeana.api.client.thumbnails.ThumbnailAccessorUtils; import eu.europeana.service.ir.image.api.PivotManagementService; import eu.europeana.service.ir.image.api.PivotManagementServiceImpl; public class CultureCamPivotsFeaturesArchiveTest extends ThumbnailAccessorUtils { PivotManagementService pivotManager; @Before public void init() { String dataset = "culturecam"; setDataset(dataset); blockSize = 1000; pivotManager = new PivotManagementServiceImpl(getDataset()); pivotManager.init(); } //@Test public void extractPivotFeatures() throws Exception { File pivotCsvFile = new File(pivotManager.getConfiguration() .getPivotsCsvFile(getDataset())); Map<String, String> pivotThumbnails = readThumbnailsMap(pivotCsvFile); pivotManager.extractPivotFeatures(pivotThumbnails.keySet()); int pivots = ((PivotManagementServiceImpl) pivotManager) .getPivotsFCArchive().size(); assertEquals(pivotThumbnails.size(), pivots); System.out.println("successfully extracted features for pivots: " + pivots); List<IFeaturesCollector> features = ((PivotManagementServiceImpl) pivotManager) .getPivotsFCArchive().getAll(); assertEquals(pivotThumbnails.size(), features.size()); // copyPivotsFeaturesArchive(); } @Test public void generateLireObjectPivotsArchive() throws Exception { // test copy FeatureArchives File inFile = new File(pivotManager.getConfiguration() .getPivotsFCArchive(getDataset())); assertTrue(inFile.exists()); pivotManager.generateLireObjectPivotsBin(); checkTopNPivots(); } @Test public void generateLireObjectPivotsArchiveWithOrder() throws Exception { // test copy FeatureArchives File inFile = new File(pivotManager.getConfiguration() .getPivotsFCArchive(getDataset())); assertTrue(inFile.exists()); Integer[] order = new Integer[] { 4815, 298, 9392, 7858, 5686, 9945, 2693, 6742, 1761, 4555, 3642, 271, 1047, 6489, 2133, 6272, 9729, 6381, 2608, 7968, 57, 279, 8513, 2314, 54, 61, 1125, 1906, 809, 10309, 317, 2515, 5278, 321, 4152, 9887, 4554, 8341, 3143, 2869, 9997, 3138, 1494, 7, 67, 363, 364, 1190, 4308, 10001, 10485, 299, 9817, 9264, 9687, 8514, 5430, 5512, 7652, 5894, 8044, 7436, 11243, 10813, 9821, 6630, 1026, 285, 6279, 2727, 1290, 5509, 34, 280, 1673, 17, 346, 56, 3410, 1776, 274, 1517, 7417, 7311, 310, 270, 286, 91, 4352, 5522, 11203, 8447, 10209, 3232, 886, 3209, 8915, 8540, 344, 361, 277, 25, 3897, 77, 10994, 11249}; // // pivotManager.generateLireObjectPivots(order); checkTopNPivots(); } // @Test public void checkTopNPivots() throws FileNotFoundException, IOException { File outFile = ((PivotManagementServiceImpl) pivotManager) .getPivotsFCArchiveFile(); // readTop5 pivots int topN = 5; LireObject[] pivots = readTopNPivots(outFile, topN); for (int i = 0; i < pivots.length; i++) { LireObject lireObject = pivots[i]; assertNotNull(lireObject); System.out.println(lireObject); System.out.println(lireObject.getFeatures()); } } protected LireObject[] readTopNPivots(File outFile, int topN) throws FileNotFoundException, IOException { DataInputStream in = null; in = new DataInputStream(new BufferedInputStream(new FileInputStream( outFile))); // ObjectInputStream ros_file=new ObjectInputStream(new // FileInputStream(filename)); LireObject[] pivots = new LireObject[5]; for (int i = 0; i < topN; i++) { pivots[i] = new LireObject(in); } in.close(); return pivots; } @Test public void generatePivotOrder() throws SecurityException, IllegalArgumentException, IOException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { // public MultipleKNNPQueueID( Collection queryColl, // Integer k, // Metric comp, // Class pQueueClass // ) { // // this (queryColl, k, comp, false, null, null, true, false, // pQueueClass, true ); // } // TODO: test also with lire pivots archive File inFile = new File(pivotManager.getConfiguration() .getPivotsFCArchive(getDataset())); List<IFeaturesCollector> featuresCollection = FeaturesCollectorsArchive .getAll(inFile); // FeaturesCollectorsArchive. final int k = 100; final int tries = 30; @SuppressWarnings("rawtypes") MultipleKNNPQueueID multipleKnnQueue = new MultipleKNNPQueueID( featuresCollection, // Collection queryColl, k, // Integer k, new LireMetric(), // Metric comp, true, // boolean useInterDistances, new QueriesOrder3(tries, k), // (available Queriesorder1-3) // IQueriesOrdering ordering, -1, // (not used) - Integer nRecents, false, // (distance overflow) boolean distET, false, // (search by ID or features?) boolean storeID, SimPQueue_kNN.class, // (same as SimPQueueDMax) Class // pQueueClass, false /* boolean silent */); System.out.println(multipleKnnQueue.getAvgIntDist()); // System.out.println(multipleKnnQueue.getAvgLastDist()); @SuppressWarnings("rawtypes") ISimilarityResults[] results = multipleKnnQueue.getResults(); // multipleKnnQueue.writeResultsIDs(); for (int i = 0; i < results.length; i++) { System.out.println("ISimilarityResult [" + i + "]: " + results[i]); } // System.out.println("Top k results : " + multipleKnnQueue.get(k)); // for (int i = 0; i < k; i++) { // System.out.println("Top k results : " + multipleKnnQueue.get(k)); // } // multipleKnnQueue.get(index); } }