Tests are working!

secondmonitor
sigonasr2 5 years ago
parent c51a72f17b
commit 8b2eb9248d
  1. 2
      DivaBot/.gitignore
  2. BIN
      DivaBot/liveimage.png
  3. BIN
      DivaBot/rectangle0.png
  4. BIN
      DivaBot/rectangle1.png
  5. BIN
      DivaBot/rectangle2.png
  6. BIN
      DivaBot/rectangle3.png
  7. BIN
      DivaBot/rectangle4.png
  8. 19
      DivaBot/src/sig/MyRobot.java
  9. 18
      DivaBot/src/sig/TestMain.java
  10. 319
      DivaBot/src/sig/TypeFace2.java
  11. BIN
      DivaBot/testimage.png
  12. BIN
      DivaBot/testimage2.png
  13. BIN
      DivaBot/testimage3.png
  14. BIN
      DivaBot/testimage4.png
  15. BIN
      DivaBot/testsuite/test1.jpg
  16. BIN
      DivaBot/testsuite/test2.jpg
  17. BIN
      DivaBot/testsuite/test3.jpg
  18. BIN
      DivaBot/testsuite/test4.jpg
  19. BIN
      DivaBot/testsuite/test5.jpg
  20. BIN
      DivaBot/testsuite/test6.jpg
  21. BIN
      DivaBot/testsuite/test7.jpg
  22. BIN
      DivaBot/testsuite/test8.jpg
  23. BIN
      DivaBot/typeface.png
  24. BIN
      DivaBot/typeface2.png

