tesseract-ocr安装使用

news2024/12/23 12:48:10

描述:

在centos上安装 tesseract

并在springboot项目中使用

步骤一:安装

确认使用的版本tesseract和test4j版本需要匹配,这里选择最新版 tesseract5.3.3 ,test4j 5.9.0

版本匹配可查看

Releases · nguyenq/tess4j · GitHub

或者 【这个更新不及时】 Tess4J & Lept4J API Documentation

将对于版本的tar.gz包下载,解压 tar -zxvf 包名

进入解压后的文件夹

1.安装

分开执行

./autogen.sh
./configure
make
sudo make install

2. 配置环境变量

编辑~/.bashrc,加入 export TESSDATA_PREFIX=/usr/share/tesseract  路径为包含tessdata语言包路径

3. 问题

问题:如果在执行./configure报错configure: error: Your compiler does not have the necessary C++17 support! Cannot proceed.,需要升级c++编译器

具体为

wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -zxvf gcc-10.2.0.tar.gz
cd gcc-10.2.0
./contrib/download_prerequisites
./configure
make
sudo make install

问题:在./configure中报错configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev,说明leptonica的版本低于最低要求,需要更新Leptonica,如果yum或者其他包管理工具中有对应版本则直接下载,否则,手动下载并安装

这里安装后一定要配置环境变量,否则系统仍然使用老版本Leptonica

  • 下载并解压
    • Releases · DanBloomberg/leptonica · GitHub
    • tar -zxvf xxx
  • 进入解压包
  • mkdir build
    cd build
    cmake -DLEPTONICA_ROOT=/usr/local ..
    make
    sudo make install

其余问题:

大多都是依赖不完全,比如 tensorflow,ICU版本过低等

在./configure中日志 checking for libarchive... no checking for ICU_UC... no checking for ICU_I18N... no,这个说明需要添加icu_uc的依赖,用于对unicode的支持,同样通过yum或者编译返回安装

wget https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz
tar -xzvf icu4c-69_1-src.tgz
cd icu/source
./configure --prefix=/usr/local/icu
make
sudo make install

其余安装方式一[失败]:

因为使用编译方式安装需要自己配置依赖,比如libtiff、Leptonica等

如果需要快速安装,则可以直接使用yum 安装,但是这里库中只有3.0版本的

这里找到了snap安装方式,里面有5.0版本的【这个安装方式暂时没找到如何添加语言包】

具体过程为:

  1. 下载snap
    yum install epel-release
    yum install snapd

  2. 启动服务
    systemctl enable --now snapd.socket

    如果查询服务状态是inactive (dead),那么重启服务,如果仍然dead,尝试重新生成密钥

    sudo snap install snapd --edge
    sudo systemctl restart snapd

  3. 安装tesseract
    snap install --edge tesseract

  4. 查看版本
    # 1.查看snap安装位置
    which snap
    /usr/bin/snap
    
    # 2.查看tesseract版本
     /usr/bin/snap run tesseract -v
    tesseract 5.0.0-alpha-20201224
     leptonica-1.74.2
      libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8
    
     Found AVX512BW
     Found AVX512F
     Found AVX2
     Found AVX
     Found FMA
     Found SSE
     Found OpenMP 201307
    
    # 3.将/usr/bin/snap run配置到环境变量中
    #   在~/.bashrc中加入下面命令
    alias tesseract='/usr/bin/snap run tesseract'
    
    # 4.在此检查版本
    tesseract -v
    
    tesseract 5.0.0-alpha-20201224
     leptonica-1.74.2
      libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8
    
     Found AVX512BW
     Found AVX512F
     Found AVX2
     Found AVX
     Found FMA
     Found SSE
     Found OpenMP 201307

其余安装方式二[成功]:

使用conda进行安装

1 下载conda



Free Download | Anaconda

将下载的脚本在目标机中执行

# 执行安装脚本,途中都选yes
bash Anaconda3-2023.09-0-Linux-x86_64.sh

# 激活
source ~/.bashrc

# 验证
conda --version

2 下载tesseract

版本无法下载最新版,目前是5.2版本

# 安装
conda install -c conda-forge tesseract

# 验证
tesseract --version

步骤二:语言包下载

1 下载

安装中文简体语言包,下载后将其放到/usr/share/tesseract/tessdata目录下

wget https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata

2 查看

# tesseract --list-langs
List of available languages in "/usr/share/tesseract/tessdata/" (1):
chi_sim

