使用 C++ 和 Tesseract 实现验证码识别

news/2025/3/12 3:55:12/文章来源:https://www.cnblogs.com/ocr12/p/18616781
  1. 安装 Tesseract OCR
    首先,你需要安装 Tesseract OCR 库。如果你还没有安装,请按照以下步骤操作:

在 Ubuntu 上安装 Tesseract:

bash

sudo apt update
sudo apt install tesseract-ocr
sudo apt install libleptonica-dev
sudo apt install libtesseract-dev
在 Windows 上安装 Tesseract:

下载并安装 Tesseract OCR Windows 安装包。
设置环境变量,将 Tesseract 可执行文件的路径添加到系统的 PATH 中。
2. 配置 C++ 项目
我们将使用 Tesseract 的 C++ API,因此需要在 C++ 项目中链接 Tesseract 和 Leptonica 库。你需要通过 pkg-config 或手动链接库文件来完成配置。

CMake 配置(如果你使用 CMake 构建项目)
在你的项目根目录下创建一个 CMakeLists.txt 文件,内容如下:

cmake

cmake_minimum_required(VERSION 3.10)

project(CaptchaRecognizer)

设置 C++ 标准

set(CMAKE_CXX_STANDARD 11)

查找 Tesseract 和 Leptonica 库

find_package(PkgConfig REQUIRED)
pkg_check_modules(TESSERACT REQUIRED tesseract)

包含头文件

include_directories(${TESSERACT_INCLUDE_DIRS})

设置源文件

add_executable(CaptchaRecognizer main.cpp)

链接 Tesseract 和 Leptonica 库

target_link_libraries(CaptchaRecognizer ${TESSERACT_LIBRARIES})
编译项目
确保安装了 pkg-config 工具,并正确设置了 Tesseract 库路径。使用 CMake 编译项目:

bash

mkdir build
cd build
cmake ..
make
3. 编写 C++ 代码
创建一个名为 main.cpp 的文件,并编写以下代码:

cpp

include

include <tesseract/baseapi.h>

include <leptonica/allheaders.h>

using namespace std;

int main() {
// 初始化 Tesseract OCR 引擎
tesseract::TessBaseAPI tess;
if (tess.Init(NULL, "eng")) { // 传入 NULL 表示使用默认的 Tesseract 路径,"eng" 表示英文语言
cerr << "无法初始化 Tesseract OCR 引擎" << endl;
return 1;
}

// 加载图像
Pix *image = pixRead("captcha_image.png");
if (image == NULL) {cerr << "无法读取图像文件" << endl;return 1;
}// 设置图片给 Tesseract 进行 OCR 识别
tess.SetImage(image);
string outText = tess.GetUTF8Text();// 输出识别结果
cout << "识别结果: " << outText << endl;// 清理资源
tess.End();
pixDestroy(&image);return 0;

}
4. 代码解释
初始化 Tesseract:

tesseract::TessBaseAPI tess;:创建 Tesseract OCR 引擎的对象。
tess.Init(NULL, "eng");:初始化引擎,NULL 表示使用默认路径,"eng" 表示识别英文。如果需要识别中文或其他语言,可以更改为相应的语言代码,如 "chi_sim"(中文简体)。
读取图像:

Pix *image = pixRead("captcha_image.png");:读取验证码图像文件。
OCR 识别:

tess.SetImage(image);:将图像传递给 Tesseract 进行处理。
string outText = tess.GetUTF8Text();:获取识别结果。
输出结果:

输出识别出的文本。
清理资源:
更多内容访问ttocr.com或联系1436423940
tess.End();:结束 Tesseract 会话,释放资源。
pixDestroy(&image);:销毁图像数据,释放内存。
5. 运行程序
确保你已经准备好了验证码图像 captcha_image.png,然后通过以下命令来编译并运行程序:

bash

g++ main.cpp -o CaptchaRecognizer -ltesseract -lleptonica
./CaptchaRecognizer
6. 输出结果
如果程序成功识别验证码,输出将类似于:

makefile

识别结果: abc123

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

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

相关文章

IEC101/140 监视点与控制点