@ -1,7 +1,7 @@
/target/
/.settings/
/Knife/
/testsuite/
!/testsuite/*.png
/tmp/
/ココロ/
/システマティック・ラヴ/

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

@ -513,7 +513,8 @@ public class MyRobot{
typeface2.green_maxthreshold=typeface2.blue_maxthreshold=200;
typeface2.darkFillCheck=false;*/
typeface1 = new TypeFace2(
ImageIO.read(new File("typeface.png"))
ImageIO.read(new File("typeface.png")),
ImageIO.read(new File("typeface2.png"))
);
} catch (IOException e1) {
e1.printStackTrace();
@ -691,23 +692,21 @@ public class MyRobot{
} catch (IOException e) {
e.printStackTrace();
}
int[] data = typeface1.getAllData(img,debug);
Result data = typeface1.getAllData(img,debug);
/*int cool = typeface1.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1235-offset.x,451-offset.y,115,26)),new File(tmp,"cool"));
int fine = typeface1.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1235-offset.x,484-offset.y,115,26)),new File(tmp,"fine"));
int safe = typeface1.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1235-offset.x,518-offset.y,115,26)),new File(tmp,"safe"));
int sad = typeface1.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1235-offset.x,553-offset.y,115,26)),new File(tmp,"sad"));
int worst = typeface1.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1235-offset.x,583-offset.y,115,26)),new File(tmp,"worst"));*/
//TODO Needs fixing.
//float percent = (float)typeface2.extractNumbersFromImage(ImageUtils.cropImage(img,new Rectangle(1428-offset.x,361-offset.y,128,30)),new File(tmp,"percent"))/100f;
//TODO Needs fixing.
//boolean fail = textFailPixel(ImageUtils.cropImage(img, new Rectangle(952-offset.x,385-offset.y,1,1)));
assert data[0] == _cool : "Expected cool count to be "+_cool+", got "+data[0];
assert data[1] == _fine : "Expected fine count to be "+_fine+", got "+data[1];
assert data[2] == _safe : "Expected safe count to be "+_safe+", got "+data[2];
assert data[3] == _sad : "Expected sad count to be "+_sad+", got "+data[3];
assert data[4] == _worst : "Expected worst count to be "+_worst+", got "+data[4];
//TODO Needs fixing.
//assert percent == _percent : "Expected percent to be "+_percent+", got "+percent;
assert data.cool == _cool : "Expected cool count to be "+_cool+", got "+data.cool;
assert data.fine == _fine : "Expected fine count to be "+_fine+", got "+data.fine;
assert data.safe == _safe : "Expected safe count to be "+_safe+", got "+data.safe;
assert data.sad == _sad : "Expected sad count to be "+_sad+", got "+data.sad;
assert data.worst == _worst : "Expected worst count to be "+_worst+", got "+data.worst;
assert data.percent == _percent : "Expected percent to be "+_percent+", got "+data.percent;
//TODO Needs fixing.
//assert fail == _fail : "Expected fail to be "+_fail+", got "+fail;
System.out.println(" Passed ("+(System.currentTimeMillis()-startTime)+"ms)!");

@ -14,15 +14,17 @@ public class TestMain {
public static void main(String[] args) throws IOException, AWTException, InterruptedException {
TypeFace2 font = new TypeFace2(
ImageIO.read(new File("typeface.png"))
ImageIO.read(new File("typeface.png")),
ImageIO.read(new File("typeface2.png"))
);
CustomRobot r = new CustomRobot();
/*Thread.sleep(3000);
/*CustomRobot r = new CustomRobot();
Thread.sleep(3000);
r.refreshScoreScreen();
ImageIO.write(r.scoreCurrentScreen,"png",new File("testimage.png"));*/
/*System.out.println(Arrays.toString(font.getAllData(ImageIO.read(new File("testimage.png")))));
System.out.println(Arrays.toString(font.getAllData(ImageIO.read(new File("testimage2.png")))));
System.out.println(Arrays.toString(font.getAllData(ImageIO.read(new File("testimage3.png")))));
System.out.println(Arrays.toString(font.getAllData(ImageIO.read(new File("testimage4.png")))));*/
ImageIO.write(r.scoreCurrentScreen,"png",new File("liveimage.png"));*/
//System.out.println(font.getAllData(ImageIO.read(new File("liveimage.png")),true).display());
/*System.out.println(font.getAllData(ImageIO.read(new File("testimage.png"))).display());
System.out.println(font.getAllData(ImageIO.read(new File("testimage2.png"))).display());
System.out.println(font.getAllData(ImageIO.read(new File("testimage3.png"))).display());
System.out.println(font.getAllData(ImageIO.read(new File("testimage4.png"))).display());*/
}
}

@ -17,16 +17,298 @@ import sig.utils.ImageUtils;
public class TypeFace2 {
BufferedImage img;
BufferedImage font;
BufferedImage percentfont;
int xpointer = 99;
int ypointer = 0;
public static final int THRESHOLD = 30000;
public TypeFace2(BufferedImage font) {
public TypeFace2(BufferedImage font,BufferedImage percentfont) {
this.font=font;
this.percentfont = percentfont;
File debugdir = new File("debug");
debugdir.mkdirs();
}
public int[] getAllData(BufferedImage img) throws IOException {
public Result getAllData(BufferedImage img) throws IOException {
return getAllData(img,false);
}
public Result getAllData(BufferedImage img, boolean debug) throws IOException {
BufferedImage img2 = ImageUtils.toBufferedImage(img.getScaledInstance(1280, 720, Image.SCALE_SMOOTH));
Result result = new Result("","",-1,-1,-1,-1,-1,-1f);
int[] finalNumbers = new int[5];
Rectangle[] ranges = new Rectangle[] {
//These coords are in regard to the old screenshot sizes.
new Rectangle(866,262,100,20), //33 pixels per line.
new Rectangle(866,296,100,20),
new Rectangle(866,331,100,20),
new Rectangle(866,366,100,20),
new Rectangle(866,400,100,20),
};
for (int i=0;i<ranges.length;i++) {
Rectangle r = ranges[i];
//System.out.println("Image "+i+":");
File temp = new File("rectangle"+i+".png");
ImageIO.write(img2.getSubimage(r.x,r.y,r.width,r.height),"png",temp);
finalNumbers[i]=extractNumbersFromImage(img2.getSubimage(
r.x,r.y,r.width,r.height),debug);
}
result.cool = finalNumbers[0];
result.fine = finalNumbers[1];
result.safe = finalNumbers[2];
result.sad = finalNumbers[3];
result.worst = finalNumbers[4];
float percent = extractPercentFromImage(img2,debug);
result.percent=percent;
// result.percent = ??
return result;
}
public float extractPercentFromImage(BufferedImage img) throws IOException {
return extractPercentFromImage(img,false);
}
public float extractPercentFromImage(BufferedImage img,boolean debug) throws IOException {
//1180,167
//second part: 1123
String decimal = "";
String integer = "";
xpointer=1180;
ypointer=165;
BufferedImage test = null;
trialloop:
while (ypointer<168) {
xpointer=1180;
while (xpointer>1132) {
int foundIndex = -1;
for (int i=0;i<10;i++) {
if (debug) {
test = new BufferedImage(24,29,BufferedImage.TYPE_INT_ARGB);
}
boolean ruleBreak=false;
colorloop:
for (int x=0;x<24;x++) {
for (int y=0;y<29;y++) {
Color fontCol = new Color(percentfont.getRGB(x+i*24,y));
Color pixelCol = new Color(img.getRGB(xpointer-24+x+1, y+ypointer));
/*if (fontCol.equals(Color.RED) && pixelCol.getRed()<50
&& pixelCol.getGreen()<150 && pixelCol.getBlue()>150) {
//Breaks a rule.
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.RED.getRGB());
}
} else
if (fontCol.equals(Color.GREEN) && (pixelCol.getRed()>50
|| pixelCol.getGreen()>170 || pixelCol.getBlue()<150)) {
//Breaks a rule.
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.GREEN.getRGB());
}
} else
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}*/
if (fontCol.equals(Color.RED)) {
if (pixelCol.getRed()>=200
&& pixelCol.getGreen()>=200 && pixelCol.getBlue()>=200) {
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}
} else {
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.RED.getRGB());
}
}
} else
if (fontCol.equals(Color.GREEN)) {
if ((pixelCol.getRed()<75
&& pixelCol.getGreen()<170 && pixelCol.getBlue()>130)) {
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}
} else {
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.GREEN.getRGB());
}
}
} else {
if (debug) {
test.setRGB(x, y, img.getRGB(xpointer-24+x+1, y+ypointer));
}
}
}
}
if (!ruleBreak) {
foundIndex=i;
if (debug) {
System.out.println("Passes as "+((foundIndex+1)%10));
}
} else
if (debug) {
ImageIO.write(test,"png",new File("debug",System.nanoTime()+"_"+((i+1)%10)+".png"));
}
}
if (foundIndex!=-1) {
//System.out.println(" Closest Match: Index "+((shortestIndex+1)%10)+" ("+shortestDistance+")");
if (decimal.equals("")) {
decimal = Integer.toString((foundIndex+1)%10);
} else {
decimal = Integer.toString((foundIndex+1)%10)+decimal;
}
if (debug) {
System.out.println("Input as "+((foundIndex+1)%10));
System.out.println("-------------");
}
xpointer-=24;
} else {
//Try shifting the xpointer slowly to the right and try again.
xpointer--;
}
}
if (decimal.length()>0) {
break trialloop;
}
ypointer++;
}
xpointer=1123;
ypointer=165;
trialloop:
while (ypointer<168) {
xpointer=1123;
while (xpointer>1051) {
int foundIndex = -1;
for (int i=0;i<10;i++) {
if (debug) {
test = new BufferedImage(24,29,BufferedImage.TYPE_INT_ARGB);
}
boolean ruleBreak=false;
colorloop:
for (int x=0;x<24;x++) {
for (int y=0;y<29;y++) {
Color fontCol = new Color(percentfont.getRGB(x+i*24,y));
Color pixelCol = new Color(img.getRGB(xpointer-24+x+1, y+ypointer));
/*if (fontCol.equals(Color.RED) && pixelCol.getRed()<50
&& pixelCol.getGreen()<150 && pixelCol.getBlue()>150) {
//Breaks a rule.
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.RED.getRGB());
}
} else
if (fontCol.equals(Color.GREEN) && (pixelCol.getRed()>50
|| pixelCol.getGreen()>170 || pixelCol.getBlue()<150)) {
//Breaks a rule.
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.GREEN.getRGB());
}
} else
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}*/
if (fontCol.equals(Color.RED)) {
if (pixelCol.getRed()>=200
&& pixelCol.getGreen()>=200 && pixelCol.getBlue()>=200) {
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}
} else {
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.RED.getRGB());
}
}
} else
if (fontCol.equals(Color.GREEN)) {
if ((pixelCol.getRed()<75
&& pixelCol.getGreen()<170 && pixelCol.getBlue()>130)) {
if (debug) {
test.setRGB(x, y, pixelCol.getRGB());
}
} else {
ruleBreak=true;
if (!debug) {
break colorloop;
} else {
test.setRGB(x, y, Color.GREEN.getRGB());
}
}
} else {
if (debug) {
test.setRGB(x, y, img.getRGB(xpointer-24+x+1, y+ypointer));
}
}
}
}
if (!ruleBreak) {
foundIndex=i;
if (debug) {
System.out.println("Passes as "+((foundIndex+1)%10));
}
} else
if (debug) {
ImageIO.write(test,"png",new File("debug",System.nanoTime()+"_"+((i+1)%10)+".png"));
}
}
if (foundIndex!=-1) {
//System.out.println(" Closest Match: Index "+((shortestIndex+1)%10)+" ("+shortestDistance+")");
if (integer.equals("")) {
integer = Integer.toString((foundIndex+1)%10);
} else {
integer = Integer.toString((foundIndex+1)%10)+integer;
}
if (debug) {
System.out.println("Input as "+((foundIndex+1)%10));
System.out.println("-------------");
}
xpointer-=24;
} else {
//Try shifting the xpointer slowly to the right and try again.
xpointer--;
}
}
if (integer.length()>0) {
break trialloop;
}
ypointer++;
}
return Float.parseFloat(integer+"."+decimal);
}
public int extractNumbersFromImage(BufferedImage img) throws IOException {
return extractNumbersFromImage(img,false);
@ -63,8 +345,8 @@ public class TypeFace2 {
test.setRGB(x, y, Color.RED.getRGB());
}
} else
if (fontCol.equals(Color.GREEN) && (pixelCol.getRed()>150
|| pixelCol.getGreen()>150 || pixelCol.getBlue()>150)) {
if (fontCol.equals(Color.GREEN) && (pixelCol.getRed()>166
|| pixelCol.getGreen()>166 || pixelCol.getBlue()>166)) {
//Breaks a rule.
ruleBreak=true;
if (!debug) {
@ -85,7 +367,7 @@ public class TypeFace2 {
}
} else
if (debug) {
ImageIO.write(test,"png",new File(System.nanoTime()+"_"+((i+1)%10)+".png"));
ImageIO.write(test,"png",new File("debug",System.nanoTime()+"_"+((i+1)%10)+".png"));
}
}
if (foundIndex!=-1) {
@ -112,31 +394,4 @@ public class TypeFace2 {
return Integer.parseInt(total);
}
}
public int[] getAllData(BufferedImage img, boolean debug) throws IOException {
BufferedImage img2 = ImageUtils.toBufferedImage(img.getScaledInstance(1280, 720, Image.SCALE_SMOOTH));
int[] finalNumbers = new int[5];
Rectangle[] ranges = new Rectangle[] {
//These coords are in regard to the old screenshot sizes.
new Rectangle(866,262,100,20), //33 pixels per line.
new Rectangle(866,296,100,20),
new Rectangle(866,331,100,20),
new Rectangle(866,366,100,20),
new Rectangle(866,400,100,20),
};
for (int i=0;i<ranges.length;i++) {
Rectangle r = ranges[i];
System.out.println("Image "+i+":");
File temp = new File("rectangle"+i+".png");
ImageIO.write(img2.getSubimage(r.x,r.y,r.width,r.height),"png",temp);
finalNumbers[i]=extractNumbersFromImage(img2.getSubimage(
r.x,r.y,r.width,r.height),debug);
}
return finalNumbers;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 954 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Loading…
Cancel
Save