Created wrapper for object detector, refactored code, generalized Object Tracking tests

This commit is contained in:
davpapp 2018-02-28 00:16:57 -05:00
parent 372a6ed3b7
commit 8ecbc781eb
35 changed files with 238 additions and 871109 deletions

View File

@ -7,13 +7,9 @@
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-9">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/dpapp/lib/Jama-1.0.3.jar" sourcepath="/home/dpapp/lib/Jama">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/OpenCV-3.4.0">
@ -26,11 +22,5 @@
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

View File

@ -10,14 +10,8 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +0,0 @@
item {
id: 1
name: 'ironOre'
}

File diff suppressed because it is too large Load Diff

BIN
libtensorflow.jar Normal file

Binary file not shown.

BIN
TensorFlow/frozen_graph.pb → libtensorflow_framework.so Normal file → Executable file

Binary file not shown.

49
pom.xml
View File

@ -16,10 +16,47 @@
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow</artifactId>
<version>1.5.0-rc0</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>libtensorflow</artifactId>
<version>1.5.0-rc1</version>
</dependency>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>libtensorflow_jni_gpu</artifactId>
<version>1.5.0-rc1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>4.12.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.0.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -7,7 +7,6 @@ import java.nio.file.Files;
import javax.imageio.ImageIO;
import org.junit.Before;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

View File