3 验证

保存一张图片

然后执行命令 

这将进行识别图片并将结果保存到文本文件中

tesseract your_image.png output.txt

步骤三:在springboot中使用

思路:

通过docker容器卷加载conda环境到容器中,并配置环境变量,让springboot使用宿主机上的tesseract

1 maven依赖

具体可参见步骤一的版本依赖选择

        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>5.3.0</version>
        </dependency>

2 示例

将识别test.png并返回识别结果

        String imagePath = "/usr/share/tesseract/test.png";
        File imageFile = new File(imagePath);
        ITesseract tesseract = new Tesseract();
        tesseract.setDatapath("/usr/share/tesseract/tessdata"); // 设置 Tesseract 数据目录,根据实际情况修改
        tesseract.setLanguage("chi_sim"); // 设置中文语言包
        try {
            String result = tesseract.doOCR(imageFile);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "Error during OCR processing";
        }

3 镜像打包

Dockerfile中将conda的路径配置到环境变量中,将conda的lib也加入,将语言包路径加入环境变量

如果通过编译安装的tesseract,则将tesseract可执行路径添加到环境变量

FROM eclipse-temurin:8-jre
LABEL org.opencontainers.image.authors="fooleryang@139.com"


# 设置 Tesseract 可执行文件路径添加到 PATH
ENV PATH="/root/anaconda3/bin:${PATH}"
ENV LD_LIBRARY_PATH="/root/anaconda3/lib:${LD_LIBRARY_PATH}"
ENV TESSDATA_PREFIX="/usr/share/tesseract/"

COPY remarkback.jar /usr/local/
WORKDIR /usr/local
CMD ["java", "-jar", "remarkback.jar"]
在docker compose 文件中加conda通过容器卷加入到容器,将语言包也加入到容器
    volumes:
      - /root/anaconda3:/root/anaconda3
      - /usr/share/tesseract/:/usr/share/tesseract/
4 验证

进入运行的容器,查看是否能正常使用tesseract

docker exec -it ecfaf8883424 bash
root@ecfaf8883424:/usr/local# tesseract -v
tesseract 5.2.0
 leptonica-1.82.0
  libgif 5.2.1 : libjpeg 9e : libpng 1.6.39 : libtiff 4.5.1 : zlib 1.2.13 : libwebp 1.2.4 : libopenjp2 2.4.0
 Found AVX512BW
 Found AVX512F
 Found AVX2
 Found AVX
 Found FMA
 Found SSE4.1
 Found OpenMP 201511
 Found libarchive 3.6.2 zlib/1.2.13 liblzma/5.4.2 bz2lib/1.0.8 liblz4/1.9.4 libzstd/1.5.2

再调用接口,查看是否能正常返回

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

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

相关文章

「Leetcode」滑动窗口—长度最小的子数组

&#x1f4bb;文章目录 &#x1f4c4;题目✏️题目解析 & 思路&#x1f4d3;总结 &#x1f4c4;题目 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …,…

deepstream-python安装

​ 安装deepstream-docker 在这边文章中deepstream-docker详细介绍了如何在Ubuntu下安装deepstream-docker&#xff0c;安装完成之后&#xff0c;为了快速入门deepstream&#xff0c;我们可以安装deepstream-python库&#xff0c;通过阅读相应的例子来快速搭建一个应用。 安…

【Hive】

一、Hive是什么 Hive是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;将Hadoop文件中的结构化、半结构化数据文件映射成一张数据库表&#xff0c;同时提供了一种类SQL语言&#xff08;HQL&#xff09;&#xff0c;用于访问和分析存在Hadoop中的大型数据集。Hive的核心是将…

第一届古剑山ctf-pwn全部题解

1. choice 附件&#xff1a; https://github.com/chounana/ctf/blob/main/2023%E7%AC%AC%E4%B8%80%E5%B1%8A%E5%8F%A4%E5%89%91%E5%B1%B1pwn/choice.zip 漏洞代码&#xff1a; 漏洞成因&#xff1a; byte_804A04C输入的长度可以覆盖nbytes的值&#xff0c;导致后面输入时存…

数据管理与持久化:深度解析Docker数据卷

Docker 数据卷在容器化应用中扮演着关键角色&#xff0c;它们提供了一种灵活且可持久化的方式来处理应用数据。本文将深入讨论 Docker 数据卷的基本概念、使用方法以及一系列高级应用场景&#xff0c;通过更为丰富和实际的示例代码&#xff0c;帮助大家全面掌握数据卷的使用和管…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

