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

本文涉及的产品
小语种识别,小语种识别 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

相关文章
|
1月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
67 11
|
1月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
71 7
|
2月前
|
机器学习/深度学习 数据采集 文字识别
7大核心技术:智能OCR如何助力市政单位文档处理数字化转型
随着政务服务数字化的推进,市政单位面临复杂的文档处理需求。本文介绍了一种基于智能OCR技术的一站式文档处理方案,涵盖数据矫正、通用文字识别、表格与票据结构化提取、卡证分类、印章检测、手写文字识别及图像内容识别等核心技术,显著提升工作效率与文档解析的准确性。
|
15天前
|
编解码 文字识别 自然语言处理
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
### 简介 【批量识别图片内容重命名】工具可批量识别图片中的文字并重命名文件,方便高效处理大量图片。然而,OCR 技术面临字符识别错误(如形近字混淆、生僻字识别不佳)、格式错误(段落错乱、换行问题)和语义理解错误等挑战。为提高准确性,建议提升图片质量、选择合适的 OCR 软件及参数,并结合自动校对与人工审核,确保最终文本的正确性和完整性。
69 12
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
|
27天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
13天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
机器学习/深度学习 文字识别 自然语言处理
医疗行业化验单智能识别技术探讨:OCR与表格识别的应用
本文探讨了OCR与表格识别技术在医疗化验单处理中的应用,通过自动化数据提取和录入,显著提高了效率和准确性,降低了人工劳动强度和错误率。技术实现包括图像预处理、文字识别和表格解析等核心算法的优化,支持与医院信息管理系统集成,未来将向跨模态数据融合、多语言适配及数据安全方向发展。
|
1月前
|
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技术抓取数据

热门文章

最新文章