package net.hearthstats.game.ocr; import java.awt.image.BufferedImage; import java.net.URL; import javax.imageio.ImageIO; import org.apache.commons.lang3.NotImplementedException; import org.junit.Assert; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Tests whether the opponent name OCR is working as expected by running a number of known names through the OCR * and checking if the OCR text is correct. */ public class OpponentNameOcrTest { private final static Logger debugLog = LoggerFactory.getLogger(OpponentNameOcrTest.class); private static OpponentNameOcr opponentNameOcr; @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 opponentNameOcr = new OpponentNameOcr() { @Override protected BufferedImage crop(BufferedImage image, int iteration) { throw new NotImplementedException("Test images are pre-cropped, no need to implement this crop method"); } }; } // @Test public void testPerformOcr() throws Exception { debugLog.info("Performing OCR test on opponent names"); testOpponentName("ADIZZLE23"); testOpponentName("ADustCube"); testOpponentName("Atlas"); testOpponentName("Baitt"); testOpponentName("Besant"); testOpponentName("Blackvein666"); testOpponentName("Blood"); testOpponentName("BORTHOX"); testOpponentName("CABJ18"); testOpponentName("Calisc"); testOpponentName("Clarendon"); testOpponentName("Cyberdyne"); testOpponentName("Cygnus"); testOpponentName("Dada"); testOpponentName("danutsio"); testOpponentName("Darn"); testOpponentName("Djoosah"); testOpponentName("dontellu"); testOpponentName("Ehamar"); testOpponentName("EternalVoid"); testOpponentName("Fauzy"); testOpponentName("Fiizz01"); testOpponentName("ForTheHorde"); testOpponentName("Freewilly"); testOpponentName("FREGON989"); testOpponentName("Fritcheous"); testOpponentName("HaPPoSSai"); testOpponentName("Highlander"); testOpponentName("humdeabril"); testOpponentName("Icekicker"); testOpponentName("Kazbec"); testOpponentName("KeL"); testOpponentName("Kritterkilla"); testOpponentName("Lionheart"); testOpponentName("macroberts"); testOpponentName("Manic"); testOpponentName("Mka"); testOpponentName("MKDjanes"); testOpponentName("NeilPogi"); testOpponentName("Numenor"); testOpponentName("Oreo"); testOpponentName("Pleasurepack"); testOpponentName("r2d2"); testOpponentName("Ransux"); testOpponentName("redrebel"); testOpponentName("Renflex"); testOpponentName("Rofltauren"); testOpponentName("shobot"); testOpponentName("SilentPanda"); testOpponentName("Sisko"); testOpponentName("Skorn57"); testOpponentName("sLimer"); testOpponentName("spacecow"); testOpponentName("StarK"); testOpponentName("Tando"); testOpponentName("Toughnut"); testOpponentName("tubatim32"); testOpponentName("UrFather"); testOpponentName("Veon"); testOpponentName("yigg"); testOpponentName("YouInTheNuts"); testOpponentName("zeus"); } private void testOpponentName(String name) throws Exception { URL res = OpponentNameOcrTest.class.getResource("/images/opponentname/opponentname-" + name + ".png"); BufferedImage bufferedImage = ImageIO.read(res); String result = opponentNameOcr.performOcr(bufferedImage, 0); bufferedImage.flush(); debugLog.info("OCR for {} found \"{}\"", name, result); Assert.assertEquals("OCR of opponent name did not match expected name", name, result); } }