package net.hearthstats.game.ocr; import java.awt.image.BufferedImage; import java.net.URL; import javax.imageio.ImageIO; import junit.framework.Assert; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RankLevelOcrTest { private final static Logger debugLog = LoggerFactory.getLogger(RankLevelOcrTest.class); private static RankLevelOcr rankLevelOcr; @BeforeClass public static void setUpBeforeClass() throws Exception { // Ensure that Tesseract has its training data available // TODO: Determine an cross-platform way to supply extracted Tesseract training data for this setup //Main.setupTesseract(); // Set up a single OCR instance for all image tests rankLevelOcr = new RankLevelOcr(); } // @Test public void testParseString() throws Exception { Assert.assertEquals("17", rankLevelOcr.parseString("i7", 0)); Assert.assertEquals("15", rankLevelOcr.parseString("is", 0)); Assert.assertEquals("10", rankLevelOcr.parseString("I0", 0)); Assert.assertEquals("10", rankLevelOcr.parseString("IO", 0)); Assert.assertEquals("5", rankLevelOcr.parseString("S", 0)); } // @Test public void testPerformOcr() throws Exception { testRankLevel("ranklevel-17-a.png", "17"); testRankLevel("ranklevel-18-a.png", "18"); testRankLevel("ranklevel-18-b.png", "18"); testRankLevel("ranklevel-19-a.png", "19"); testRankLevel("ranklevel-19-b.png", "19"); testRankLevel("ranklevel-20-a.png", "20"); testRankLevel("ranklevel-21-a.png", "21"); testRankLevel("ranklevel-22-a.png", "22"); } private void testRankLevel(String filename, String expectedResult) throws Exception { URL res = OpponentNameOcrTest.class.getResource("/images/ranklevel/" + filename); BufferedImage bufferedImage = ImageIO.read(res); String rawResult = rankLevelOcr.performOcr(bufferedImage, 0); bufferedImage.flush(); String parsedResult = rankLevelOcr.parseString(rawResult, 0); debugLog.debug("OCR for {} found raw \"{}\" parsed \"{}\"", filename, rawResult, parsedResult); org.junit.Assert.assertEquals("OCR of rank in " + filename + " did not match expected rank", expectedResult, parsedResult); } }