http://www.cnblogs.com/inkflower/p/6642264.html

最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为java使用的demo

在此之前,使用这个工具需要在本地安装OCR工具:

下面一个是一定要安装的离线包,建议默认安装

上面一个是中文的语言包,如果网络可以FQ的童鞋可以在安装的时候就选择语言包在线安装,有多种语言可供选择,默认只有英文的

exe安装好之后,把上面一个文件拷到安装目录下tessdata文件夹下

如C:\Program Files (x86)\Tesseract-OCR\tessdata下

然后下面两个是可选包,如果图片不做临时文件处理的话,可以不需要带的

首先是一个临时文件生成用的类以防源文件损坏,参考某位博友的例子@Gunner

package org.ink.image.textrz;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;  import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;  import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;  public class ImageIOHelper {private Locale locale=Locale.CHINESE;/*** user set locale Construct* @param locale*/public ImageIOHelper(Locale locale){this.locale=locale;}/*** default construct using default locale Locale.CHINESE*/public ImageIOHelper(){}/*** create tempFile of Image in order to prevent damaging original file* @param imageFile* @param imageFormat like png,jps .etc* @return TempFile of Image* @throws IOException*/public File createImage(File imageFile, String imageFormat) throws IOException {    Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat);    ImageReader reader = readers.next();    ImageInputStream iis = ImageIO.createImageInputStream(imageFile);    reader.setInput(iis);    IIOMetadata streamMetadata = reader.getStreamMetadata();    TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);    tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);    Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");    ImageWriter writer = writers.next();    BufferedImage bi = reader.read(0);    IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0));    File tempFile = tempImageFile(imageFile);    ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);    writer.setOutput(ios);    writer.write(streamMetadata, image, tiffWriteParam);    ios.close();iis.close();writer.dispose();    reader.dispose();    return tempFile;    }    /*** add suffix to tempfile* @param imageFile* @return* @throws IOException */private File tempImageFile(File imageFile) throws IOException {    String path = imageFile.getPath();    StringBuffer strB = new StringBuffer(path);    strB.insert(path.lastIndexOf('.'),"_text_recognize_temp");String s=strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif");Runtime.getRuntime().exec("attrib "+"\""+s+"\""+" +H"); //设置文件隐藏return new File(strB.toString()); }    }

下面是真正识别的内容:

package org.ink.image.textrz;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;import org.jdesktop.swingx.util.OS;    /*** TEXT Recognize Utils* @author ink.Flower**/
public class OCRUtil { private final String LANG_OPTION = "-l";  //英文字母小写l,并非数字1    private final String EOL = System.getProperty("line.separator");    private String tessPath = "C://Program Files (x86)//Tesseract-OCR";//ocr默认安装路径private String transname="chi_sim";//默认中文语言包,识别中文/*** Construct method of OCR ,set Tesseract-OCR install path* @param tessPath Tesseract-OCR install path* @param transFileName traningFile name like eng.traineddata*/public OCRUtil(String tessPath,String transFileName){this.tessPath=tessPath;this.transname=transFileName;}/*** Construct method of OCR,default path is "C://Program Files (x86)//Tesseract-OCR"*/public OCRUtil(){     }public String getTessPath() {return tessPath;}public void setTessPath(String tessPath) {this.tessPath = tessPath;}public String getTransname() {return transname;}public void setTransname(String transname) {this.transname = transname;}public String getLANG_OPTION() {return LANG_OPTION;}public String getEOL() {return EOL;}/*** recognize text in image* @param imageFile* @param imageFormat* @return text recognized in image* @throws Exception*/public String recognizeText(File imageFile,String imageFormat)throws Exception{    File tempImage = new ImageIOHelper().createImage(imageFile,imageFormat);    return ocrImages(tempImage, imageFile);   }    /*** recognize text in image* @param imageFile* @param imageFormat* @param locale* @return text recognized in image* @throws Exception*/public String recognizeText(File imageFile,String imageFormat,Locale locale)throws Exception{    File tempImage = new ImageIOHelper(locale).createImage(imageFile,imageFormat);return ocrImages(tempImage, imageFile);}/*** * @param tempImage* @param imageFile* @return* @throws IOException* @throws InterruptedException*/private String ocrImages(File tempImage,File imageFile) throws IOException, InterruptedException{File outputFile = new File(imageFile.getParentFile(),"output");Runtime.getRuntime().exec("attrib "+"\""+outputFile.getAbsolutePath()+"\""+" +H"); //设置文件隐藏StringBuffer strB = new StringBuffer();    List<String> cmd = new ArrayList<String>();    if(OS.isWindowsXP()){    cmd.add(tessPath+"//tesseract");    }else if(OS.isLinux()){    cmd.add("tesseract");    }else{    cmd.add(tessPath+"//tesseract");    }    cmd.add("");    cmd.add(outputFile.getName());    cmd.add(LANG_OPTION);    cmd.add(transname);    ProcessBuilder pb = new ProcessBuilder();    pb.directory(imageFile.getParentFile());    cmd.set(1, tempImage.getName());    pb.command(cmd);    pb.redirectErrorStream(true);    Process process = pb.start();    int w = process.waitFor();    tempImage.delete();//删除临时正在工作文件         if(w==0){    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8"));    String str;    while((str = in.readLine())!=null){    strB.append(str).append(EOL);    }    in.close();    }else{    String msg;    switch(w){    case 1:    msg = "Errors accessing files.There may be spaces in your image's filename.";    break;    case 29:    msg = "Cannot recongnize the image or its selected region.";    break;    case 31:    msg = "Unsupported image format.";    break;    default:    msg = "Errors occurred.";    }    tempImage.delete();    throw new RuntimeException(msg);    }    new File(outputFile.getAbsolutePath()+".txt").delete();    return strB.toString(); }
}

