Mac Java 使用 tesseract 进行 ORC 识别

在 Java 开发中使用图片转文字时,难免会遇到问题,比如我使用 Mac (M1 芯片) 系统进行开发,就出现报错。

博主博客

  • https://blog.uso6.com
  • https://blog.csdn.net/dxk539687357

一、直接使用

1. 使用 brew 进行安装

brew install tesseract

如果是其他系统的, 建议看 官方文档 进行安装。

2. 查看版本

nukix@nukixPC ~ % tesseract --version
tesseract 5.5.0
leptonica-1.85.0
libgif 5.2.2 : libjpeg 8d (libjpeg-turbo 3.0.4) : libpng 1.6.44 : libtiff 4.7.0 : zlib 1.2.12 : libwebp 1.4.0 : libopenjp2 2.5.2
Found NEON
Found libarchive 3.7.7 zlib/1.2.12 liblzma/5.6.3 bz2lib/1.0.8 liblz4/1.10.0 libzstd/1.5.6
Found libcurl/8.7.1 SecureTransport (LibreSSL/3.3.6) zlib/1.2.12 nghttp2/1.62.0

3. 查看安装路径

brew list tesseract

比如我安装路径是 /opt/homebrew/Cellar/tesseract/5.5.0, 下面会用到。

4. 在图片中识别文字(英文)

tesseract abc.jpg out.txt -l eng

命令 tesseract 图片路径 输出文件 -l 语言码, 我上面的命令识别出来的结果会在 out.txt 文件中。

语言码可以在 这里 找到。

5. 语言包下载

语言包传送门: tessdata

根据自己需要下载对应的语言包, 比如中文的语言包是 chi_tra.traineddata。

下载后放到 tessdata 目录下面, 比如我的目录在 /opt/homebrew/Cellar/tesseract/5.5.0/share/tessdata

二、Java API 调用

2.1 导入 Maven 库

因为 tesseract 是一个 C 语言库, 所以不能直接使用,官方推荐了其他语言一些第三方封装库可以在 这里 查看, 而 Java 是 tess4j。

Gradle(short)
implementation 'net.sourceforge.tess4j:tess4j:5.13.0'
Maven
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.13.0</version>
</dependency>

2.2 Java 调用

根据 文档 的案例,可以这样调用。

package tess4j.example;import java.io.File;
import net.sourceforge.tess4j.*;public class TesseractExample {public static void main(String[] args) {// System.setProperty("jna.library.path", "32".equals(System.getProperty("sun.arch.data.model")) ? "lib/win32-x86" : "lib/win32-x86-64");File imageFile = new File("eurotext.tif");ITesseract instance = new Tesseract();  // JNA Interface Mapping// ITesseract instance = new Tesseract1(); // JNA Direct Mapping// File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Maven build bundles English data// instance.setDatapath(tessDataFolder.getPath());try {String result = instance.doOCR(imageFile);System.out.println(result);} catch (TesseractException e) {System.err.println(e.getMessage());}}
}

2.3 java.lang.UnsatisfiedLinkError: Unable to load library ‘tesseract’

问题

不出意外的话会有这一个异常,运行库中没有 tesseract 库。

java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract':
dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Users/nukix/Library/Java/JavaVirtualMachines/openjdk-18.0.2.1/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Users/nukix/Library/Java/JavaVirtualMachines/openjdk-18.0.2.1/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Users/nukix/Library/Java/JavaVirtualMachines/openjdk-18.0.2.1/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Users/nukix/Library/Java/JavaVirtualMachines/openjdk-18.0.2.1/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
dlopen(/Users/nukix/Library/Frameworks/tesseract.framework/tesseract, 0x0009): tried: '/Users/nukix/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/nukix/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/Users/nukix/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Library/Frameworks/tesseract.framework/tesseract' (no such file, not in dyld cache)
dlopen(/Library/Frameworks/tesseract.framework/tesseract, 0x0009): tried: '/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Library/Frameworks/tesseract.framework/tesseract' (no such file, not in dyld cache)
dlopen(/System/Library/Frameworks/tesseract.framework/tesseract, 0x0009): tried: '/System/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/System/Library/Frameworks/tesseract.framework/tesseract' (no such file), '/System/Library/Frameworks/tesseract.framework/tesseract' (no such file, not in dyld cache)
Native library (darwin-aarch64/libtesseract.dylib) not found in resource path (/Users/nukix/AndroidStudioProjects/nukix/TestWeb/build/classes/java/main:/Users/nukix/AndroidStudioProjects/nukix/TestWeb/build/resources/main)at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:325) ~[jna-5.14.0.jar:5.14.0 (b0)]at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:481) ~[jna-5.14.0.jar:5.14.0 (b0)]at com.sun.jna.Library$Handler.<init>(Library.java:197) ~[jna-5.14.0.jar:5.14.0 (b0)]at com.sun.jna.Native.load(Native.java:618) ~[jna-5.14.0.jar:5.14.0 (b0)]at com.sun.jna.Native.load(Native.java:592) ~[jna-5.14.0.jar:5.14.0 (b0)]at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java:83) ~[tess4j-5.13.0.jar:5.13.0]at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42) ~[tess4j-5.13.0.jar:5.13.0]at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:353) ~[tess4j-5.13.0.jar:5.13.0]at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:202) ~[tess4j-5.13.0.jar:5.13.0]at net.sourceforge.tess4j.ITesseract.doOCR(ITesseract.java:59) ~[tess4j-5.13.0.jar:5.13.0]
解决

