个人随笔
目录
Java使用tess4j对简单的图片文字内容进行识别
2023-08-15 22:34:12

在工作中,我们有时候会遇到识别图片里面的文字信息,比如姓名,验证码等,这里就要涉及一个OCR(Optical Character Recognition)的概念,即光学字符识别,简单讲就是对图片文件中的文字进行分析识别,获取的过程。

Tesseract是一个著名的开源OCR引擎,初期是由惠普实验室研发,后期开源,由Google改进优化升级。

Tess4J是对Tesseract OCR API 的Java JNA 封装。使java能够通过调用Tess4J的API来使用Tesseract OCR。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF。

下面进行简单的使用吧。

1、新建一个maven项目,引入依赖

  1. <dependency>
  2. <groupId>net.sourceforge.tess4j</groupId>
  3. <artifactId>tess4j</artifactId>
  4. <version>4.4.0</version>
  5. </dependency>

2、准备测试代码

  1. public class TestTess4jOCR {
  2. //语言库类型中文:chi_sim,数字加英文:eng
  3. private static final String LANGUAGE = "eng";
  4. //语言库位置,里面目前只放了:chi_sim.traineddata(中文),eng.traineddata(英文)
  5. private static final String DATA_PATH = "F:\\Workspace\\eclipse_workspace\\tessdata";
  6. public static void main(String[] args) {
  7. byte[] imageByte =TestTess4jOCR.getImageBytes("F:\\2.jpg");
  8. TestTess4jOCR.testDoOCR_ImageByte(imageByte);
  9. }
  10. public static void testDoOCR_ImageByte(byte[] imageByte) {
  11. try {
  12. InputStream sbs = new ByteArrayInputStream(imageByte);
  13. BufferedImage img = ImageIO.read(sbs);
  14. ITesseract instance = new Tesseract();
  15. //设置语言库所在的文件夹位置,最好是绝对的,不然加载不到就直接报错了
  16. instance.setDatapath(DATA_PATH);
  17. //设置使用的语言库类型:chi_sim,eng 中文简体
  18. instance.setLanguage(LANGUAGE);
  19. String result = instance.doOCR(img);
  20. System.out.println("扫描的文本:"+result);
  21. } catch (Exception e) {
  22. System.err.println("扫描图片文本错误:"+e);
  23. }
  24. }
  25. public static byte[] getImageBytes(String path) {
  26. //图片转化为二进制
  27. byte[] imageBytes = null;
  28. try (FileInputStream fileInputStream = new FileInputStream(new File(path));) {
  29. imageBytes = new byte[fileInputStream.available()];
  30. fileInputStream.read(imageBytes);
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. return imageBytes;
  35. }
  36. }

上面可以看到有一个语言库的概念。中文一般用:chi_sim.traineddata,数字和英文一般用eng.traineddata,更多tessdata语言库下载地址

这里下载了chi_sim.traineddata和eng.traineddata用来测试。

3、测试

通过修改LANGUAGE和图片路径进行测试
第一组测试,数字识别:

第二组测试,中文识别:

第三组测试,图片验证码:

感觉功能好强大,完全不需要调用腾讯百度的接口!咱再试试




这,好吧,毕竟肯定没有付钱的好,当然我们还可以进行针对性的训练,当然这是后话!

 94

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2