IEC101/140 监视点与控制点 IEC-60870-5-104 协议适用于远程控制设备和系统,通过数据传输来监控和控制地理上广泛的过程。该协议结合了 IEC-60870-5-101 协议和 TCP/IP 提供的传输功能。 任何使用 IEC-60870-5-104 协议的应用程序都将有一个主站(控制站)和一个或多个从站(受…

android emulator 设置代理

android emulator 设置代理 由于开发的 app 需要访问 google 服务,那么跑虚拟机的时候就需要设置网络代理,试了几种方法都没成功,记录一下 因为已知我开发电脑的代理地址和端口,只需要把电脑的代理设置到 emulator 上就可以了 设置Android Studio代理 先在Android Studio上…

Redux Thunk深入理解与使用指南

一、什么是 Redux Thunk? 在 React 应用中,Redux 是一个常用的状态管理工具。但 Redux 本身是一个纯同步状态管理工具,它的 dispatch 方法默认只支持同步操作。如果我们想要处理异步逻辑(如请求接口、延时操作等),需要使用中间件(middleware)。Redux Thunk 就是一个用于…

无人车队运营需要的远程驾驶平台

无人车队在全时商业化运营的过程中,不可避免会出现自动驾驶无法处理的极端、异常场景。为提高运营效率,避免配备随车安全员带来的成本上升与风险增加,使用远程驾驶系统对无人车队运营进行辅助是较为经济且可靠的解决方案。经纬恒润远程驾驶系统具备丰富的功能和宽广的能力覆…

求职者必备:如何用管理软件实现高效的Offer规划

一、毕业季Offer规划的复杂性 毕业季的Offer规划不仅仅是简单的找工作过程,更是一次紧张的时间赛跑。从投递简历、面试安排、薪资谈判到最终的决定,整个过程充满了大量的任务和步骤。这些任务和环节涉及不同的公司、职位要求、面试形式以及其他各种变量。如果没有一个高效的工…

函数式接口之方法作为参数

在现实开发中,肯定会遇到这样一种情况,有几个业务场景,里面的大部分业务逻辑都一样,只有某些逻辑不同,而这些不同的逻辑又依赖于前面的逻辑,你会选择写重复代码去实现还是选择抽取公共方法,对那些不同的逻辑做单独处理?是不是理解起来比较抽象,简单就一句话,怎么把方…

胖东来成功背后的管理智慧:零售行业如何借鉴?

零售行业通过选择合适的看板软件、实施看板管理以及持续优化与改进等步骤,可以实现管理优化和效率提升。这将有助于企业更好地应对市场竞争、提高客户满意度和实现可持续发展。胖东来创始人于东来在社交平台分享了胖东来商贸集团2024年的营业情况。数据显示,截至2024年11月26…

旅游公司各部门联动,何种办公软件能高效协同?

在旅游行业蓬勃发展且竞争日益激烈的当下,高效的团队协作与个人学习效率提升成为旅游公司脱颖而出的关键因素。尤其是对于 MBTI 类型中倾向于有序规划的 J 人而言,可视化的团队协作办公软件犹如得力助手,能够让复杂的旅游业务流程清晰呈现,促进信息的高效流通与任务的顺利推…

linux操作系统安装

1.centenos镜像文件下载 2.创建一个虚拟机 1)打开VMware软件,选择创建新的虚拟机,在弹出的虚拟机向导的窗口选择自定义配置,点击下一步;2)默认设置3)选择稍后安装系统4)客户机操作系统选择Linux,版本选择CentOS 7(64位)5)命名虚拟机,选择存储路径6)处理器配置根据…

如何在宝塔面板中检查和开启path_info支持?

在宝塔面板中,检查和开启path_info支持的步骤如下:登录宝塔面板:打开浏览器,输入宝塔面板的地址(例如:http://你的域名:8888),使用管理员账号登录。进入网站管理页面:在宝塔面板首页,找到你需要配置的网站,点击“设置”按钮。进入PHP设置:在网站设置页面中,找到“…

大模型平台汇总说明

国外大模型平台 Openapi Anthropic Meta google国内大模型平台 百度 文心一言厂商 模型地址优势百度 文心一言 https://yiyan.baidu.com/ 支持文生图支持联网支持图生文支持读取文档支持生成图表商业信息查询生成思维导图 本文来自博客园,作者:王竹笙,转载请注明原文链接:…

规划新一年,提升效率:跨年日程管理与计划软件的完美结合

一、跨年日程规划的挑战 跨年作为时间的节点,往往意味着新的开始。许多人在这一时期都会进行新一年的规划,制定目标、任务和行动计划。无论是个人的生活规划,还是团队或公司的年度战略,跨年日程规划面临的挑战主要包括:1.1 任务繁多,易遗漏 跨年日程通常包含从目标设定、…