java文字识别技术(亲测,识别率很高)

本文涉及的产品
OCR统一识别,每月200次
票据凭证识别,票据凭证识别 200次/月
通用文字识别,通用文字识别 200次/月
简介: java文字识别程序的关键是寻找一个可以调用的OCR引擎。tesseract-ocr就是一个这样的OCR引擎,在1985年到1995年由HP实验室开发,现在在Google。tesseract-ocr 3.0发布,支持中文。

   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 类:

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

OCR 类:

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

测试类TestOCR :

  1. import java.io.File;
  2. import java.io.IOException;
  3. import com.hhp.util.OCR;
  4. public class OcrTest {
  5.  public static void main(String[] args) {
  6.         String path = "C://temp//OCRcode//4.png";
  7.         System.out.println("ORC Test Begin......");
  8.         try {
  9.             String valCode = new OCR().recognizeText(new File(path), "png");
  10.             System.out.println(valCode);
  11.         } catch (IOException e) {
  12.             e.printStackTrace();
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.         System.out.println("ORC Test End......");
  17.     }
  18. }

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

原文地址http://www.bieryun.com/558.html

相关文章
|
16天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
45 11
|
25天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
60 7
|
2月前
|
机器学习/深度学习 数据采集 文字识别
7大核心技术:智能OCR如何助力市政单位文档处理数字化转型
随着政务服务数字化的推进,市政单位面临复杂的文档处理需求。本文介绍了一种基于智能OCR技术的一站式文档处理方案,涵盖数据矫正、通用文字识别、表格与票据结构化提取、卡证分类、印章检测、手写文字识别及图像内容识别等核心技术,显著提升工作效率与文档解析的准确性。
|
7天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
25天前
|
机器学习/深度学习 文字识别 自然语言处理
医疗行业化验单智能识别技术探讨:OCR与表格识别的应用
本文探讨了OCR与表格识别技术在医疗化验单处理中的应用,通过自动化数据提取和录入,显著提高了效率和准确性,降低了人工劳动强度和错误率。技术实现包括图像预处理、文字识别和表格解析等核心算法的优化,支持与医院信息管理系统集成,未来将向跨模态数据融合、多语言适配及数据安全方向发展。
|
26天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
数据采集 人工智能 文字识别
如何绕过Captcha并使用OCR技术抓取数据
在现代网页数据抓取中,Captcha作为一种防止爬虫和恶意访问的措施,广泛应用于各种网站。本文介绍如何使用OCR技术绕过文字Captcha,并通过代理IP技术提高爬虫的隐蔽性。具体实现包括下载Captcha图片、使用Tesseract OCR识别文字、通过代理IP抓取目标数据。示例代码展示了如何抓取大众点评的商家信息。
如何绕过Captcha并使用OCR技术抓取数据
|
2月前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
54 1
|
2月前
|
存储 人工智能 文字识别
AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
本文介绍了纸质档案数字化的技术流程,包括高精度扫描、图像预处理、自动边界检测与切割、文字与图片分离抽取、档案识别与文本提取,以及识别结果的自动保存。通过去噪、增强对比度、校正倾斜等预处理技术,提高图像质量,确保OCR识别的准确性。平台还支持多字体识别、批量处理和结构化存储,实现了高效、准确的档案数字化。具体应用案例显示,该技术在江西省某地质资料档案馆中显著提升了档案管理的效率和质量。