tess4j图像识别文字

Maven依赖
 <dependency>
     <groupId>net.sourceforge.tess4j</groupId>
     <artifactId>tess4j</artifactId>
     <version>3.2.1</version>
 </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进去。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tess4j是一个基于Tesseract OCR引擎的Java库,可以用于识别图像中的文字。要获取图像中每个文字的坐标,可以使用Tess4j提供的`getWords()`方法。以下是获取图像中文字坐标的代码示例: ```java import java.awt.Rectangle; import java.io.File; import java.util.List; import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.ITessAPI.TessPageIteratorLevel; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.Word; import net.sourceforge.tess4j.util.ImageHelper; public class Tess4jExample { public static void main(String[] args) { File imageFile = new File("example.png"); ITesseract tess = new Tesseract(); tess.setDatapath("tessdata"); try { String text = tess.doOCR(imageFile); System.out.println(text); List<Word> words = tess.getWords(ImageHelper.convertImageToPix(ImageIO.read(imageFile)), TessPageIteratorLevel.RIL_WORD); for (Word word : words) { Rectangle rect = word.getBoundingBox(); System.out.println(word.getText() + " @ (" + rect.x + "," + rect.y + ")"); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在此示例中,我们首先使用`doOCR()`方法从图像中提取文本。然后,我们使用`getWords()`方法获取每个文字的`Word`对象,并使用`getBoundingBox()`方法获取每个`Word`对象的边界框。最后,我们打印每个文字及其坐标。注意,`getWords()`方法需要一个`Pix`对象,因此我们使用`ImageHelper.convertImageToPix()`方法将`BufferedImage`转换为`Pix`对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值