tess4j图像识别文字

Maven依赖<dependency><groupId>net.sourceforge.tess4jgroupId><artifactId>tess4jartifactId><version>3.2.1version>dependency>发现在识别整张图时,准确率降低。尤其是中文,英文,字符,数字,水印都有的时候。出错率很高。原先一直认为是水印的问题。结果将图片二值化以后,没有水印,识别准确度依旧很低。 
偶然的情况,使用局部区域识别,发现,效果很好,准确度大大提高。 
然后体用api切换中文,英文识别库,很大程度的提高了准确率。
private static String ocr(String filePath) {String result = null;
    try {BufferedImage image = ImageIO.read(new File(filePath));
        // 这里对图片黑白处理,增强识别率.这里先通过截图,截取图片中需要识别的部分
        BufferedImage textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(image, 412, 340, 133, 32));
        // 图片锐化
        textImage = ImageHelper.convertImageToBinary(textImage);
        // 图片放大倍数,增强识别率(很多图片本身无法识别,放大5倍时就可以轻易识,但是考滤到客户电脑配置低,针式打印机打印不连贯的问题,这里就放大5)
        textImage = ImageHelper.getScaledInstance(textImage, textImage.getWidth() * 2, textImage.getHeight() * 2);

        textImage = ImageHelper.convertImageToBinary(textImage);
        //ImageIO.write(textImage, "png", new File("C:\\Users\\JiangJie\\Pictures\\timg_temp.jpg"));

        Tesseract instance = new Tesseract();
        instance.setDatapath(System.getProperty("user.dir"));//设置训练库的位置
        instance.setLanguage("chi_sim");//中文识别
        //instance.setLanguage("eng");//英文识别
        result = instance.doOCR(textImage);
    } catch (Exception e) {e.printStackTrace();
    }return result;
}private static String filter(String str) {String regEx = "[`~!@#$%^&*()+=|{}':;,\"\\[\\].<>/?……&*()___—+|{}【】';:”“’。,、?]";
    Pattern p = Pattern.compile(regEx);
    Matcher m = p.matcher(str);
    return m.replaceAll("").trim();
}
user.dir 为项目根目录路径,项目跟路径下新建tessdata文件夹,将中、英文.traineddata字库文件copy进去。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部