在实验中发现,如果对有多个文字的大图进行直接识别的话,效果可能比较差,所以可以参考另一篇切图的博文,将图片取一块之后再识别

http://www.cnblogs.com/inkflower/p/6642089.html     ←我是链接

这样成功率会提高很多。

以上为离线识别版本,效率因图而已,具体使用的时候可以总结分析

另外,博主也在网上看到百度也有图片文字识别的工具

百度OCR企业版

以上这个貌似是付费的,如果要免费的可以网上找找,另外API也可以找找

【图片识别】java 图片文字识别 ocr (转)相关推荐

  1. 票据识别android代码,Android 百度AI开放平台-文字识别-财务票据文字识别

    简单记录一下今天关于百度AI开放平台-文字识别-财务票据文字识别的实现过程 文字识别有对应的Android SDK集成及相关Demo,文档地址如下图: SDK目录图.png 但是SDK中的返回数据字段 ...

  2. 身份证识别,银行卡识别,驾驶证识别,行驶证识别,根据百度文字识别 api 封装,能快速识别身份证信息,银行卡信息,驾驶证信息,行驶证信息,使用非常方便

    OCR_identify 项目地址:wenchaosong/OCR_identify  简介:身份证识别,银行卡识别,驾驶证识别,行驶证识别,根据百度文字识别 api 封装,能快速识别身份证信息,银行 ...

  3. 【2】Python 视频文字识别提取 - Mp3 文字识别

    网络上没有很好的库用来文字识别,并且文字识别效率很低,这里我用了剪映接口 jianying.py from datetime import dateimport requests import jso ...

  4. delphi百度文字识别(支持通用文字识别、身份证识别、银行卡识别、驾驶证识别、行驶证识别、车牌识别等功能)

    下载链接:https://download.csdn.net/download/liushenglin123/12363729 delphi百度文字识别 支持 通用文字识别.通用文字识别(高精度版). ...

  5. java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字

    转自:https://blog.csdn.net/a745233700/article/details/80203340java java调用tess4j识别图像文字 Tesseract-OCR支持中 ...

  6. java ocr文字识别软件_Java文字识别软件-调用百度ocr实现文字识别

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  7. 微信小程序图片上传(文字识别)

    要点:OCR文字识别 图片上传 在最近的项目中遇到需要进行OCR识别,中间遇到的坑记录一下 OCR接口:采用百度OCR通用文字识别 在进行调试过程中遇到下列问题: 百度ocr接口1.对图片经行base ...

  8. python处理pdf实例_Python程序图片和pdf上文字识别实例

    实例一:先减少背景杂音,再做图片文字识别 为了提高识别率,先用opencv-python对扫描的图片做预处理(减少背景杂音),然后调用pytesseract识别图片上的文字.处理方式就是: 学习Pyt ...

  9. 图片文字识别 mysql_截图 文字识别

    主: import keyboard # 键盘控制 from PIL import ImageGrab # 获取剪切板的文件 import time import sys from baidu imp ...

  10. 【效率特工队】怎样完成俄语图片识别文字、韩语文字识别、日语文字识别,截图即识别出文字(无需安装)

    软件无需安装, 适用于Windows 系统,具有截图文字识别,拖拽文字识别,打开图片文件文字识别三种 文字提取等功能,亦可用于图片和PDF中文字的识别提取中. 软件下载地址:https://share ...

最新文章

  1. 测试服务命名和动态注册路由的方式@Xan
  2. 每个程序员都应该读的书
  3. 如何建立JSP操作用以提高数据库访问效率
  4. 数据库中间件 MyCAT源码分析:【单库单表】插入【推荐阅读】
  5. 【数据平台】sklearn库特征工程之特征选择和降维
  6. MATLAB基础教程(5)——斐波那契数列
  7. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
  8. Dotnet程序集自动生成版本号
  9. 【http协议2】 深入理解HTTP协议
  10. 3月7日 当前动力电池竞争格局
  11. 推荐C语言视频<<跟着星仔学C语言>>
  12. Eclipse使用基础教程
  13. 外地人排北京新能源指标需要什么条件?需要摇号吗?
  14. 汉语语法和英语语法的区别
  15. 课程回顾丨基于FPGA的OFDM可见光通信系统实现
  16. 【工业革命】第四次工业革命:自主经济的崛起
  17. 宋登高 php,HDwiki百科建站第一期
  18. 电路单位本质与dB家族
  19. 人工智能新目标——看懂视频
  20. scratch(图形化编程工具)3.28.0版本更新了!

热门文章

  1. hbase删除表失败的解决方法
  2. ios动画效果集锦(持续更新)
  3. Struts2笔记——struts常用标签
  4. .NET项目发布网站具体步骤和注意事项
  5. WinPE ISO制作
  6. 2月上旬全球六大顶级域名最新动态 .COM占73.3%
  7. ubuntu下面安装Keil uvision4与入门实例
  8. Java加载sklearn训练好的模型进行预测(无法搞定)
  9. hbase shell显示时间与系统时间不同
  10. ModuleNotFoundError: No module named 'django.core.urlresolvers'