当前位置:   article > 正文

Tesseract-OCR安装及Java代码识别文字_tesseract识别出来的string是什么编码

tesseract识别出来的string是什么编码
1.先去下载 Tesseract-OCR 

点击打开链接

你也可以去其他网站下载3.0以上版本即可

2.下载后就进行安装,这里需要注意的是安装时有个步骤时需要选择语言的,默认的是英文语言包,安装是我们还需要选择一个中文的简体语言包(你也可以勾选多个语言包,我安装时勾选多个出错了,所以只选择了一个中文简体),然后下一步知道安装结束。

3.配置环境变量

4.配置好后检查是否安装成功

进入cmd窗口 ——   执行命令 tessercate -version  或者直接 tessercate  没报错就说明安装成功了


5.安装成功后我们需要去安装目录下查看语言包是否下载成功了(语言包必须要和安装的tesseract ocr 一致否则在识别中文字体时会报错:actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES - Stack Overflow

这个就是中文简体语言包

6.现在可以找些简单的英文图片试着识别一下

命令为:tesseract  图片名称  要保存的名称 

 

这个其实报错了说是空页,这个说明执行的字体无法识别


这个表示执行成功

执行成功后去放图片的目录下找到一个叫1.txt的文件

原图片识别后文字

大家可以看到我的是I have  但是识别后却是have 这是大概因为我的I是大写的在字体库里面找不到大写的I所以就只识别了have(这里就需要我们自己训练字体库了)

对于一般的英文而言没什么大问题,但是中文的话就不行了

中文的执行代码是:tesseract 2.jpg 2 -l chi_sim


  —————— 看南和封有问题是吧!所以这里就需要我们自己训练字体库了

7.下载jTessBoxEditor

点击打开链接

下载后将这个文件解压放在这个目录下面


下载好后就可以通过这个去训练字体了,后面这步我还没完全学会,等我学会了再来更新。


java 代码

  1. package test;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class OcrTest {
  9. private final String LANG_OPTION = "-l";
  10. private final String EOL = System.getProperty("line.separator");
  11. /**
  12. * Tesseract-OCR的安装路径
  13. */
  14. private String tessPath = "Z:\\Software\\Tool\\Tesseract-OCR";
  15. /**
  16. * @param imageFile 传入的图像文件
  17. * @param imageFormat 传入的图像格式
  18. * @return 识别后的字符串
  19. */
  20. public String recognizeText(File imageFile) throws Exception {
  21. /**
  22. * 设置输出文件的保存的文件目录
  23. */
  24. File outputFile = new File(imageFile.getParentFile(), "2");
  25. StringBuffer strB = new StringBuffer();
  26. List<String> cmd = new ArrayList<String>();
  27. cmd.add(tessPath + "//tesseract");
  28. cmd.add("");
  29. cmd.add(outputFile.getName());
  30. cmd.add(LANG_OPTION);
  31. cmd.add("chi_sim");
  32. //cmd.add("eng");
  33. ProcessBuilder pb = new ProcessBuilder();
  34. /**
  35. *Sets this process builder's working directory.
  36. */
  37. pb.directory(imageFile.getParentFile());
  38. cmd.set(1, imageFile.getName());
  39. pb.command(cmd);
  40. pb.redirectErrorStream(true);
  41. long startTime = System.currentTimeMillis();
  42. System.out.println("开始时间:" + startTime);
  43. Process process = pb.start();
  44. // tesseract.exe 1.jpg 1 -l chi_sim
  45. //不习惯使用ProcessBuilder的,也可以使用Runtime,效果一致
  46. // Runtime.getRuntime().exec("tesseract.exe 1.jpg 1 -l chi_sim");
  47. /**
  48. * the exit value of the process. By convention, 0 indicates normal
  49. * termination.
  50. */
  51. // System.out.println(cmd.toString());
  52. int w = process.waitFor();
  53. if (w == 0)// 0代表正常退出
  54. {
  55. BufferedReader in = new BufferedReader(new InputStreamReader(
  56. new FileInputStream(outputFile.getAbsolutePath() + ".txt"),
  57. "UTF-8"));
  58. String str;
  59. while ((str = in.readLine()) != null) {
  60. strB.append(str).append(EOL);
  61. }
  62. in.close();
  63. long endTime = System.currentTimeMillis();
  64. System.out.println("结束时间:" + endTime);
  65. System.out.println("耗时:" + (endTime - startTime) + "毫秒");
  66. } else {
  67. String msg;
  68. switch (w) {
  69. case 1:
  70. msg = "Errors accessing files. There may be spaces in your image's filename.";
  71. break;
  72. case 29:
  73. msg = "Cannot recognize the image or its selected region.";
  74. break;
  75. case 31:
  76. msg = "Unsupported image format.";
  77. break;
  78. default:
  79. msg = "Errors occurred.";
  80. }
  81. throw new RuntimeException(msg);
  82. }
  83. new File(outputFile.getAbsolutePath() + ".txt").delete();
  84. return strB.toString().replaceAll("\\s*", "");
  85. }
  86. }



测试

  1. package test;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class OcrTest {
  9. private final String LANG_OPTION = "-l";
  10. private final String EOL = System.getProperty("line.separator");
  11. /**
  12. * Tesseract-OCR的安装路径
  13. */
  14. private String tessPath = "Z:\\Software\\Tool\\Tesseract-OCR";
  15. /**
  16. * @param imageFile 传入的图像文件
  17. * @param imageFormat 传入的图像格式
  18. * @return 识别后的字符串
  19. */
  20. public String recognizeText(File imageFile) throws Exception {
  21. /**
  22. * 设置输出文件的保存的文件目录
  23. */
  24. File outputFile = new File(imageFile.getParentFile(), "2");
  25. StringBuffer strB = new StringBuffer();
  26. List<String> cmd = new ArrayList<String>();
  27. cmd.add(tessPath + "//tesseract");
  28. cmd.add("");
  29. cmd.add(outputFile.getName());
  30. cmd.add(LANG_OPTION);
  31. cmd.add("chi_sim");
  32. //cmd.add("eng");
  33. ProcessBuilder pb = new ProcessBuilder();
  34. /**
  35. *Sets this process builder's working directory.
  36. */
  37. pb.directory(imageFile.getParentFile());
  38. cmd.set(1, imageFile.getName());
  39. pb.command(cmd);
  40. pb.redirectErrorStream(true);
  41. long startTime = System.currentTimeMillis();
  42. System.out.println("开始时间:" + startTime);
  43. Process process = pb.start();
  44. // tesseract.exe 1.jpg 1 -l chi_sim
  45. //不习惯使用ProcessBuilder的,也可以使用Runtime,效果一致
  46. // Runtime.getRuntime().exec("tesseract.exe 1.jpg 1 -l chi_sim");
  47. /**
  48. * the exit value of the process. By convention, 0 indicates normal
  49. * termination.
  50. */
  51. // System.out.println(cmd.toString());
  52. int w = process.waitFor();
  53. if (w == 0)// 0代表正常退出
  54. {
  55. BufferedReader in = new BufferedReader(new InputStreamReader(
  56. new FileInputStream(outputFile.getAbsolutePath() + ".txt"),
  57. "UTF-8"));
  58. String str;
  59. while ((str = in.readLine()) != null) {
  60. strB.append(str).append(EOL);
  61. }
  62. in.close();
  63. long endTime = System.currentTimeMillis();
  64. System.out.println("结束时间:" + endTime);
  65. System.out.println("耗时:" + (endTime - startTime) + "毫秒");
  66. } else {
  67. String msg;
  68. switch (w) {
  69. case 1:
  70. msg = "Errors accessing files. There may be spaces in your image's filename.";
  71. break;
  72. case 29:
  73. msg = "Cannot recognize the image or its selected region.";
  74. break;
  75. case 31:
  76. msg = "Unsupported image format.";
  77. break;
  78. default:
  79. msg = "Errors occurred.";
  80. }
  81. throw new RuntimeException(msg);
  82. }
  83. new File(outputFile.getAbsolutePath() + ".txt").delete();
  84. return strB.toString().replaceAll("\\s*", "");
  85. }
  86. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/819909
推荐阅读
相关标签
  

闽ICP备14008679号