Tesseract OCR识图工具,通过composer接入hyperf使用

本文主要使用编译安装,yum安装未深入研究为何无法使用

一、下载依赖

sudo yum install -y gcc gcc-c++ make autoconf automake libtool pkgconfig
sudo yum install -y leptonica leptonica-devel

这里额外记录一下我踩的坑,第二个依赖安装的时候出现了一些状况

[root@ip-172-31-37-111 tesseract-5.2.0]# yum install -y leptonica leptonica-devel
Last metadata expiration check: 12:22:32 ago on Wed Jun 26 22:37:31 2024.
Package wget-1.21.3-1.amzn2023.0.3.x86_64 is already installed.
Error: Problem 1: conflicting requests- nothing provides libpng15.so.15()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libpng15.so.15(PNG15_0)(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libgif.so.4()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libwebp.so.4()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epelProblem 2: package leptonica-devel-1.72-2.el7.x86_64 from epel requires leptonica(x86-64) = 1.72-2.el7, but none of the providers can be installed- package leptonica-devel-1.72-2.el7.x86_64 from epel requires liblept.so.4()(64bit), but none of the providers can be installed- conflicting requests- nothing provides libpng15.so.15()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libpng15.so.15(PNG15_0)(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libgif.so.4()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel- nothing provides libwebp.so.4()(64bit) needed by leptonica-1.72-2.el7.x86_64 from epel
(try to add '--skip-broken' to skip uninstallable packages)

安装Leptonica依赖

没错,就是因为这里无法yum无法使用,我又一次选择了源码编译安装 ,需要注意的是,在使用ocr的时候需要Leptonica依赖版本超过1.74,所以可以先执行以下yum remove leptonica leptonica-devel删除依赖,如本机并无安装则忽略

wget https://github.com/DanBloomberg/leptonica/archive/refs/tags/1.82.0.tar.gz
tar -xzvf 1.82.0.tar.gz
cd leptonica-1.82.0./autogen.sh
./configure
make
make install
ldconfig

安装成功后检验Leptonica是否安装成功

1.检查liblept共享库是否存在

// 检查 liblept 共享库是否存在
ldconfig -p | grep liblept
// 如果成功安装,你应该看到类似下面的输出
liblept.so.5 (libc6,x86-64) => /usr/local/lib/liblept.so.5
liblept.so (libc6,x86-64) => /usr/local/lib/liblept.so

2.使用 pkg-config 检查版本

pkg-config --modversion lept// 成功则展示
1.82.0

如果成功这里会直接显示安装的 Leptonica 版本,反之失败,这里我是失败了的,是因为我的pkg-config无法找到依赖配置(如果成功了就跳过这一段)

2.2 pkg-config无法检测到依赖配置文件
步骤一:找到 lept.pc 文件

通常,lept.pc 文件会安装在 /usr/local/lib/pkgconfig/usr/lib/pkgconfig 目录下。首先检查这个文件是否存在:

// 一般都在第一个路径里面
find /usr/local/lib/pkgconfig -name "lept.pc"
find /usr/lib/pkgconfig -name "lept.pc"
步骤二:设置 PKG_CONFIG_PATH 环境变量

如果 lept.pc 文件存在,但 pkg-config 仍然找不到它,这里需要将其所在目录添加到 PKG_CONFIG_PATH 环境变量中

我的是位于 /usr/local/lib/pkgconfig 目录中,设置环境变量

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

最后再次检验版本pkg-config --modversion lept

为了持久性,我们需要将环境变量添加到shell 配置文件中

echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig' >> ~/.bashrc
source ~/.bashrc

二、安装TesseractOcr

# 下载 Tesseract 源代码
wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.2.0.tar.gz
tar -xzvf 5.2.0.tar.gz
cd tesseract-5.2.0# 配置和编译
./autogen.sh
./configure
make
make install
ldconfig

如果不出意外可以一路安装成功,然后可以使用tesseract --version检查版本

你认为这个时候就可以了?那就大错特错了

我在tesseract --version,不出所料的失败了哈哈

[root@ip-172-31-37-111 tesseract-5.2.0]# tesseract --version
tesseract: error while loading shared libraries: libtesseract.so.5: cannot open shared object file: No such file or directory

发现是找不到 libtesseract.so.5 共享库,这通常是因为动态链接库路径未正确设置 

设置libtesseract.so.5 共享库

首先,查找 libtesseract.so.5 文件的实际位置:

find /usr/local/lib -name "libtesseract.so.5"
find /usr/lib -name "libtesseract.so.5"

如果找到 libtesseract.so.5,将其所在目录添加到 LD_LIBRARY_PATH 环境变量中。例如,如果它位于 /usr/local/lib

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

将库路径添加到 ldconfig 配置文件中,使其在系统重启后仍然有效:

  1. 创建一个新的配置文件或编辑现有的配置文件,例如 /etc/ld.so.conf.d/tesseract.conf,并添加库路径:

    echo "/usr/local/lib" > /etc/ld.so.conf.d/tesseract.conf
  2. 更新库缓存

    ldconfig

再次查看tesseract版本

[root@ip-172-31-37-111 tesseract-5.2.0]# tesseract --version
tesseract 5.2.0leptonica-1.82.0libgif 5.2.1 : libjpeg 6b (libjpeg-turbo 2.1.4) : libpng 1.6.37 : libtiff 4.4.0 : zlib 1.2.11 : libwebp 1.2.4Found AVX512BWFound AVX512FFound AVX2Found AVXFound FMAFound SSE4.1Found OpenMP 201511Found libcurl/8.5.0 OpenSSL/3.0.8 zlib/1.2.11 libidn2/2.3.2 libpsl/0.21.1 (+libidn2/2.3.2) nghttp2/1.57.0

OK,安装成功!!!

测试TesseractOcr识别图片

[root@ip-172-31-37-111 ~]# tesseract photo_2024-06-27_14-18-25.jpg output
Error opening data file /usr/local/share/tessdata/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!
Could not initialize tesseract

失败……是因为我们没有语言训练数据文件,而TesseractOcr需要

1.安装语言文件

// 安装语言文件
wget https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata
// 丢到数据文件
mkdir -p /usr/local/share/tessdata
mv eng.traineddata /usr/local/share/tessdata/

2.设置 TESSDATA_PREFIX 环境变量

export TESSDATA_PREFIX=/usr/local/share/tessdata/

确保每次启动 shell 时都能正确设置 TESSDATA_PREFIX,可以将其添加到你的 shell 配置文件中,例如 ~/.bashrc 或 ~/.bash_profile

echo 'export TESSDATA_PREFIX=/usr/local/share/' >> ~/.bashrc
source ~/.bashrc

3.其他语言数据

如果你需要其他语言的数据文件,可以从 Tesseract 官方 GitHub 仓库 下载相应的 .traineddata 文件并放入 tessdata 目录。

# 示例:下载中文简体语言数据文件
wget https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata
mv chi_sim.traineddata /usr/local/share/tessdata/
# 指定语言文件
tesseract photo_2024-06-27_14-18-25.jpg output -l chi_sim

4.测试使用

命令第二个参数是需要识别的图片,第三个参数是内容输出的文件名

tesseract photo_2024-06-27_14-18-25.jpg output

OK,成功。

三、 接入Hyperf

通过composer安装

composer require thiagoalessio/tesseract_ocr

不啰嗦,直接上示例文件 

<?phpnamespace App\Controller;use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
use thiagoalessio\TesseractOCR\TesseractOCR;/*** @Controller*/
class OcrController extends AbstractController
{/*** @RequestMapping(path="ocr", methods="get")*/public function ocr(){$imagePath = '/path/to/your/image.jpg';try {$ocr = new TesseractOCR($imagePath);$ocr->lang('chi_sim'); // 设置语言为中文简体$text = $ocr->run();} catch (\Exception $e) {return ['error' => $e->getMessage(),];}return ['text' => $text,];}
}

如果需要base64的话也可以,上文件

<?phpnamespace App\Controller;use thiagoalessio\TesseractOCR\TesseractOCR;
use Hyperf\HttpServer\Annotation\AutoController;#[AutoController]
class OcrImgController extends BaseController
{public function index(){$base64Image = $this->request->input('image');// 去掉base64头部,如 "data:image/jpeg;base64,"if (preg_match('/^data:image\/(\w+);base64,/', $base64Image, $type)) {$base64Image = substr($base64Image, strpos($base64Image, ',') + 1);$type = strtolower($type[1]); // jpg, png, gif} else {return ['error' => 'Invalid image data'];}// 解码Base64图片$imageData = base64_decode($base64Image);if ($imageData === false) {return ['error' => 'Base64 decode failed'];}// 创建临时文件$tempImagePath = tempnam(sys_get_temp_dir(), 'ocr_') . '.' . $type;if (file_put_contents($tempImagePath, $imageData) === false) {return ['error' => 'Failed to save image'];}try {// 使用Tesseract OCR识别文本$ocr = new TesseractOCR($tempImagePath);$ocr->lang('eng'); // 你可以根据需要设置语言$text = $ocr->run();} catch (\Exception $e) {unlink($tempImagePath); // 删除临时文件return ['error' => $e->getMessage()];}unlink($tempImagePath); // 删除临时文件return ['text' => $text];}
}

OK,分享结束

需要转载的同学,记得表明原文

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

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

相关文章

Mac电脑安装HomeBrew工具(100%成功)

1.Homebrew是什么&#xff1f; homebrew是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理&#xff0c;而不用关心各种依赖和文件路径情况。 2.homebrew常用命令 检测是否安装HomeBrew: brew -v卸载Hom…

【杂记-浅谈OSPF协议之Hello、DD、LSR、LSU、LSAck报文】

OSPF中的各种报文 一、Hello报文二、DD报文三、LSR报文四、LSU报文五、LSAck报文 一、Hello报文 Hello报文周期性发送&#xff0c;用来发现和维持OSPF邻居关系&#xff0c;其中&#xff0c;Hello报文包含的字段有&#xff1a; 1、Network Mask&#xff1a;发送Hello报文的接口…

8. Revit API UI: DockablePane(可停靠窗口)

8. Revit API UI: DockablePane&#xff08;可停靠窗口&#xff09; 接着前面的预览控件和外部事件&#xff0c;这一篇&#xff0c;我们来看看可停靠窗口DockablePane的实现。 实现流程 可停靠窗口相关的类与接口主要有DockablePane和IDockablePageProvider&#xff0c;都是…

具备生成自签名文档证书能力的印章管理软件_电子骑缝章软件

最新版的e-章宝具体生成自签名文档证书的能力&#xff0c;这种证书可用内部文档发布的签名&#xff0c;文档一旦用证书签名并发布&#xff0c;具有不可抵赖性&#xff0c;阅读者也能确认所发布的文档是否是发布者发布的&#xff08;即中途有没有被他人恶意修改过&#xff09;&a…

Qt样式表及相关案例

一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的强大机制&#xff0c;样式表的概念、术语、语法均受到HTML的层叠样式表(Cascading Style Sheets,CSS)的启发。 样式表可通过QApplication::setStyleSheet()函数将其设置到整个应用程序上&#xff0c;也可以使用QWidget::se…

*算法训练(leetcode)第十九天 | 77. 组合、216. 组合总和 III、17. 电话号码的字母组合

刷题记录 *77. 组合216. 组合总和 III*17. 电话号码的字母组合 *77. 组合 leetcode题目地址 回溯法。result记录最终结果&#xff0c;cur_result记录单个组合的结果。 比较难理解的地方在于回溯要撤销对于结点的处理&#xff0c;也就是cur_result.pop_back(); 在for循环中&a…

python Process 多进程处理单个文件

Python 的 multiprocessing 模块可以用来创建多进程以并行处理任务,从而加速对大文件或其他耗时操作的处理。处理单个文件时,可以将文件内容分割成多个部分,每个部分由一个单独的进程处理。以下是一个简单的例子,说明如何使用多进程处理单个文件中的数据行: 基本思路 1. 读…

第9关:索引(2024数据库期末综合)

第9关&#xff1a;索引&#xff08;注意看下面的温馨提示&#xff01;&#xff01;&#xff09; 任务描述 湖南人口hnpeople数据表结构如图所示&#xff0c;各字段含义如下 cs&#xff08;城市)、qx(区县)、rk(人口)、man(男)、woman(女)、child(儿童)、adult(成人)、old(老人)…

揭秘数据合并的秘密:一文掌握一对一、多对一、多对多合并技巧与实战!

使用pd.merge()合并 类似 MySQL 中表和表直接的合并merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并每一列元素的顺序不要求一致1. 一对一合并 df1 = pd.DataFrame({"…

2025深圳数字广电及网络视听大会暨展览会

2025深圳数字广电及网络视听大会暨展览会 数字引领 网聚未来 时间&#xff1a;2025.6.25-27日 地点&#xff1a;深圳国际会展中心(宝安新馆) 指导单位&#xff1a; 中国广播电视社会组织联合会 主办单位&#xff1a; 中央广播电视总台国际在线广东频道 中国广播电视社会组织…

必应bing搜索广告投放介绍,投放的广告形式和效果

必应Bing搜索广告以其独特的市场定位、高质量的用户群体和强大的全球覆盖能力&#xff0c;成为众多企业拓展业务、提升品牌影响力的重要渠道。作为微软旗下的一款搜索引擎&#xff0c;必应不仅在美国市场占据重要份额&#xff0c;其在全球范围内的影响力也不容小觑。对于寻求国…

前端开源项目Vuejs:让前端开发如虎添翼!

文章目录 引言一、Vue.js的优势二、Vue.js实战技巧三、Vue.js社区与资源结语 引言 在前端开发的世界里&#xff0c;Vue.js凭借其简洁、轻量且功能强大的特性&#xff0c;逐渐崭露头角&#xff0c;成为众多开发者心中的首选框架。 一、Vue.js的优势 Vuejs项目地址 Vue.js之…

Java web应用性能分析之【自定义prometheus监控指标】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客 Java web应用性能分析之【java进程问题分析定位】-CSDN博客 Java web应用性能分析之【…

手写SpringMVC之调度器DispatcherServlet

DispatcherServlet&#xff1a;分发、调度 根据上一节&#xff0c;已经实现了将controller的方法添加到容器中&#xff0c;而DispatcherServlet的作用就是接收来自客户端的请求&#xff0c;然后通过URI的组合&#xff0c;来找到对应的RequestMapping注解的方法&#xff0c;调用…

LeetCode 剑指 Offer 40

// void help(int[] a,int l,int r,int k){ // if(k0) return; // if(r-l1 < k){ // for(int il;i<r;i){ // ans[cnt] a[i]; // } // return; // } // // 快排的基准值 // int base a[l]; // int i l, j r; // while(i<j){ // while(i<j &&…

极验行为式验证码适配HarmonyOS 鸿蒙SDK下载

现阶段&#xff0c;越来越多的开发者正在积极加入鸿蒙生态系统。随着更多开发者的参与&#xff0c;早在去年9月&#xff0c;极验就成为首批拥有鸿蒙NEXT内测版本和手机系统测试机会的验证码供应商。 为了提高各开发者及企业客户集成鸿蒙版本行为验4.0的效率&#xff0c;方便大家…

Nature推荐的三种ChatGPT论文写作指令(含PDF下载)

1. 润色学术论文 ChatGPT学术润色指令&#xff1a; “I’m writing a paper on [topic]for a leading [discipline] academic journal. WhatItried to say in the following section is [specific point]. Please rephrase itfor clarity, coherence and conciseness, ensuri…

C# 异步编程详解(Task,async/await)

文章目录 1.什么是异步2.Task 产生背景3.Thread(线程) 和 Task(异步)的区别3.1 几个名词3.2 Thread 与 Task 的区别 4.Task API4.1 创建和启动任务4.2 Task 等待、延续和组合4.3 task.Result4.4 Task.Delay() 和 Thread.Sleep() 区别 5.CancellationToken 和 CancellationToken…

最年轻获奖者诞生!一文带你了解历届国家最高科学技术奖获奖人

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;4000字丨15分钟阅读 作为国家层面面向科学、技术领域的最高级别奖励&#xff0c;国家最高科学技术奖于 2000 年由国务院设立&#xff0c;每年评选…

解锁分布式云多集群统一监控的云上最佳实践

作者&#xff1a;在峰 引言 在当今数字化转型加速的时代&#xff0c;随着混合云、多云多集群环境等技术被众多企业广泛应用&#xff0c;分布式云架构已成为众多企业和组织推动业务创新、实现弹性扩展的首选&#xff0c;分布式云容器平台 ACK One&#xff08;Distributed Clou…