PowerMiner/src/ImageCollector.java

86 lines
2.6 KiB
Java

import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageCollector {
public String screenshotOutputDirectory;
public Rectangle gameWindowRectangle;
/*
* Methods needed:
*
* - Capture screen window every N seconds
*
* initialize with: output directory, file name
*
* detect last file name
*/
public ImageCollector(String screenshotOutputDirectory) {
initializeGameWindowRectangle();
this.screenshotOutputDirectory = screenshotOutputDirectory;
}
private void initializeGameWindowRectangle() {
this.gameWindowRectangle = new Rectangle(103, 85, 510, 330);
}
public void collectImages(String itemName) throws IOException, InterruptedException, AWTException {
int itemCounter = getItemCounter(itemName);
int numImagesToCapture = 50;
for (int counter = itemCounter + 1; counter < itemCounter + numImagesToCapture + 1; counter++) {
captureAndSaveGameWindow(itemName, counter);
Thread.sleep(2000);
}
}
private int getItemCounter(String itemName) {
File[] listOfFiles = getFilesFromFolderThatStartWith(itemName);
int counter = 0;
for (File file : listOfFiles) {
counter = Math.max(counter, getItemNumberFromFile(file.getName()));
}
return counter;
}
private File[] getFilesFromFolderThatStartWith(String itemName) {
File folder = new File(screenshotOutputDirectory);
File[] listOfFiles = folder.listFiles(new FilenameFilter() {
public boolean accept(File file, String name) {
return name.startsWith(itemName);
}
});
return listOfFiles;
}
private int getItemNumberFromFile(String fileName) {
String itemNumber = fileName.substring(fileName.indexOf("_") + 1, fileName.indexOf("."));
return Integer.parseInt(itemNumber);
}
private void captureAndSaveGameWindow(String itemName, int fileCounter) throws IOException, InterruptedException, AWTException {
Robot robot = new Robot();
BufferedImage imageCaptured = robot.createScreenCapture(gameWindowRectangle);
String fileName = getFileName(itemName, fileCounter);
ImageIO.write(imageCaptured, "jpg", new File(fileName));
System.out.println("Wrote file: " + fileName);
}
private String getFileName(String itemName, int counter) {
return screenshotOutputDirectory + itemName + "_" + counter + ".jpg";
}
public static void main(String[] args) throws Exception
{
ImageCollector imageCollector = new ImageCollector("/home/dpapp/Desktop/RunescapeAI/TensorFlow/IronOre/");
imageCollector.collectImages("ironOre");
}
}