识别率很高的java文字识别技术_java

java文字识别程序的关键是寻找一个可以调用的OCR引擎。tesseract-ocr就是一个这样的OCR引擎,在1985年到1995年由HP实验室开发,现在在Google。tesseract-ocr 3.0发布,支持中文。不过tesseract-ocr 3.0不是图形化界面的客户端,别人写的FreeOCR图形化客户端还不支持导入新的 3.0 traineddata。但这标志着,现在有自由的中文OCR软件了。

java中使用tesseract-ocr3.01的步骤如下: 

1.下载安装tesseract-ocr-setup-3.01-1.exe(3.0以上版本才增加了中文识别) 

2.在安装向导中可以选择需要下载的语言包。 

3.到网上搜索下载java图形处理所需的2个包:jai_imageio-1.1-alpha.jar,swingx-1.6.1.jar 

4.java程序清单: 

ImageIOHelper 类:

 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 { 

 public static File createImage(File imageFile, String imageFormat) {
  File tempFile = null;
  try {
   Iterator readers = ImageIO.getImageReadersByFormatName(imageFormat);
   ImageReader reader = readers.next(); 

   ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
   reader.setInput(iis);
   //Read the stream metadata
   IIOMetadata streamMetadata = reader.getStreamMetadata(); 

   //Set up the writeParam
   TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);
   tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); 

   //Get tif writer and set output to file
   Iterator writers = ImageIO.getImageWritersByFormatName("tiff");
   ImageWriter writer = writers.next(); 

   BufferedImage bi = reader.read(0);
   IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0));
   tempFile = tempImageFile(imageFile);
   ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);
   writer.setOutput(ios);
   writer.write(streamMetadata, image, tiffWriteParam);
   ios.close(); 

   writer.dispose();
   reader.dispose(); 

  } catch (IOException e) {
   e.printStackTrace();
  }
  return tempFile;
 } 

 private static File tempImageFile(File imageFile) {
  String path = imageFile.getPath();
  StringBuffer strB = new StringBuffer(path);
  strB.insert(path.lastIndexOf('.'),0);
  return new File(strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif"));
 } 

}

OCR 类:

 package com.hhp.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.jdesktop.swingx.util.OS; 

public class OCR {
 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";
 //private String tessPath = new File("tesseract").getAbsolutePath(); 

 public String recognizeText(File imageFile,String imageFormat)throws Exception{
  File tempImage = ImageIOHelper.createImage(imageFile,imageFormat);
  File outputFile = new File(imageFile.getParentFile(),"output");
  StringBuffer strB = new StringBuffer();
  List cmd = new ArrayList();
  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("chi_sim");
  //cmd.add("eng"); 

  ProcessBuilder pb = new ProcessBuilder();
  pb.directory(imageFile.getParentFile()); 

  cmd.set(1, tempImage.getName());
  pb.command(cmd);
  pb.redirectErrorStream(true); 

  Process process = pb.start();
  //tesseract.exe 1.jpg 1 -l chi_sim
  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();
 }
}

  

测试类TestOCR :

import java.io.File;
import java.io.IOException;

import com.hhp.util.OCR;

public class OcrTest {

