PowerMiner/src/ImageCollector.java

126 lines
4.3 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;
public Rectangle fullWindowRectangle;
public Robot robot;
/*
* Methods needed:
*
* - Capture screen window every N seconds
*
* initialize with: output directory, file name
*
* detect last file name
*/
public BufferedImage captureScreenshotGameWindow() throws IOException, AWTException {
return robot.createScreenCapture(gameWindowRectangle);
}
public ImageCollector(String screenshotOutputDirectory) throws AWTException {
initializeGameWindowRectangle();
initializeFullWindowRectangle();
this.screenshotOutputDirectory = screenshotOutputDirectory;
this.robot = new Robot();
}
private void initializeGameWindowRectangle() {
this.gameWindowRectangle = new Rectangle(Constants.GAME_WINDOW_OFFSET_X, Constants.GAME_WINDOW_OFFSET_Y, Constants.GAME_WINDOW_WIDTH, Constants.GAME_WINDOW_HEIGHT);
}
private void initializeFullWindowRectangle() {
this.fullWindowRectangle = new Rectangle(0, 0, Constants.FULL_WINDOW_WIDTH, Constants.FULL_WINDOW_HEIGHT);
}
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;
}
/*public void blurTextFromImages() throws IOException, AWTException, InterruptedException {
File folder = new File("/home/dpapp/Videos/BlurredRandom/NonBlurred/");
File[] listOfImages = folder.listFiles();
//RandomDetector randomDetector = new RandomDetector();
int count = 0;
for (File file : listOfImages) {
System.out.println(count);
BufferedImage image = ImageIO.read(file);
BufferedImage blurredImage = RandomDetector.blurDialogueFromImage(image);
ImageIO.write(blurredImage, "png", new File("/home/dpapp/Videos/BlurredRandom/Blurred/blurredRandom" + count + ".png"));
count++;
}
}*/
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 {
BufferedImage imageCaptured = robot.createScreenCapture(gameWindowRectangle);
String fileName = getFileName(itemName, fileCounter);
ImageIO.write(imageCaptured, "jpg", new File(fileName));
System.out.println("Wrote file: " + fileName);
}
public void captureAndSaveFullWindow() throws IOException {
BufferedImage imageCaptured = robot.createScreenCapture(fullWindowRectangle);
ImageIO.write(imageCaptured, "jpg", new File(getFileName("fullWindow", 0)));
System.out.println("Wrote file.");
}
private String getFileName(String itemName, int counter) {
return screenshotOutputDirectory + itemName + "_" + counter + ".jpg";
}
private void generateInventoryImages() throws AWTException, IOException {
Inventory inventory = new Inventory();
inventory.updateAndWriteAllInventoryImages();
}
public static void main(String[] args) throws Exception
{
ImageCollector imageCollector = new ImageCollector("/home/dpapp/Desktop/RunescapeAI/Images/");
//imageCollector.blurTextFromImages();
//imageCollector.collectImages("chatDialogue");
//imageCollector.generateInventoryImages();
//imageCollector.captureAndSaveFullWindow();
}
}