import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import org.jcodec.api.awt.SequenceEncoder;
import org.junit.Test;
import org.openpnp.CameraListener;
import org.openpnp.machine.reference.ReferenceMachine;
import org.openpnp.machine.reference.driver.NullDriver;
import org.openpnp.model.Configuration;
import org.openpnp.model.Job;
import org.openpnp.spi.Camera;
import org.openpnp.spi.JobProcessor;
import com.google.common.io.Files;
public class SampleJobTest {
/**
* Loads the pnp-test job that is included in the samples and attempts to run it within a test
* harness. The job is expected to complete successfully without throwing any exceptions.
*
* This test is intended to exercise the basic job processing functions, image processing,
* vision, feeder handling and fiducial handling. It's intended to act as a smoke test for large
* changes.
*/
@Test
public void testSampleJob() throws Exception {
File workingDirectory = Files.createTempDir();
workingDirectory = new File(workingDirectory, ".openpnp");
System.out.println("Configuration directory: " + workingDirectory);
Configuration.initialize(workingDirectory);
Configuration.get().load();
ReferenceMachine machine = (ReferenceMachine) Configuration.get().getMachine();
NullDriver driver = (NullDriver) machine.getDriver();
driver.setFeedRateMmPerMinute(0);
Camera camera = machine.getDefaultHead().getDefaultCamera();
camera.setSettleTimeMs(0);
// File videoFile = new File("target");
// videoFile = new File(videoFile, "SampleJobTest.mp4");
// MpegEncodingCameraListener encoder = new MpegEncodingCameraListener(videoFile);
// camera.startContinuousCapture(encoder, 25);
JobProcessor jobProcessor = machine.getPnpJobProcessor();
jobProcessor.addTextStatusListener((text) -> {
System.out.println(text);
});
File jobFile = new File("samples");
jobFile = new File(jobFile, "pnp-test");
jobFile = new File(jobFile, "pnp-test.job.xml");
Job job = Configuration.get().loadJob(jobFile);
machine.setEnabled(true);
jobProcessor.initialize(job);
while (jobProcessor.next());
// camera.stopContinuousCapture(encoder);
// encoder.finish();
}
public static class MpegEncodingCameraListener implements CameraListener {
private SequenceEncoder enc;
private boolean finished = false;
public MpegEncodingCameraListener(File file) throws Exception {
enc = new SequenceEncoder(file);
}
@Override
public synchronized void frameReceived(BufferedImage img) {
if (finished) {
return;
}
try {
Graphics g = img.getGraphics();
g.setColor(Color.white);
g.drawLine(0, img.getHeight() / 2, img.getWidth(), img.getHeight() / 2);
g.drawLine(img.getWidth() / 2, 0, img.getWidth() / 2, img.getHeight());
g.dispose();
enc.encodeImage(img);
}
catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void finish() throws Exception {
finished = true;
enc.finish();
}
}
}