@ -52,63 +52,34 @@ public class IronMiner {
DetectedObject closestIronOre = getClosestObjectToCharacter(ironOres);
if (closestIronOre != null) {
System.out.println("Found iron ore! Starting tracking!");
Tracker objectTracker = TrackerBoosting.create();
Rect2d boundingBox = closestIronOre.getBoundingRect2d();
objectTracker.init(getMatFromBufferedImage(screenCapture), boundingBox);
ObjectTracker ironOreTracker = new ObjectTracker(screenCapture, boundingBox);
//cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10);
cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10);
long mineStartTime = System.currentTimeMillis();
long miningStartTime = System.currentTimeMillis();
int maxTimeToMine = randomizer.nextGaussianWithinRange(3500, 5000);
// track until either we lose the object or too much time passes
int lostTrackCounter = 0;
//while (((System.currentTimeMillis() - mineStartTime) < maxTimeToMine) && lostTrackCounter < 3) {
while (lostTrackCounter < 600) {
//screenCapture = objectDetector.captureScreenshotGameWindow();
detectedObjects = objectDetector.getObjectsInImage(screenCapture, 0.3); // Call with lower threshold value here
/*
* 600 iterations: 30 seconds
boolean ok = objectTracker.update(getMatFromBufferedImage(screenCapture), boundingBox);
if (!ok) {
System.out.println("Lost track for + " + lostTrackCounter + "! Finding new ore soon.");
lostTrackCounter++;
}
else if (!objectDetector.isObjectPresentInBoundingBoxInImage(detectedObjects, boundingBox, "ironOre")) {
System.out.println("Can't find object in bounding box. Error " + lostTrackCounter + "! Finding new ore soon.");
lostTrackCounter++;
}
else if (ok) {
//lostTrackCounter = 0;
System.out.println("Tracking at " + boundingBox.x + ", " + boundingBox.y + ", " + boundingBox.width + ", " + boundingBox.height);
}*/
System.out.println(lostTrackCounter);
lostTrackCounter++;
boolean objectTrackingFailure = false;
while (!objectTrackingFailure && !isTimeElapsedOverLimit(miningStartTime, maxTimeToMine)) {
screenCapture = objectDetector.captureScreenshotGameWindow();
objectTrackingFailure = ironOreTracker.update(screenCapture, boundingBox);
}
System.out.println("600 iterations took " + (System.currentTimeMillis() - mineStartTime));
break;
}
//dropInventoryIfFull();
dropInventoryIfFull();
}
}
private void dropInventoryIfFull() throws Exception {
inventory.update(); // TODO: add iron ore to indonventory items
inventory.update();
if (inventory.isInventoryFull()) {
cursorTask.optimizedDropAllItemsInInventory(cursor, inventory);
}
}
private void mineClosestIronOre(ArrayList<DetectedObject> ironOres) throws Exception {
DetectedObject closestIronOre = getClosestObjectToCharacter(ironOres);
if (closestIronOre != null) {
cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10);
Thread.sleep(randomizer.nextGaussianWithinRange(IRON_ORE_MINING_TIME_MILLISECONDS - 350, IRON_ORE_MINING_TIME_MILLISECONDS + 1850));
}
private boolean isTimeElapsedOverLimit(long startTime, int timeLimit) {
return (System.currentTimeMillis() - startTime) > timeLimit;
}
private DetectedObject getClosestObjectToCharacter(ArrayList<DetectedObject> detectedObjects) {
@ -128,7 +99,7 @@ public class IronMiner {
return null;
}
private Mat getMatFromBufferedImage(BufferedImage image) {
/*private Mat getMatFromBufferedImage(BufferedImage image) {
BufferedImage formattedImage = convertBufferedImage(image, BufferedImage.TYPE_3BYTE_BGR);
byte[] data = ((DataBufferByte) formattedImage.getData().getDataBuffer()).getData();
bgr2rgb(data);
@ -152,7 +123,7 @@ public class IronMiner {
data[i] = data[i + 2];
data[i + 2] = tmp;
}
}
}*/
public int getDistanceBetweenPoints(Point startingPoint, Point goalPoint) {
return (int) (Math.hypot(goalPoint.x - startingPoint.x, goalPoint.y - startingPoint.y));

View File

@ -1,46 +0,0 @@
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MirrorDisplay extends JPanel{
private BufferedImage image;
public MirrorDisplay() {
try {
Robot robot = new Robot();
image = robot.createScreenCapture(new Rectangle(0, 0, 500, 500));
} catch (AWTException ex) {
Logger.getLogger(MirrorDisplay.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}
public static void main(String[] args) throws InterruptedException {
JFrame test = new JFrame();
while (true) {
test.add(new MirrorDisplay());
Dimension b = new Dimension(500,500);
test.setMinimumSize(b);
test.setVisible(true);
Thread.sleep(50);
test.dispose();
}
}
}

View File

@ -49,27 +49,17 @@ public class ObjectDetector {
Robot robot;
public ObjectDetector() throws AWTException {
this.model = SavedModelBundle.load("/home/dpapp/tensorflow-1.5.0/models/raccoon_dataset/results/checkpoint_56749/saved_model/", "serve");
this.model = SavedModelBundle.load(Paths.TENSORFLOW_MODEL_DIRECTORY, "serve");
this.robot = new Robot();
}
public void update() throws Exception {
// TODO: eliminate IO and pass BufferedImage directly.
/*String fileName = "/home/dpapp/Desktop/RunescapeAI/temp/screenshot.jpg";
BufferedImage image = captureScreenshotGameWindow();
ImageIO.write(image, "jpg", new File(fileName));
this.detectedObjects = getRecognizedObjectsFromImage(fileName);*/
}
}
// Goal: reduce this to < 50 ms
public ArrayList<DetectedObject> getObjectsInImage(BufferedImage image, double scoreThreshold) throws Exception {
List<Tensor<?>> outputs = null;
ArrayList<DetectedObject> detectedObjectsInImage = new ArrayList<DetectedObject>();
long timebefore = System.currentTimeMillis();
makeImageTensor(image);
System.out.println("Conversion took: " + (System.currentTimeMillis() - timebefore));
try (Tensor<UInt8> input = makeImageTensor(image)) {
long timebefore2 = System.currentTimeMillis();
outputs =
model
.session()
@ -79,7 +69,6 @@ public class ObjectDetector {
.fetch("detection_classes")
.fetch("detection_boxes")
.run();
System.out.println("Model took: " + (System.currentTimeMillis() - timebefore));
}
try (Tensor<Float> scoresT = outputs.get(0).expect(Float.class);
@ -100,17 +89,11 @@ public class ObjectDetector {
return detectedObjectsInImage;
}
/*public boolean isObjectPresentInBoundingBoxInImage(BufferedImage image, Rect2d boundingBox, String objectClass) throws Exception {
BufferedImage subImage = image.getSubimage((int) boundingBox.x, (int) boundingBox.y, (int) boundingBox.width, (int) boundingBox.height);
ArrayList<DetectedObject> detectedObjectsInSubImage = getObjectsInImage(subImage);
return (getObjectsOfClassInList(detectedObjectsInSubImage, objectClass).size() != 0);
}*/
// This is too slow -> running object detection each time reduces the framerate to 3fps, which messses up object tracking
public boolean isObjectPresentInBoundingBoxInImage(ArrayList<DetectedObject> detectedObjects, Rect2d boundingBox, String objectClass) throws Exception {
for (DetectedObject detectedObject : detectedObjects) {
if (detectedObject.getDetectionClass().equals(objectClass)) {
//System.out.println(("Required bounding box: " + (int) boundingBox.x + ", " + (int) boundingBox.y + ", " + (int) boundingBox.width + ", " + (int) boundingBox.height));
//System.out.println(("Detected bounding box: " + (int) detectedObject.getBoundingRect2d().x + ", " + (int) detectedObject.getBoundingRect2d().y + ", " + (int) detectedObject.getBoundingRect2d().width + ", " + (int) detectedObject.getBoundingRect2d().height) + "\n");
if ((Math.abs(detectedObject.getBoundingRect2d().x - boundingBox.x) < 10) &&
(Math.abs(detectedObject.getBoundingRect2d().y - boundingBox.y) < 10) &&
(Math.abs(detectedObject.getBoundingRect2d().width - boundingBox.width) < 10) &&
@ -136,8 +119,6 @@ public class ObjectDetector {
BufferedImage formattedImage = convertBufferedImage(image, BufferedImage.TYPE_3BYTE_BGR);
byte[] data = ((DataBufferByte) formattedImage.getData().getDataBuffer()).getData();
bgr2rgb(data);
// BufferedImage and ImageIO.read() seems to produce BGR-encoded images, but the model expects RGB.
final long BATCH_SIZE = 1;
final long CHANNELS = 3;
long[] shape = new long[] {BATCH_SIZE, formattedImage.getHeight(), formattedImage.getWidth(), CHANNELS};
@ -159,9 +140,4 @@ public class ObjectDetector {
data[i + 2] = tmp;
}
}
public BufferedImage captureScreenshotGameWindow() throws IOException, AWTException {
Rectangle area = new Rectangle(Constants.GAME_WINDOW_OFFSET_X, Constants.GAME_WINDOW_OFFSET_Y, Constants.GAME_WINDOW_WIDTH, Constants.GAME_WINDOW_HEIGHT);
return robot.createScreenCapture(area);
}
}

View File

@ -1,17 +1,50 @@
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import org.opencv.core.Mat;
import org.opencv.core.Rect2d;
import org.opencv.tracking.Tracker;
import org.opencv.tracking.TrackerKCF;
import org.opencv.tracking.TrackerBoosting;
public class ObjectTracker {
Rectangle boundingBox;
public ObjectTracker() {
/*this.boundingBox = boundingBox;
Tracker tracker = TrackerKCF.create();
tracker.init(image, boundingBox);*/
Tracker objectTracker;
private int numberOfFramesLostFor;
public ObjectTracker(BufferedImage image, Rect2d boundingBox) {
this.objectTracker = TrackerBoosting.create();
this.objectTracker.init(bufferedImageTomat(image), boundingBox);
this.numberOfFramesLostFor = 0;
}
public ObjectTracker(Mat image, Rect2d boundingBox) {
this.objectTracker = TrackerBoosting.create();
this.objectTracker.init(image, boundingBox);
this.numberOfFramesLostFor = 0;
}
public boolean update(BufferedImage image, Rect2d boundingBox) {
boolean trackingSuccessful = objectTracker.update(bufferedImageToMat(image), boundingBox);
updateNumberOfFramesLostFor(trackingSuccessful);
return isObjectTrackingFailure();
}
public boolean update(Mat image, Rect2d boundingBox) {
boolean trackingSuccessful = objectTracker.update(image, boundingBox);
updateNumberOfFramesLostFor(trackingSuccessful);
return isObjectTrackingFailure();
}
private void updateNumberOfFramesLostFor(boolean trackingSuccessful) {
if (trackingSuccessful) {
numberOfFramesLostFor = 0;
}
else {
numberOfFramesLostFor++;
}
}
private boolean isObjectTrackingFailure() {
return numberOfFramesLostFor > 3;
}
}

View File

@ -0,0 +1,69 @@
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.IOException;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Rect2d;
import org.opencv.tracking.Tracker;
import org.opencv.tracking.TrackerBoosting;
import org.opencv.videoio.VideoCapture;
public class ObjectTrackerSpeedTest {
static Robot robot;
// Screen capture: 6.5 ms (tested on 10,000 frames)
// Object tracker: 15 ms (tested on 4000 frames)
public static void main(String[] args) throws AWTException, IOException {
// TODO Auto-generated method stub
robot = new Robot();
//System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Tracker tracker = TrackerBoosting.create();
Rect2d boundingBox = new Rect2d(405, 177, 38, 38);
//Mat image =
//tracker.init(image, boundingBox);
/*long startTime = System.currentTimeMillis();
int limit = 10000;
for (int i = 0; i < limit; i++) {
BufferedImage screencapture = captureScreenshotGameWindow();
if (i % 100 == 0) {
System.out.println(i);
}
}*/
int limit = 0;
VideoCapture video = new VideoCapture("/home/dpapp/Videos/gameplay-2018-02-23_11.50.00.mp4");
Mat frame = new Mat();
boolean frameReadSuccess = video.read(frame);
tracker.init(frame, boundingBox);
long totalTime = 0;
while (video.read(frame)) {
long startTimeUpdate = System.currentTimeMillis();
tracker.update(frame, boundingBox);
totalTime += (System.currentTimeMillis() - startTimeUpdate);
limit++;
if (limit % 100 == 0) {
System.out.println(limit);
}
}
System.out.println(limit + " frames took " + (totalTime) / 1000 + " seconds.");
System.out.println("FPS:" + limit * 1.0 / (totalTime / 1000.0));
System.out.println(totalTime * 1.0 / limit);
}
public static BufferedImage captureScreenshotGameWindow() throws IOException, AWTException {
Rectangle area = new Rectangle(Constants.GAME_WINDOW_OFFSET_X, Constants.GAME_WINDOW_OFFSET_Y, Constants.GAME_WINDOW_WIDTH, Constants.GAME_WINDOW_HEIGHT);
return robot.createScreenCapture(area);
}
}

View File

@ -14,22 +14,39 @@ import org.junit.jupiter.api.Test;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.core.Point;
import org.opencv.core.Rect2d;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.tracking.Tracker;
import org.opencv.tracking.TrackerKCF;
import org.opencv.tracking.TrackerMIL;
import org.opencv.tracking.TrackerBoosting;
import org.opencv.tracking.TrackerGOTURN;
import org.opencv.tracking.TrackerMedianFlow;
import org.opencv.videoio.VideoCapture;
class ObjectTrackerTest {
@Test
void testObjectTracking() throws Exception {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
VideoCapture video = new VideoCapture("/home/dpapp/Videos/gameplay-2018-02-24_14.24.53.mp4");
System.out.println("loaded video...");
void testObjectTrackingWithAllVideosInDirectory() {
String videoDirectory = "/home/dpapp/Videos/";
for (File video : getListOfFilesFromDirectory(videoDirectory)) {
if (video.isFile()) {
testObjectTrackingInVideo(videoDirectory, video.getName());
}
}
}
public File[] getListOfFilesFromDirectory(String videoDirectoryPath) {
File videoDirectory = new File(videoDirectoryPath);
return videoDirectory.listFiles();
}
void testObjectTrackingInVideo(String videoDirectory, String videoFileName) throws Exception {
VideoCapture video = new VideoCapture(videoDirectory + videoFileName);
ObjectDetector objectDetector = new ObjectDetector();
@ -37,74 +54,34 @@ class ObjectTrackerTest {
boolean frameReadSuccess = video.read(frame);
assertTrue(frameReadSuccess);
ArrayList<DetectedObject> detectedObjects = objectDetector.getObjectsInImage(Mat2BufferedImage(frame), 0.60);
ArrayList<DetectedObject> detectedObjects = objectDetector.getObjectsInImage(Mat2BufferedImage(frame), 0.80);
System.out.println("Tracking " + detectedObjects.size() + " objects.");
ArrayList<Tracker> objectTrackers = new ArrayList<Tracker>();
ArrayList<ObjectTracker> objectTrackers = new ArrayList<ObjectTracker>();
ArrayList<Rect2d> boundingBoxes = new ArrayList<Rect2d>();
for (int i = 0; i < detectedObjects.size(); i++) {
boundingBoxes.add(detectedObjects.get(i).getBoundingRect2d());
objectTrackers.add(TrackerBoosting.create());
objectTrackers.get(i).init(frame, boundingBoxes.get(i));
objectTrackers.add(new ObjectTracker(frame, detectedObjects.get(i).getBoundingRect2d()));
}
//System.out.println("bounding box: " + (int) boundingBoxes.get(0).x + ", " + (int) boundingBoxes.get(0).y + ", " + (int) boundingBoxes.get(0).width + ", " + (int) boundingBoxes.get(0).height);
int counter = 0;
while (video.read(frame)) {
BufferedImage screencapture = Mat2BufferedImage(frame);
detectedObjects = objectDetector.getObjectsInImage(screencapture, 0.3);
//Graphics g = screencapture.getGraphics();
for (int i = 0; i < objectTrackers.size(); i++) {
objectTrackers.get(i).update(frame, boundingBoxes.get(i));
boolean trackingSuccess = objectTrackers.get(i).update(frame, boundingBoxes.get(i));
//System.out.println(detectedObjects.size());
//System.out.println((int) boundingBoxes.get(i).x + ", " + (int) boundingBoxes.get(i).y + ", " + (int) boundingBoxes.get(i).width + ", " + (int) boundingBoxes.get(i).height);
//BufferedImage subImage = screencapture.getSubimage((int) boundingBoxes.get(i).x- 10, (int) boundingBoxes.get(i).y - 10, (int) boundingBoxes.get(i).width + 20, (int) boundingBoxes.get(i).height + 20);
boolean ironOreDetected = objectDetector.isObjectPresentInBoundingBoxInImage(detectedObjects, boundingBoxes.get(i), "ironOre");
boolean oreDetected = objectDetector.isObjectPresentInBoundingBoxInImage(detectedObjects, boundingBoxes.get(i), "ore");
Graphics g = screencapture.getGraphics();
if (ironOreDetected) {
g.setColor(Color.GREEN);
}
else if (oreDetected) {
g.setColor(Color.RED);
}
else {
g.setColor(Color.WHITE);
}
g.drawRect((int) boundingBoxes.get(i).x, (int) boundingBoxes.get(i).y, (int) boundingBoxes.get(i).width, (int) boundingBoxes.get(i).height);
//ImageIO.write(subImage, "jpg", new File("/home/dpapp/Videos/sub_frames/frame_" + counter + "_sub.jpg"));
//System.out.println("wrote file...");
/*if (i == ) {
System.out.println(trackingSuccess + ", ironOre: " + ironOreDetected + ", ore:" + oreDetected);
}*/
assertTrue(trackingSuccess);
g.drawRect((int) boundingBoxes.get(i).x, (int) boundingBoxes.get(i).y, (int) boundingBoxes.get(i).width, (int) boundingBoxes.get(i).height);
}
System.out.println("Wrote image...");
ImageIO.write(screencapture, "jpg", new File("/home/dpapp/Videos/frames/frame_" + counter + ".jpg"));
ImageIO.write(screencapture, "jpg", new File(videoDirectory + "/frame_" + videoFileName + counter + ".jpg"));
counter++;
}
/*Tracker objectTracker = TrackerKCF.create();
Rect2d boundingBox = new Rect2d(405, 177, 38, 38);
int counter = 0;
objectTracker.init(frame, boundingBox);
while (video.read(frame) && counter < 200) {
boolean trackingSuccess = objectTracker.update(frame, boundingBox);
BufferedImage screencapture = Mat2BufferedImage(frame);
boolean ironOreDetected = objectDetector.isObjectPresentInBoundingBoxInImage(screencapture, boundingBox, "ironOre", counter);
ImageIO.write(screencapture, "jpg", new File("/home/dpapp/Videos/frames/frame_" + counter + ".jpg"));
System.out.println(trackingSuccess + ", ironOre: " + ironOreDetected);
counter++;
}*/
}
private BufferedImage Mat2BufferedImage(Mat matrix)throws Exception {
MatOfByte mob=new MatOfByte();

View File

@ -6,7 +6,7 @@ public class Paths {
public static final String CURSOR_COORDINATES_FILE_PATH = "/home/dpapp/GhostMouse/coordinates.txt";
public static final String TENSORFLOW_MODEL_DIRECTORY = "/home/dpapp/tensorflow-1.5.0/models/raccoon_dataset/results/checkpoint_23826/saved_model/";
public static final String TENSORFLOW_MODEL_DIRECTORY = "/home/dpapp/tensorflow-1.5.0/models/raccoon_dataset/results/checkpoint_56749/saved_model/";
public static final String TENSORFLOW_TRAINING_IMAGE_OUTPUT_DIRECTORY = "/home/dpapp/tensorflow-1.5.0/models/raccoon_dataset/results/checkpoint_23826/saved_model/";
public static final String TENSORFLOW_MODEL_LABELS_FILE_PATH = "/home/dpapp/tensorflow-1.5.0/models/raccoon_dataset/training/labels.pbtxt";
}

View File

@ -4,13 +4,15 @@ import java.io.IOException;
import java.net.URL;
import org.opencv.core.Core;
import org.tensorflow.*;
public class main {
public static void main(String[] args) throws Exception {
System.out.println("Starting Iron Miner.");
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//System.loadLibrary(org.tensorflow);
IronMiner ironMiner = new IronMiner();
ironMiner.run();
/*Cursor cursor = new Cursor();

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,29 @@
/home/dpapp/eclipse-workspace/RunescapeAI/src/cascadeTrainingImageCollector.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/Paths.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ImageCollector.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/DetectedObject.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/main.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ObjectDetectorTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/RandomizerTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/InventoryItems.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/InventoryTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ColorAnalyzer.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/Inventory.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorPath.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ObjectTracker.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ObjectDetector.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/Constants.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/ObjectTrackerTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorPointTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/IronMiner.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorTask.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/Randomizer.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/Cursor.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/InventorySlot.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/InventoryItem.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/PointTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorPoint.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorDataFileParser.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/InventoryItemsTest.java
/home/dpapp/eclipse-workspace/RunescapeAI/src/CursorPathTest.java