 public static void main(String[] args) {
  String path = "C://temp//OCRcode//4.png";
  System.out.println("ORC Test Begin......");
  try {
   String valCode = new OCR().recognizeText(new File(path), "png");
   System.out.println(valCode);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.out.println("ORC Test End......");
 } 

}

经过测试,tesseract-ocr 3.01的文字识别率很高,对于网站中常见的验证码识别率也很高。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java文字识别技术
, java文字识别率
java文字识别
java 识别图片文字、java 文字识别、java识别图片中文字、java语音识别成文字、java实现图片文字识别,以便于您获取更多的相关知识。

时间: 2024-08-01 07:23:41

识别率很高的java文字识别技术_java的相关文章

数据库-Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升

问题描述 Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升 请教一个让我不解的问题: 我有一张表TT,数据大概是240W,其中的一个字段COL1的值只有'0'和'1'两个.现在有如下查询:SELECT COL2,SUM(NVL(COL3,0) * nvl(COL4,0)) FROM TT WHERE COL1 = '0' GROUP BY COL2; 在查询耗时大概是 50s. 为了提高性能,在TT表的COL1字段上创建了位图索引,查询耗时变为 2s 但是由于我需要对TT表

山东威海海景房中看不中住空置率很高

"南京每周至少有一两百人去威海看房."一位在威海有开发项目的浙江开发商刘文(化名)告诉记者,就地域分布来看,乳山市其实就是一个县级市,地理位置就相当南京的高淳,不过由于乳山拥有较好的海岸资源,因此其也成为威海最早开发房地产投资项目的县级市,不过由于开发商一股脑儿地抢占地盘,使得乳山的房地产开发项目多如牛毛,而在竞争激烈的市场氛围下,有些开发商也就做出了强买强卖的过激行为.威海的海景房住的人非常少. 央视记者所拍照片 南京销售处已少一半 刘文说,威海楼盘最火的时候应该在两年前,到那里看房

弹出率很高的网页弹窗代码

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前段时间一直在寻觅一款适合自己弹窗代码,需求是这样: 1. 比较高的弹出率.这个是必须的,而且是针对IE6.IE7.FireFox.遨游.遨游2.Netscape等都有高弹出率.否则放弹窗的意义就大大降低了; 2. 能够在规定的时间(如24小时)内,只弹出一次; 3. 能够在普通弹出失败后,在用户点击后继续弹出窗口.这样就可以大大提高弹出率,可以达到80%以上! 其实网上像这样的代码还是很多的,但是能让人称心如意的不多.不是被杀毒软件报毒,就是弹出

很简单的Java断点续传实现原理_java

原理解析 在开发当中,"断点续传"这种功能很实用和常见,听上去也是比较有"逼格"的感觉.所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网络上也能找到不少关于实现类似功能的资料.但是呢,大多数都是举个Demo然后贴出源码,真正对其实现原理有详细的说明很少. 于是我们在最初接触的时候,很可能就是直接Crtl + C/V代码,然后捣鼓捣鼓,然而最终也能把效果弄出来.但初学时这样做其实很显然是有好有坏的. 好处在于,源码很多,解释很少:如果我们肯下功

整理很详细的Java正则表达式使用大全_java

本文的全部内容都是针对Java正则表达式语法进行整理的,分享给大家: [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"

中国人工智能学会通讯——文字识别技术现状、挑战及机遇

今天非常高兴在这里作一个文字识别的技术现状.目前存在的问题及挑战.学术研究和商业应用机遇,以及未来技术发展趋势的报告. 首先简要谈一下人工智能.去年3月份,美国纽约时报采访了硅谷一些IT的大神们,请他们谈一下未来IT领域当中什么方向是潜在的爆发点,当时很多专家都不约而同谈到一个观点,就是人工智能很可能是未来IT领域的大事件.其实不仅仅是在工业界,在计算机学术界乃至整个科学界,人工智能过去几年都是非常热门的研究话题,举例来说,在过去两年,与深度学习和机器学习相关的文章已经有5次上了Nature或S

Android ocr识别文字介绍(文字识别)

       最近在做身份证号码识别,在网上搜索的一番后发现目前开源的OCR中tesseract-ocr算是比较强大的了,它由HP于1985年到1995年间开发,后来由google直接负责,经过谷歌进一步开发后,目前的tesseract-ocr有了显著的改进. tesseract-ocr和Leptonica图像库一起工作,它可以读取多种图像格式,并将其转换成超过60种语言的文本.可以工作在Linux,Windows,Mac OSX等系统上,并且可以在android和iphone平台上编译. 目前

捷速ocr文字识别软件怎么用

在工作生活中,很多工作者都会遇到需要将图片中的文字提取出来的问题,特别是那些编辑工作者,他们需要将网页.书本.杂志上的各种有用资源提取出来加以利用,而很多时候我们都不能轻易的提取,虽然网页上的内容提取相比较简单一些,但是现在一些网站设置了无法使用复制键,大家也无法对其提取文字.对于这种问题大家该如何解决呢?很多用户都有这个疑问,在这里我就向大家推荐一款针对文字提取问题所研发出来的软件--捷速OCR文字识别软件,这里大家就会疑问了,捷速OCR文字识别软件该怎么用了?不用担心,下面我就为大家详细介绍

文字识别刷新世界纪录,海康威视浦世亮新智元“AI春节”解密安防大数据 | 新智元峰会演讲

日前,海康威视研究院预研团队基于深度学习技术的 OCR(Optical Character Recognition,图像中文字识别)技术,刷新了 ICDAR Robust Reading 竞赛数据集的全球最好成绩,并在"互联网图像文字"."对焦自然场景文字"和"随拍自然场景文字"三项挑战的文字识别(Word Recognition)任务中取得第一.   ICDAR(International Conference on Document Anal