RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.opencv.utils; 00002 00003 import java.io.File; 00004 import java.io.IOException; 00005 00006 import zephyr.plugin.core.api.internal.monitoring.fileloggers.TimedFileLogger; 00007 import zephyr.plugin.core.api.monitoring.abstracts.Monitored; 00008 import zephyr.plugin.core.api.monitoring.annotations.Monitor; 00009 import zephyr.plugin.core.api.synchronization.Chrono; 00010 00011 import com.googlecode.javacv.cpp.opencv_core; 00012 import com.googlecode.javacv.cpp.opencv_core.CvSize; 00013 import com.googlecode.javacv.cpp.opencv_core.IplImage; 00014 import com.googlecode.javacv.cpp.opencv_highgui; 00015 import com.googlecode.javacv.cpp.opencv_imgproc; 00016 00017 @SuppressWarnings("restriction") 00018 public class ImageLogger { 00019 private final File folder; 00020 @Monitor 00021 private int imageCounter = 0; 00022 private final Chrono chrono = new Chrono(); 00023 private final double period; 00024 private final TimedFileLogger logger; 00025 private final CvSize size; 00026 private IplImage resizedImage; 00027 00028 public ImageLogger(String path, CvSize size, double period) { 00029 folder = new File(path); 00030 if (!folder.isDirectory()) 00031 folder.mkdirs(); 00032 System.out.println("Saving images in " + folder.getAbsolutePath()); 00033 this.period = period; 00034 this.size = size; 00035 logger = createLogger(); 00036 } 00037 00038 private TimedFileLogger createLogger() { 00039 String loggerFilepath = folder.getAbsolutePath() + "/log.logtxt"; 00040 try { 00041 final TimedFileLogger logger = new TimedFileLogger(loggerFilepath); 00042 logger.add("ImageCounter", new Monitored() { 00043 @SuppressWarnings("synthetic-access") 00044 @Override 00045 public double monitoredValue() { 00046 return imageCounter; 00047 } 00048 }); 00049 return logger; 00050 } catch (IOException e) { 00051 e.printStackTrace(); 00052 } 00053 return null; 00054 } 00055 00056 public void saveImage(IplImage image) { 00057 if (chrono.getCurrentChrono() < period) 00058 return; 00059 if (resizedImage == null) 00060 resizedImage = opencv_core.cvCreateImage(size, image.depth(), image.nChannels()); 00061 String filename = String.format("%s/image%09d.jpg", folder.getAbsolutePath(), imageCounter); 00062 opencv_imgproc.cvResize(image, resizedImage, opencv_imgproc.CV_INTER_LINEAR); 00063 opencv_highgui.cvSaveImage(filename, resizedImage); 00064 logger.update(); 00065 chrono.start(); 00066 imageCounter++; 00067 } 00068 00069 public void dispose() { 00070 if (resizedImage != null) 00071 opencv_core.cvReleaseImage(resizedImage); 00072 logger.close(); 00073 } 00074 }