mirror of
https://github.com/davpapp/PowerMiner
synced 2025-01-09 13:08:01 -05:00
Started writing tests for object detection
This commit is contained in:
parent
168f42cc86
commit
d38d4afe54
@ -41,7 +41,7 @@ public class DetectedObject {
|
|||||||
return boundingBox;
|
return boundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Rect2d getBoundingRect2d() {
|
public Rect2d getBoundingRect2d() {
|
||||||
return new Rect2d(boundingBox.x, boundingBox.y, boundingBox.x + boundingBox.width, boundingBox.y + boundingBox.height);
|
return new Rect2d(boundingBox.x, boundingBox.y, boundingBox.x + boundingBox.width, boundingBox.y + boundingBox.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,12 +3,14 @@ import java.awt.Point;
|
|||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Robot;
|
import java.awt.Robot;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBufferByte;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
import org.opencv.core.Mat;
|
||||||
import org.opencv.core.Rect2d;
|
import org.opencv.core.Rect2d;
|
||||||
import org.opencv.tracking.Tracker;
|
import org.opencv.tracking.Tracker;
|
||||||
import org.opencv.tracking.TrackerKCF;
|
import org.opencv.tracking.TrackerKCF;
|
||||||
@ -46,18 +48,19 @@ public class IronMiner {
|
|||||||
DetectedObject closestIronOre = getClosestObjectToCharacter(ironOres);
|
DetectedObject closestIronOre = getClosestObjectToCharacter(ironOres);
|
||||||
if (closestIronOre != null) {
|
if (closestIronOre != null) {
|
||||||
Tracker objectTracker = TrackerKCF.create();
|
Tracker objectTracker = TrackerKCF.create();
|
||||||
objectTracker.init(screenCapture, closestIronOre.getBoundingRect2d());
|
Rect2d boundingBox = closestIronOre.getBoundingRect2d();
|
||||||
|
objectTracker.init(getMatFromBufferedImage(screenCapture), boundingBox);
|
||||||
|
|
||||||
cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10);
|
cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10);
|
||||||
|
|
||||||
long mineStartTime = System.currentTimeMillis();
|
long mineStartTime = System.currentTimeMillis();
|
||||||
int maxTimeToMine = randomizer.nextGaussianWithinRange(3500, 5000);
|
int maxTimeToMine = randomizer.nextGaussianWithinRange(3500, 5000);
|
||||||
|
|
||||||
|
// track until either we lose the object or too much time passes
|
||||||
while ((System.currentTimeMillis() - mineStartTime) < maxTimeToMine) {
|
while ((System.currentTimeMillis() - mineStartTime) < maxTimeToMine) {
|
||||||
screenCapture = objectDetector.captureScreenshotGameWindow();
|
screenCapture = objectDetector.captureScreenshotGameWindow();
|
||||||
objectTracker.update(screenCapture, boundingBox);
|
boolean ok = objectTracker.update(getMatFromBufferedImage(screenCapture), boundingBox);
|
||||||
Rectangle newBounds = new Rectangle();
|
if (!ok || !objectDetector.isObjectPresentInBoundingBoxInImage(screenCapture, boundingBox, "ironOre")) {
|
||||||
if (!objectDetector.isObjectPresentInBoundingBoxInImage(screenCapture, newBounds, "ironOre")) {
|
|
||||||
System.out.println("Lost track! Finding new ore.");
|
System.out.println("Lost track! Finding new ore.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -101,6 +104,13 @@ public class IronMiner {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Mat getMatFromBufferedImage(BufferedImage image) {
|
||||||
|
Mat matImage = new Mat();
|
||||||
|
byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
|
||||||
|
matImage.put(0, 0, pixels);
|
||||||
|
return matImage;
|
||||||
|
}
|
||||||
|
|
||||||
public int getDistanceBetweenPoints(Point startingPoint, Point goalPoint) {
|
public int getDistanceBetweenPoints(Point startingPoint, Point goalPoint) {
|
||||||
return (int) (Math.hypot(goalPoint.x - startingPoint.x, goalPoint.y - startingPoint.y));
|
return (int) (Math.hypot(goalPoint.x - startingPoint.x, goalPoint.y - startingPoint.y));
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
import org.opencv.core.Rect2d;
|
||||||
import org.tensorflow.SavedModelBundle;
|
import org.tensorflow.SavedModelBundle;
|
||||||
import org.tensorflow.Tensor;
|
import org.tensorflow.Tensor;
|
||||||
import org.tensorflow.types.UInt8;
|
import org.tensorflow.types.UInt8;
|
||||||
@ -92,8 +93,8 @@ public class ObjectDetector {
|
|||||||
return detectedObjectsInImage;
|
return detectedObjectsInImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isObjectPresentInBoundingBoxInImage(BufferedImage image, Rectangle boundingBox, String objectClass) throws Exception {
|
public boolean isObjectPresentInBoundingBoxInImage(BufferedImage image, Rect2d boundingBox, String objectClass) throws Exception {
|
||||||
BufferedImage subImage = image.getSubimage(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height);
|
BufferedImage subImage = image.getSubimage((int) boundingBox.x, (int) boundingBox.y, (int) boundingBox.width, (int) boundingBox.height);
|
||||||
ArrayList<DetectedObject> detectedObjectsInSubImage = getObjectsInImage(subImage);
|
ArrayList<DetectedObject> detectedObjectsInSubImage = getObjectsInImage(subImage);
|
||||||
return (getObjectsOfClassInList(detectedObjectsInSubImage, objectClass).size() != 0);
|
return (getObjectsOfClassInList(detectedObjectsInSubImage, objectClass).size() != 0);
|
||||||
}
|
}
|
||||||
|
15
src/ObjectDetectorTest.java
Normal file
15
src/ObjectDetectorTest.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import java.awt.AWTException;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ObjectDetectorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testObjectDetection() throws AWTException {
|
||||||
|
ObjectDetector objectDetector = new ObjectDetector();
|
||||||
|
ArrayList<DetectedObject> detectedObjects1 = objectDetector.getObjectsInImage(loadimages here in bufferedimage format));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
target/classes/ObjectDetectorTest.class
Normal file
BIN
target/classes/ObjectDetectorTest.class
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user