package io.lumify.opencvObjectDetector;
import io.lumify.core.ingest.ArtifactDetectedObject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.opencv.objdetect.CascadeClassifier;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(JUnit4.class)
public class OpenCVObjectDetectorPropertyWorkerTest {
private static final String TEST_IMAGE = "cnn.jpg";
private static final String CLASSIFIER = "haarcascade_frontalface_alt.xml";
@Before
public void setUp() throws Exception {
System.out.println(System.getProperty("java.library.path"));
}
@Test
public void testObjectDetection() throws Exception {
OpenCVObjectDetectorPropertyWorker objectDetector = new OpenCVObjectDetectorPropertyWorker();
objectDetector.loadNativeLibrary();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
BufferedImage bImage = ImageIO.read(cl.getResourceAsStream(TEST_IMAGE));
CascadeClassifier objectClassifier = new CascadeClassifier(cl.getResource(CLASSIFIER).getPath());
objectDetector.addObjectClassifier("face", objectClassifier, "http://test.lumify.io/#face");
List<ArtifactDetectedObject> detectedObjectList = objectDetector.detectObjects(bImage);
assertTrue("Incorrect number of objects found", detectedObjectList.size() == 1);
ArtifactDetectedObject detectedObject = detectedObjectList.get(0);
assertEquals("http://test.lumify.io/#face", detectedObject.getConcept());
assertEquals(0.423828125, detectedObject.getX1(), 0.0);
assertEquals(0.1828125, detectedObject.getY1(), 0.0);
assertEquals(0.6220703125, detectedObject.getX2(), 0.0);
assertEquals(0.5, detectedObject.getY2(), 0.0);
}
}