文档章节

Tesseract-OCR Windows下Java代码实现

Jerry_Li-007
 Jerry_Li-007
发布于 2016/06/30 11:20
字数 571
阅读 161
收藏 0

一、项目背景

        基于图片文字识别的需求,在系统中实现此功能。

二、实现思路

        前台上传需要识别的图片,后台接收到图片进行识别,将识别结果(文字字符串)返回给前台,本文着重介绍识别部分的简单实现,上传功能不做介绍。

三、实现过程

        新问题往往需要使用新的技术去解决,过程也许是曲折艰辛的,但结果总是证明了我们的成长。直接进入正题吧,本文使用Tesseract-OCR,官方地址https://code.google.com/p/tesseract-ocr/,Maven仓库可参考http://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j/3.2.0

1.新建maven项目,在pom.xml中添加依赖包,并在lib路径下添加.dll文件

2.将.dll文件添加到windows系统中,将jai-imageio-core.jar加到jdk的lib中

3.项目中新建tessdata文件夹,放置字库等信息

(eng.traineddata文件对应英文字库,可将下载好的中文字库chi_sim.traineddata重命名替换eng.traineddata,就可解析中文,当然也有其他办法,可自行研究)

以上相当于配置tesseract-ocr环境

4.识别代码


   /**
	 * 提交图片解析
	 * @param bpmProspectingStr 
     *                          其他一并提交参数
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "mSave")
	public Map<String,Object> mSave(HttpServletRequest request, HttpServletResponse response,String bpmProspectingStr) throws IOException {
		Map<String, Object> map = Maps.newHashMap();
		List<SystemInfo> result = Lists.newArrayList();
		MultipartFile multipartFile = null;
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		if(!multipartResolver.isMultipart(request)) { //判断request是否有文件上传
			result.add(new SystemInfo("error", AppInfo.getStateInfo(AppInfo.NOT_MULTIPART_CONTENT)));
			return map;
		}
		//上传图片
		String photoFileName =  UploadUtil.mobileUpload(request, response, configJSONPath);

		String contentPath = request.getContextPath();
		String realPath = request.getSession().getServletContext().getRealPath(contentPath);
		realPath = realPath.substring(0,realPath.lastIndexOf("smartinspection"));
		String path="static/upload/";
		realPath = realPath+path+photoFileName;
		MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;  //multipartResolver.resolveMultipart(request);
		Iterator<String> iterator = multiRequest.getFileNames();
		while (iterator.hasNext()) {
			multipartFile = multiRequest.getFile(iterator.next()); 
			if (multipartFile != null) {
				result.add(new SystemInfo("error", AppInfo.getStateInfo(AppInfo.NOTFOUND_UPLOAD_DATA)));
				String reStr = getLocation(realPath);
				map.put("reStr", reStr);
				break;
			}else{
				continue;
			}
		}
		map.put("status", "true");
		return map;
	}

	private String getLocation(String filePath) throws IOException {
		BufferedImage image = null;
		File imagefile = null;
		//you can either use URL or File for reading image using ImageIO
		imagefile = new File(filePath);
		File dataFile = imagefile;
		File tempImage = ImageIOHelper.createImage(dataFile, "jpg");
		if(dataFile.exists()){
			ImageIO.scanForPlugins();
			Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping
			System.err.println("检验环境是否支持TIFF");
			String format="tif";
			Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(format);
			System.out.println(readers.hasNext());
			Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
			System.out.println(writers.hasNext());
			try {
				capctha = instance.doOCR(tempImage).trim();
				System.err.println("解析结果capctha is: "+capctha);
			} catch (TesseractException e) {
				e.printStackTrace();
			}
		} else {
			System.err.println("找不到文件");
		}
		return capctha;
	}

 

© 著作权归作者所有

Jerry_Li-007
粉丝 1
博文 6
码字总数 4661
作品 0
西安
高级程序员
私信 提问
Tesseract-ocr文字识别

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

御风林海
2015/05/28
0
1
深入学习Tesseract-ocr识别中文并训练字库的方法

  上篇文章简单的学习了tesseract-ocr识别图片中的英文(链接地址如下:https://www.cnblogs.com/wj-1314/p/9428909.html),看起来效果还不错,所以这篇文章继续深入学习tesseract-ocr识别...

战争热诚
2018/08/14
0
0
Java 验证码识别库 Tess4j 学习

Java 验证码识别库 Tess4j 学习 【在用java的Jsoup做爬虫爬取数据时遇到了验证码识别的问题(基于maven),找了网上挺多的资料,发现Tess4j可以自动识别验证码,在这里简单记录下学习过程及遇...

_TBHacker
2018/08/01
0
0
Windows下Tesseract4.0识别与中文手写字体训练

一 、 tesseract 4.0 安装及使用 1. tesseract 4.0 安装 安装包下载地址: http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe exe可执行文件直接安装,选择安装...

qq_37674858
2018/05/16
0
0
一验证码识别的小程序源码

前些天,12306这个网站挺火的,看到网上出现了各种各样的登陆、订票插件跟程序。虽然没经历过春运,看到网上各种各样的插件跟工具挺有意思的,下载了几个看了看,都挺不错的。印象中有个jav...

晨曦之光
2012/05/16
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

idea运行spring boot(推荐)

下载idea 注册激活:http://idea.lanyus.com/ 照着网上的步骤创建spring boot,这里记录存在的坑 首先gradle需要在本地配置环境变量,配制成本地的,联网下载的话要很久很久 第一次不要使用g...

安卓工程师王恒
4分钟前
0
0
java final学习笔记

代码如下:class Circle{ double r; double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { System.out.......

hellation_
23分钟前
0
0
JavaConfig版

中心思想:去xml配置文件。 在Spirng Boot和Spring Cloud中,大量使用了注解与JavaConfig。 xml文件 对应的Java类 spring.xml SpringConfig.java spring-mvc.xml SpringMvcConfig.java web.x...

流小文
42分钟前
4
0
Go 定时器内部实现原理剖析

前言 前面我们介绍了一次性定时器Timer和周期性定时器Ticker,这两种定时器内部实现机制相同。创建定时器的协程并不负责计时,而是把任务交给系统协程,系统协程统一处理所有的定时器。 本节...

恋恋美食
47分钟前
0
0
分布式协调神器 ZooKeeper 之整体概述

ZooKeeper 最早起源于雅虎研究院的一个研究小组。当时,雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就...

别打我会飞
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部