diff --git a/DivaBot/.gitignore b/DivaBot/.gitignore index e8276ca..751908a 100644 --- a/DivaBot/.gitignore +++ b/DivaBot/.gitignore @@ -1,7 +1,7 @@ /target/ /.settings/ /Knife/ -/testsuite/ +!/testsuite/*.png /tmp/ /ココロ/ /システマティック・ラヴ/ diff --git a/DivaBot/liveimage.png b/DivaBot/liveimage.png new file mode 100644 index 0000000..5f79fa2 Binary files /dev/null and b/DivaBot/liveimage.png differ diff --git a/DivaBot/rectangle0.png b/DivaBot/rectangle0.png index 41ff5ef..bb9aa93 100644 Binary files a/DivaBot/rectangle0.png and b/DivaBot/rectangle0.png differ diff --git a/DivaBot/rectangle1.png b/DivaBot/rectangle1.png index 4e6a7f8..d5dfe52 100644 Binary files a/DivaBot/rectangle1.png and b/DivaBot/rectangle1.png differ diff --git a/DivaBot/rectangle2.png b/DivaBot/rectangle2.png index 4b214e1..e812cd0 100644 Binary files a/DivaBot/rectangle2.png and b/DivaBot/rectangle2.png differ diff --git a/DivaBot/rectangle3.png b/DivaBot/rectangle3.png index 3e88fe4..8634d94 100644 Binary files a/DivaBot/rectangle3.png and b/DivaBot/rectangle3.png differ diff --git a/DivaBot/rectangle4.png b/DivaBot/rectangle4.png index 020f9d1..f12616a 100644 Binary files a/DivaBot/rectangle4.png and b/DivaBot/rectangle4.png differ diff --git a/DivaBot/src/sig/MyRobot.java b/DivaBot/src/sig/MyRobot.java index 213f7f6..d37679b 100644 --- a/DivaBot/src/sig/MyRobot.java +++ b/DivaBot/src/sig/MyRobot.java @@ -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)!"); diff --git a/DivaBot/src/sig/TestMain.java b/DivaBot/src/sig/TestMain.java index ecd6c79..fb42eff 100644 --- a/DivaBot/src/sig/TestMain.java +++ b/DivaBot/src/sig/TestMain.java @@ -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());*/ } } diff --git a/DivaBot/src/sig/TypeFace2.java b/DivaBot/src/sig/TypeFace2.java index 88738b4..21e3cf0 100644 --- a/DivaBot/src/sig/TypeFace2.java +++ b/DivaBot/src/sig/TypeFace2.java @@ -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;i1132) { + 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