原文链接:http://www.cnblogs.com/alex-blog/articles/2714984.html

 

项目主页地址:http://code.google.com/p/tesseract-ocr/

相关资源下载地址:http://code.google.com/p/tesseract-ocr/downloads/list

需要下载的资源有:

1、tesseract-ocr-setup-3.01-1.exe

因我本地为windows系统,所以用这个

2、chi_sim.traineddata.gz

中文识别时需要的。

安装tesseract-ocr

自定义安装语言包

在Tesseract-OCR安装目录下找到 tessdata目录,其是用来存放语言包,可把 chi_sim.traineddata.gz 解压缩之后的chi_sim.traineddata文件复制到该目录下即可。

本文使用参考blog中的例子

如下:

  1. package org.img;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.Iterator;
  6. import java.util.Locale;
  7.  
  8. import javax.imageio.IIOImage;
  9. import javax.imageio.ImageIO;
  10. import javax.imageio.ImageReader;
  11. import javax.imageio.ImageWriteParam;
  12. import javax.imageio.ImageWriter;
  13. import javax.imageio.metadata.IIOMetadata;
  14. import javax.imageio.stream.ImageInputStream;
  15. import javax.imageio.stream.ImageOutputStream;
  16.  
  17. import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;
  18.  
  19. public class ImageIOHelper {
  20. /**
  21. * 图片文件转换为tif格式
  22. * @param imageFile 文件路径
  23. * @param imageFormat 文件扩展名
  24. * @return
  25. */
  26. public static File createImage(File imageFile, String imageFormat) {
  27. File tempFile = null;
  28. try {
  29. Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat);
  30. ImageReader reader = readers.next();
  31.  
  32. ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
  33. reader.setInput(iis);
  34. //Read the stream metadata
  35. IIOMetadata streamMetadata = reader.getStreamMetadata();
  36.  
  37. //Set up the writeParam
  38. TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);
  39. tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
  40.  
  41. //Get tif writer and set output to file
  42. Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
  43. ImageWriter writer = writers.next();
  44.  
  45. BufferedImage bi = reader.read(0);
  46. IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0));
  47. tempFile = tempImageFile(imageFile);
  48. ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);
  49. writer.setOutput(ios);
  50. writer.write(streamMetadata, image, tiffWriteParam);
  51. ios.close();
  52.  
  53. writer.dispose();
  54. reader.dispose();
  55.  
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }
  59. return tempFile;
  60. }
  61.  
  62. private static File tempImageFile(File imageFile) {
  63. String path = imageFile.getPath();
  64. StringBuffer strB = new StringBuffer(path);
  65. strB.insert(path.lastIndexOf('.'),0);
  66. return new File(strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif"));
  67. }
  68.  
  69. }

  1. package org.img;
  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.  
  9. import org.jdesktop.swingx.util.OS;
  10.  
  11. public class OCR {
  12. private final String LANG_OPTION = "-l"; //英文字母小写l,并非数字1
  13. private final String EOL = System.getProperty("line.separator");
  14. private String tessPath = "C://Program Files//Tesseract-OCR"; //

注意这个路径,为安装的tesseract-OCR的路径

  1. //private String tessPath = new File("tesseract").getAbsolutePath();
  2.  
  3. public String recognizeText(File imageFile,String imageFormat)throws Exception{
  4. File tempImage = ImageIOHelper.createImage(imageFile,imageFormat);
  5. File outputFile = new File(imageFile.getParentFile(),"output");
  6. StringBuffer strB = new StringBuffer();
  7. List<String> cmd = new ArrayList<String>();
  8. if(OS.isWindowsXP()){
  9. cmd.add(tessPath+"//tesseract");
  10. }else if(OS.isLinux()){
  11. cmd.add("tesseract");
  12. }else{
  13. cmd.add(tessPath+"//tesseract");
  14. }
  15. cmd.add("");
  16. cmd.add(outputFile.getName());
  17. cmd.add(LANG_OPTION);
  18. cmd.add("chi_sim");
  19. //cmd.add("eng");
  20.  
  21. ProcessBuilder pb = new ProcessBuilder();
  22. pb.directory(imageFile.getParentFile());
  23.  
  24. cmd.set(1, tempImage.getName());
  25. pb.command(cmd);
  26. pb.redirectErrorStream(true);
  27.  
  28. Process process = pb.start();
  29. //tesseract.exe 1.jpg 1 -l chi_sim
  30. int w = process.waitFor();
  31.  
  32. //删除临时正在工作文件
  33. tempImage.delete();
  34.  
  35. if(w==0){
  36. BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8"));
  37.  
  38. String str;
  39. while((str = in.readLine())!=null){
  40. strB.append(str).append(EOL);
  41. }
  42. in.close();
  43. }else{
  44. String msg;
  45. switch(w){
  46. case 1:
  47. msg = "Errors accessing files.There may be spaces in your image's filename.";
  48. break;
  49. case 29:
  50. msg = "Cannot recongnize the image or its selected region.";
  51. break;
  52. case 31:
  53. msg = "Unsupported image format.";
  54. break;
  55. default:
  56. msg = "Errors occurred.";
  57. }
  58. tempImage.delete();
  59. throw new RuntimeException(msg);
  60. }
  61. new File(outputFile.getAbsolutePath()+".txt").delete();
  62. return strB.toString();
  63. }
  64. }

  1. package org.img;
  2. import java.io.File;
  3. import java.io.IOException;
  4.  
  5. public class TestOCR {
  6.  
  7. /**
  8. * @param args
  9. */
  10. public static void main(String[] args) {
  11. String path = "D:\\temp\\img\\untitled8.png";
  12. try {
  13. String valCode = new OCR().recognizeText(new File(path), "png");
  14. //6905_1294109277pAj9.jpg
  15. System.out.println(valCode);
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22.  
  23. }

对于报错,请检查tessPath 这个参数是否设置正确

本文参考以下两位的blog:

http://blog.csdn.net/foamflower/article/details/6110211

http://blog.csdn.net/zhoushuyan/article/details/5948289

tesseract-ocr 识别中文扫描图片的更多相关文章

  1. tesseract-ocr识别中文扫描图片实例讲解

    当我浏览http://code.google.com/p/tesseract-ocr并下载了几个文件下来之后顿时感到一头雾水,不知该如何下手.网上看到有人在linux操作系统下的实现, 如: 利用开源 ...

  2. 使用Tesseract OCR识别验证码

    1.下载Tessrac OCR,默认安装 2.把验证码code.jpg图片放在D盘 3.打开cmd,进入D盘,输入:tesseract  code.jpg result 4.进入D盘,生成了resul ...

  3. 身份证扫描识别/身份证OCR识别的正确姿势,你get到了吗?

    自从国家规定电信实名制之后,实名制已经推广到各个领域:办理通信业务需要实名制.银行开户需要实名制.移动支付需要实名制,就连注册个自媒体账户都需要实名制. 而实名制的背后,就是身份证信息的采集和录入验证 ...

  4. Python 进行 OCR识别 -- pytesseract库

    pip install pytesseract 报错:tesseract is not installed or it's not in your path 下载安装 Tesseract-OCR ht ...

  5. tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解

    本文来源:http://blog.csdn.net/wanghui2008123/article/details/37694307 本文参考http://blog.sina.com.cn/s/blog ...

  6. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  7. 深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  8. 【图片识别】java 图片文字识别 ocr (转)

    http://www.cnblogs.com/inkflower/p/6642264.html 最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为 ...

  9. 图片文字OCR识别-tesseract-ocr

    帮助文件:https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc 下载地址:https://github. ...

随机推荐

  1. Luogu P2002 消息扩散&&P1262 间谍网络

    怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...

  2. [Oracle]数据库的Control File 取Dump后的样例

    [Oracle]数据库的Control File 取Dump后的样例: 片段截取-------------------------------(size = 40, compat size = 40, ...

  3. nginx解决前端跨域配置

    在nginx.conf文件中 添加如上配置: 在ajax中将原来的 url:http://192.168.1.127:8905/findItem 改成:'http://localhost/findIt ...

  4. Centos7.4安装kvm虚拟机(使用virt-manager管理)

    之前介绍了使用WebVirtMgr或Openstack来部署及管理kvm虚拟机,下面简单介绍centos7.4下使用virt-manager部署及管理kvm虚拟机的做法: 0)KVM是什么 KVM(K ...

  5. mysql操作命令梳理(4)-grant授权和revoke回收权限

    在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke:grant授权格式:grant 权限列表 o ...

  6. 使用thinkphp框架实现Excel导入数据库

    之前讲过php实现Excel导出数据库的随笔,链接:https://www.cnblogs.com/nuanai/p/6727711.html 之前的项目用到较多的就是Excel导出,现在用到了Exc ...

  7. beta(3/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 协助后端完成历史记录接口.美食排行榜接口 完成食堂平面图的绘制 确定web端业 ...

  8. Java7和8在虚拟机上的差异:Perm Generation vs. Metaspace

  9. Windows命令行下如何使用批处理异步打开一个浏览器进程

    Browse.bat @echo off if '%1'=='-c' ( start /d "C:\Program Files\Google\Chrome\Application\" ...

  10. Log4Net日志配置

    1.添加Log4net.dll引用 将release版Log4net.dll拷贝到Lib文件夹,然后添加引用.