根据报错的路径, 把文件复制过去, 比如我报错的路径是 /Users/nukix/Library/Frameworks/tesseract.framework/tesseract

先创建文件夹

mkdir -p /Users/nukix/Library/Frameworks/tesseract.framework

复制文件

cp /opt/homebrew/Cellar/tesseract/5.5.0/share/tessdata /Users/nukix/Library/Frameworks/tesseract.framework

2.4 Error opening data file ./eng.traineddata

问题

不出意外的话,会提示找不到语言包。

Error opening data file ./eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
解决

这时候就需要配置环境变量,如果是使用 IDEA 进行开发,可以在菜单栏找到 Run->Edit Configurations...->Environment variables 进行设置。

比如我需要设置 TESSDATA_PREFIX=/opt/homebrew/Cellar/tesseract/5.5.0/share/tessdata,路径上面有提,这里就不在赘述。

再次运行正常情况就能打印出识别的结果。

参考文献

  • Tesseract documentation#Introduction
  • Tesseract documentation#tessdoc
  • Development with Tess4J
  • mac os 使用tesseract 进行ORC识别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14123.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

希音面试:亿级用户 日活 月活,如何统计?(史上最强 HyperLogLog 解读)

本文原文链接 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 如何 统计一个 网站 的日活、月活数&a…

2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 B题 城市轨道交通列车时刻表优化问题 原题再现&#xff1a; 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。列车时刻表规定了列车在每个车站的到达和出发&#xff08;或通过&#xff09;时刻&#xff0c;其在实际…

Python数据分析NumPy和pandas(三十一、数据聚合)

聚合是指从数组生成标量值的数据转换。上一次学习的代码示例使用了其中几个聚合函数&#xff0c;包括 mean、count、min 和 sum。常见的聚合见下图列表&#xff0c;但是&#xff0c;不仅限于列表中的这组方法。在 GroupBy 对象上调用聚合函数&#xff08;例如&#xff1a; mean…

公链数字钱包开发与加密钱包App原生开发

随着区块链技术的不断发展&#xff0c;数字货币和去中心化金融&#xff08;DeFi&#xff09;的兴起&#xff0c;公链数字钱包的需求日益增加。数字钱包不仅为用户提供存储、管理和交易数字资产的工具&#xff0c;而且也为区块链技术的应用提供了一个重要的入口。开发一个安全、…

0. 0:《跟着小王学Python·新手》

《跟着小王学Python新手》系列 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的核心概念。通过开发游戏、构…

HTTPTomcatServle之HTTP详解

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

「数据要素」行业简报|2024.11.上刊

纵观数据要素行业动态&#xff0c;洞察行业风向&#xff0c;把握行业脉搏&#xff01; 一、政策发布 1、《山东省公共数据资源登记管理工作规范(试行)》公开征求意见 11月7日&#xff0c;为认真贯彻落实《中共中央办公厅 国务院办公厅关于加快公共数据资源开发利用的意见》《…

NFS Write IO 不对齐深度分析

背景 最近团队小伙伴弗曼统计了线上用户数据写入对齐情况&#xff0c;通过统计数据发现了一个有趣的现象: 用户写入请求中近 70% 的数据块 4K 不对齐&#xff0c;这也就是说 NFSClient 对大多数的应用写入没有做对齐优化。 下面会从 NFSClient BufferWrite 实现流程的维度解释…

微型导轨在自动化生产线中起什么作用?