市场全局复盘 20231213

昨日回顾&#xff1a; SELECT TOP 10000 CODE,成交额排名,净流入排名,代码,名称,DDE大单金额,涨幅 ,主力净额,DDE大单净量,CONVERT(DATETIME, 最后封板, 120) AS 最后封板 FROM dbo.全部&#xff21;股20231213_ALL WHERE 连板天 > 1AND DDE大单净量 > 0AND DDE散户数量…

bugku--source

dirsearch扫一下 题目提示源代码&#xff08;source&#xff09; 也就是源代码泄露&#xff0c;然后发现有.git 猜到是git泄露 拼接后发现有文件 但是点开啥也没有 kali里面下载下来 wegt -r 下载网站的所有内容 ls 查看目录 cd 进入到目录里面 gie reflog 引用日志使用…

Cent OS7 磁盘挂载:扩展存储空间和自动挂载

文章目录 &#xff08;1&#xff09;概述&#xff08;2&#xff09;查看磁盘使用情况&#xff08;3&#xff09;VMware虚拟机挂载磁盘&#xff08;4&#xff09;物理机磁盘挂载&#xff08;5&#xff09;ntfs硬盘处理 &#xff08;1&#xff09;概述 在Linux系统中&#xff0c…

ubuntu 自动安装 MKL Intel fortran 编译器 ifort 及完美平替

首先据不完全观察&#xff0c;gfortran 与 openblas是 intel fortran 编译器 ifotr和mkl的非常优秀的平替&#xff0c;openblas连函数名都跟mkl一样&#xff0c;加了一个下划线。 1&#xff0c; 概况 https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-too…

【Hadoop】Hadoop基础架构的变化

1.x版本架构2.x版本架构3.x版本架构参考 1.x版本架构 NameNode&#xff1a;&#xff0c;负责文件系统的名字空间(Namespace)管理以及客户端对文 件的访问。NameNode负责文件元数据的管理和操作。是单节点。 Secondary NameNode&#xff1a;它的职责是合并NameNode的edit logs到…

SpringBoot进行自然语言处理,利用Hanlp进行文本情感分析

. # &#x1f4d1;前言 本文主要是SpringBoot进行自然语言处理&#xff0c;利用Hanlp进行文本情感分析&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风…

人工智能导论习题集(3)

第五章&#xff1a;不确定性推理 题1题2题3题4题5题6题7题8 题1 题2 题3 题4 题5 题6 题7 题8

过滤(删除)迭代对象中满足指定条件的元素itertools.filterfalse()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 过滤(删除)迭代对象中 满足指定条件的元素 itertools.filterfalse() [太阳]选择题 请问以下代码输出的结果是&#xff1f; a [1, 2, 3, 4, 5] print("【显示】a ",a) import ite…

关于Cython生成的so动态链接库逆向

来个引子&#xff1a;TPCTF的maze题目 如何生成这个so文件 为了研究逆向&#xff0c;我们先搞个例子感受一下生成so的整个过程&#xff0c;方便后续分析 创建对应python库文件 testso.py def test_add(a,b):a int(a)b int(b)return a bdef test_calc(li):for i in range…

redis-学习笔记(Jedis zset 简单命令)

zadd & zrange zadd , 插入的第一个参数是 zset , 第二个参数是 score, 第三个参数是 member 成员 内部依据 score 排序 zrange 返回 key 对应的 对应区间内的值 zrangeWithScore 返回 key 对应的 对应区间内的值和分数 示例代码 zcard 返回 key 对应的 zset 的长度 示例代…

05-命令模式

意图&#xff08;GOF定义&#xff09; 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户端进行参数化&#xff0c;对请求排队或者记录日志&#xff0c;以及可支持撤销的操作。 理解 命令模式就是把一些常用的但比较繁杂的工作归类为成一组一组的动作&…

使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙 | 京东云技术团队

纯血鸿蒙即将到来 在今年 8 月的「2023年华为开发者大会&#xff08;HDC.Together&#xff09;」上&#xff0c;华为正式官宣「鸿蒙Next」&#xff0c;这个更新的版本将移除所有的 AOSP 代码&#xff0c;彻底与 Android 切割&#xff0c;使其成为一个完全自主研发的操作系统&a…

【视觉SLAM十四讲学习笔记】第四讲——指数映射

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

LeetCode008之字符串转换整数 (相关话题:状态机)

题目描述 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还…