当前位置: 首页 > news >正文

JAVA Tesseract OCR引擎

        Tess4j是一个基于Tesseract OCR引擎的Java库, Tesseract库最初由惠普实验室于1985年开发,后来被Google收购并于2006年开源。识别效果不好,速度还慢,但是好早好早了。

一、POM依赖 

   <!--OCR识别https://digi.bib.uni-mannheim.de/tesseract/tessdata_fast/ 训练文件下载--><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.12.0</version>            </dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.14.0</version></dependency>

记的要下载训练文件 chi_sim.traineddata 

二、配置文件 TesseractOcrConfiguration

import cn.cakeerp.util.StrUtil;
import net.sourceforge.tess4j.Tesseract;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class TesseractOcrConfiguration {@Beanpublic Tesseract tesseract() {Tesseract tesseract = new Tesseract();// 设置训练数据文件夹路径tesseract.setDatapath(StrUtil.erpConfig.getTraineddata());// 设置为中文简体tesseract.setLanguage("chi_sim");return tesseract;}
}

三、使用

    @Resourceprivate Tesseract tesseract;//直接就可以识别,也可以System.out.println(tesseract.doOCR(new File("d:\\2.jpg")));//也可以从 MultipartFile imageFile 里面识别InputStream is = null;try {is = new ByteArrayInputStream(imageFile.getBytes());BufferedImage bufferedImage = ImageIO.read(is);String textStr = tesseract.doOCR(bufferedImage);if (null == textStr || textStr.trim().equals("")) {return JsonResult.failed("识别失败,结果为空.");}          log.error("识别内容为:{}", textStr);return JsonResult.failed("未识别到订单号", -1);} catch (Exception e) {return JsonResult.failed(e.getMessage(), -1);} finally {if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}

后续  在官方的仓库中下载到了最新的训练文件 50.2MB结果测试效果还是没啥变化,里面也没有什么可配置的参数。不知道别人怎么用呢。

tessdoc/Data-Files.md at main · tesseract-ocr/tessdoc · GitHub 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Groovy vs Kotlin 在Gradle配置文件中的差异与选择
  • 防火墙安全策略用户认证综合实验
  • 火柴棒图python绘画
  • Spring中@Transactional的实现和原理
  • 嵌入式驱动源代码(9):Linux内核移植
  • 我的前端实习之旅
  • PyCharm\VsCode——Python第三方库下载换源
  • 老年生活照护实训室:为养老服务业输送专业人才
  • 如何挑选适合的需求池管理系统?10款优质工具分享
  • 韦尔股份:深蹲起跳?
  • Flexcel学习笔记
  • 32 华三vlan案例+STP
  • 堆叠的作用
  • 代理模式和Java中的动态代理【开发实践】
  • Linux——多线程(五)
  • @jsonView过滤属性
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Angular 2 DI - IoC DI - 1
  • CentOS6 编译安装 redis-3.2.3
  • Computed property XXX was assigned to but it has no setter
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • overflow: hidden IE7无效
  • PhantomJS 安装
  • Web设计流程优化:网页效果图设计新思路
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 排序(1):冒泡排序
  • 前端路由实现-history
  • 三栏布局总结
  • 算法-插入排序
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # Redis 入门到精通(七)-- redis 删除策略
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #图像处理
  • $.ajax()方法详解
  • $.ajax中的eval及dataType
  • (1)Jupyter Notebook 下载及安装
  • (23)Linux的软硬连接
  • (4)STL算法之比较
  • (AngularJS)Angular 控制器之间通信初探
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二)hibernate配置管理
  • (二十三)Flask之高频面试点
  • (六)Hibernate的二级缓存
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (五)关系数据库标准语言SQL
  • (转)可以带来幸福的一本书
  • (转)原始图像数据和PDF中的图像数据