在现代制造业的飞速跃进中&#xff0c;自动化生产线的蓬勃发展引领了一场效率与质量的双重革命。微型导轨作为传动领域的重要零部件&#xff0c;可用于工业自动化生产线上的零件运输、加工设备定位等&#xff0c;实现自动化生产和减少人力成本。那么&#xff0c;微型导轨在自动…

【ESP32】DIY一个电子测光仪

这里写目录标题 0 前言1 开箱2 过程2.1 下载固件2.2 烧录固件2.3 编程环境 Thonny2.4 点灯大师2.5 TFT屏幕2.6 BH1750传感器 成果展示 0 前言 开发板&#xff1a;ESP32-S3-5691 开发环境&#xff1a;circuitpythonthony 1 开箱 2 过程 2.1 下载固件 使用circuitpython的方式开…

MSA+抑郁症模型总结

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&#x1f3a5; 希望在…

解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题 项目问题问题描述解决方案具体实现 项目问题 在 Jenkins 中使用 Git 参数插件 进行参数化构建&#xff0c;具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度&#xff0c;还能大大提升开发和运维效率。以下是使用…

黑马智数Day7

获取行车管理计费规则列表 封装接口 export function getRuleListAPI(params) {return request({url: parking/rule/list,params}) } 获取并渲染数据 import { getRuleListAPI } from /apis/carmounted() {this.getRuleList() }methods: {// 获取规则列表async getRuleList(…

员工电脑怎么监控?这些电脑监控软件必备

在当今远程办公、灵活工时盛行的时代&#xff0c;如何掌握员工的在线活动、确保工作效率和数据安全成为许多企业关注的焦点。电脑监控软件作为管理工具中的关键一环&#xff0c;可以有效帮助企业了解员工的在线行为&#xff0c;避免效率低下和数据泄露等风险。今天我们就来介绍…

学习干货|实战学习应急响应之Windows日志分析,网络安全零基础入门到精通教程!

前言 本次环境将从大赛内与实战环境相结合去了解在应急响应中Windows日志分析的几个关键点&#xff0c;符合大赛及真实环境案例&#xff0c;本次环境将从WEB层面的日志分析到主机内的几种关键日志分析和重点功能进行排查 题目描述&#xff1a;某台Windows服务器遭到攻击者入侵…

零基础光伏人,数据计算轻松拿捏

在可再生能源领域&#xff0c;光伏产业以其清洁、可再生的特点日益受到全球关注。然而&#xff0c;对于初学者或“零基础光伏人”而言&#xff0c;光伏项目涉及的一系列数据计算和专业知识往往显得复杂而难以入手。幸运的是&#xff0c;随着技术的进步&#xff0c;一系列光伏计…

一文搞懂链表相关算法

目录 链表的逆序和截断 逆序 截断 查找链表的中间节点 力扣题 博主主页&#xff1a;东洛的克莱斯韦克-CSDN博客 链表的逆序和截断 逆序 推荐使用头插法逆序&#xff0c;首先要 new 一个虚拟头节点——newNode。如下图 链表的头节点为head&#xff0c;由cur指针指向head&a…

红外热成像技术开启光伏检测新视界

随着全球对可再生能源需求的不断增加&#xff0c;光伏发电系统的应用日益广泛。然而&#xff0c;光伏组件在长期运行中可能会出现各种故障&#xff0c;如热斑效应、隐裂、接线盒故障等&#xff0c;这些问题不仅影响光伏系统的发电效率&#xff0c;还可能引发安全隐患。 红外热成…

基于vue框架的的社区智慧养老系统1mo30(程序+源码+数据库+调试部署+开发环境)

系统程序文件列表 项目功能&#xff1a;老人,员工,老人档案,养生视频,社区医生,就医信息,在线咨询,咨询回复,菜品信息,点餐订单,服务预约,通知信息,服务评价,健康关爱,新闻公告,监控日志 开题报告内容 以下是一份基于Vue框架的社区智慧养老系统的开题报告&#xff0c;详细阐述…

龙蜥8.6 配置用户登录次数和锁定策略(已亲测)

操作系统&#xff1a;龙蜥8.6 x86_64 查看是否安装pam模块 rpm -qa | grep pam 查看可以使用的认证模块&#xff0c;因为有的系统是pam_tally2. cd /etc/pam.d ls 经过查看&#xff0c;该服务器是使用的pam_faillock 模块 打开/etc/pam.d/password-auth 的 PAM 配置文件…