java - Using DoGSIFTFeatureComparator throw NullPointerException -


i attempting use dogsiftfeaturecomparator facesimilarityengine. here's code:

import java.io.file; import java.io.ioexception; import java.util.map; import java.util.map.entry;  import org.openimaj.image.displayutilities; import org.openimaj.image.fimage; import org.openimaj.image.mbfimage; import org.openimaj.image.colour.rgbcolour; import org.openimaj.image.imageutilities; import org.openimaj.image.processing.face.detection.haarcascadedetector; import org.openimaj.image.processing.face.detection.detectedface; import org.openimaj.image.processing.face.feature.dogsiftfeature; import org.openimaj.image.processing.face.feature.comparison.dogsiftfeaturecomparator; import org.openimaj.image.processing.face.similarity.facesimilarityengine; import org.openimaj.math.geometry.shape.rectangle;  public class facesimilarity {     public static void main(string[] args) throws ioexception {         final file ifile1 = new file("/path/to/first/image.jpg");         final file ifile2 = new file("/path/to/second/image.jpg");         final mbfimage mbimg1 = imageutilities.readmbf(ifile1);         final mbfimage mbimg2 = imageutilities.readmbf(ifile2);         final fimage image1 = mbimg1.flatten();         final fimage image2 = mbimg2.flatten();          final haarcascadedetector detector = haarcascadedetector.builtincascade.frontalface_default.load();          final dogsiftfeature.extractor extractor = new dogsiftfeature.extractor();          final dogsiftfeaturecomparator comparator = new dogsiftfeaturecomparator();          final facesimilarityengine<detectedface, dogsiftfeature, fimage> engine = new facesimilarityengine<>(detector, extractor, comparator);          engine.setquery(image1, "image1");         engine.settest(image2, "image2");          engine.performtest();          // rest of code     } } 

this same code works when facesimilarityengine uses fkefacedetector, facepathfeature extractor, , facefvcomparator instead, code above results in following error message:

exception in thread "main" java.lang.nullpointerexception @ org.openimaj.math.geometry.transforms.residuals.transformedsitr2d.computeresidual(transformedsitr2d.java:76) @ org.openimaj.math.model.fit.simplemodelfitting.fitdata(simplemodelfitting.java:117) @ org.openimaj.feature.local.matcher.consistent.consistentlocalfeaturematcher2d.findmatches(consistentlocalfeaturematcher2d.java:138) @ org.openimaj.image.processing.face.feature.comparison.dogsiftfeaturecomparator.compare(dogsiftfeaturecomparator.java:152) @ org.openimaj.image.processing.face.feature.comparison.dogsiftfeaturecomparator.compare(dogsiftfeaturecomparator.java:68) @ org.openimaj.image.processing.face.similarity.facesimilarityengine.performtest(facesimilarityengine.java:224) @ // line of code engine.performtest(); 

i though maybe dogsiftfeaturecomparator didn't work facesimilarityengine, created class instead (same imports except facesimilarityengine):

public class dogsiftcompare {     public static void main(string[] args) throws ioexception {         // created fimages same way previous code          final haarcascadedetector detector = haarcascadedetector.builtincascade.frontalface_default.load();         final dogsiftfeature.extractor extractor = new dogsiftfeature.extractor();         final dogsiftfeaturecomparator comparator = new dogsiftfeaturecomparator();          list<detectedface> faces = detector.detectfaces(image1);         list<detectedface> faces2 = detector.detectfaces(image2);         list<dogsiftfeature> features1 = new arraylist<>();         list<dogsiftfeature> features2 = new arraylist<>();          if (!faces.isempty()) {             (detectedface face : faces) {                 dogsiftfeature feature = extractor.extractfeature(face);                 features1.add(feature);             }         }         if (!faces2.isempty()) {             (detectedface face : faces2) {                 dogsiftfeature feature = extractor.extractfeature(face);                 features2.add(feature);             }         }          detectedface face1 = null;         detectedface face2 = null;          double bestscore = double.max_value;          if (!features1.isempty() && !features2.isempty()) {             (int = 0; < features1.size(); i++) {                 (int j = 0; j < features2.size(); j++) {                     double score = comparator.compare(features1.get(i), features2.get(j));                     if (score < bestscore) {                         bestscore = score;                         face1 = faces.get(i);                         face2 = faces2.get(j);                     }                 }             }         }         // rest of code ...     } } 

running code, however, produces same error previous code did:

exception in thread "main" java.lang.nullpointerexception @ org.openimaj.math.geometry.transforms.residuals.transformedsitr2d.computeresidual(transformedsitr2d.java:76) @ org.openimaj.math.model.fit.simplemodelfitting.fitdata(simplemodelfitting.java:117) @ org.openimaj.feature.local.matcher.consistent.consistentlocalfeaturematcher2d.findmatches(consistentlocalfeaturematcher2d.java:138) @ org.openimaj.image.processing.face.feature.comparison.dogsiftfeaturecomparator.compare(dogsiftfeaturecomparator.java:152) @ //line of code double score = comparator.compare(features1.get(i), features2.get(j)); 

so guess i'm asking if i'm missing key variable particular feature comparator, or problem dogsiftfeaturecomparator itself?


Comments