Tesseract 最简单的图片文字识别

2023-10-26

Tesseract是一个开源的库,下面写一个最简单的实例:


#include "stdafx.h"
#include "strngs.h"
#include "baseapi.h"
#include <iostream>

#include "basedir.h"
#include "allheaders.h"

using namespace std;

void ConvertUtf8ToGBK(char **amp, char *strUtf8)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1, NULL, 0);
    unsigned short * wszGBK = new unsigned short[len + 1];
    memset(wszGBK, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1, (LPWSTR)wszGBK, len);
    len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
    //char *szGBK=new char[len + 1]; 
    *amp = new char[len + 1];
    memset(*amp, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, *amp, len, NULL, NULL);
    //amp=szGBK; 
}

int _tmain(int argc, _TCHAR* argv[])
{
    char *filepath = "a.png";
    tesseract::TessBaseAPI api;
    api.SetOutputName("output");
    api.SetInputName(filepath);
    api.SetPageSegMode(tesseract::PSM_AUTO);
    //int nRet = api.Init(NULL, "chi_sim");
    int nRet = api.Init(NULL, "eng");
    if (nRet != 0)
    {
        return 0;
    }

    PIX *pix = pixRead(filepath);
    api.SetImage(pix);


    char *pdata = NULL;
    char *pResult = NULL;
    api.SetRectangle(0, 0, 400, 80);

    pdata = api.GetUTF8Text();//进行识别
    ConvertUtf8ToGBK(&pResult, pdata); //对结果转码,保存在pResultl里

    delete pResult;
    pixDestroy(&pix);
    api.Clear();
    api.End();

    getchar();
    return 0;
}
本人采用的是Tesseract 3.02已经是很老的一个版本,因为最新的代码没有编译过,编译又特别麻烦,因此找到了一个开源可编译通过的3.02版本,当然了结果也不尽人意,第一个实例也仅仅是为了实现一个简单实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tesseract 最简单的图片文字识别 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • java中根据某一属性比较两个list集合是否相同

    创建两个示例列表 List
  • 二叉树前中后序遍历非递归实现

    前序遍历 public static void prifixOrder TreeNode root System out print 前序遍历 Stack
  • XSS-9注入靶场闯关(小游戏)——第九关

    1 这个关卡与第八关相同 直接把编码放上去尝试 之前的payload也无法使用 106 97 118 97 115 99 114 105 112 116 58 97 108 101 114 116 40 49 41 2 输入一个正常连接查看
  • Subscriber class .NewsFragment and its super classes have no public methods

    使用EventButs3 0 0 出现以下错误 Caused by de greenrobot event EventBusException Subscriber class com gozap beacontower ui NewsFr
  • 【C++初阶】简析拷贝构造、赋值运算符重载

    hello 各位读者大大们你们好呀 系列专栏 C 学习与应用 本篇内容 构造函数的概念与特征 基本使用方法 运算符重载 赋值运算符重载 前置 后置 的使用 作者简介 计算机海洋的新进船长一枚 请多多指教 同期文章 C 初阶 简析构造函数 析
  • 告别代码复制粘贴,傻瓜式提取 PyTorch 中间层特征

    内容导读 特征提取是图像处理过程中常需要用到的一种方法 其效果好坏对模型的泛化能力有至关重要的影响 特征提取 Feature extraction 在机器学习 模式识别和图像处理中应用广泛 它从初始的一组测量数据开始 建构出提供信息且不冗余
  • C# Modbus CRC校验

    Modbus CRC校验 直接输入byte 输出bool public static bool CRC Check byte byteData bool Flag false byte CRC new byte 2 UInt16 wCrc
  • React 深入系列1:React 中的元素、组件、实例和节点

    React 深入系列 深入讲解了React中的重点概念 特性和模式等 旨在帮助大家加深对React的理解 以及在项目中更加灵活地使用React React 中的元素 组件 实例和节点 是React中关系密切的4个概念 也是很容易让React
  • 从0搭建react项目

    一 快速开始 全局安装脚手架 npm install g create react app 复制代码 通过脚手架搭建项目 create react app lt 项目名称 gt 复制代码 开始项目 cd lt 项目名 gt npm run
  • 音频-什么是PCM编码格式?

    PCM中文称脉冲编码调制 Pulse Code Modulation 是70年代末发展起来的 记录媒体之一的CD 在80年代初由飞利浦和索尼公司共同推出 脉码调制的音频格式也被DVD A所采用 它支持立体声和5 1环绕声 1999年由DVD
  • 正则表达式-----小数点后允许有两位数字

    校验是否全由数字组成 function isDigit s var patrn 0 9 1 20 if patrn exec s return false return true 校验登录名 只能输入5 20个以字母开头 可带数字 的字串
  • eclipse关联spring源码

    在Eclipse中如何关联spring framework的文档和源代码 1 到官方网站去下载spring framework的jar包 spring framework jar包的下载地址是 http repo spring io rel
  • 解决ubuntu18.04卡在“starting Gnome Display Manager“

    我提前安装了ssh 所以可以ssh进行下面的操作 如果你没有 你可以进入命令行 或者其他模式进行下面的操作 好多人都遇到这个问题 我提前说下 安装驱动之前 最好安装个ssh ssh 怎么用自己百度吧 这样万一你的电脑卡住了 你找个别人的电脑
  • autoApprove

    服务端最主要的一个配置就是使用 EnableAuthorizationServer 注解 该注解的作用就是引入了一些 OAuth2 相关的端点 包含以下的端点 AuthorizationEndpoint 根据用户认证获得授权码 有下面两个方
  • 工作日记:JavaScript生成随机色

    不多啰啰 直接上硬货 获取指定闭区间的随机数 param min 最小值 param max 最大值 returns number export function getRandomNum min max let result if min
  • 2007.08.21单链表的运算(查找,插入,删除)

    2 查找 1 按序号查找 在单链表中 由于每个结点的存储位置都放在其前一结点的next域中 因而即使知道被访问结点的序号i 也不能像顺序表那样直接按序号i访问一维数组中的相应元素 实现随机存取 而只能从链表的头指针出发 顺链域next诸葛结
  • 代理记账公司怎样找客户?教你一个简单又有效的方法

    针对许多初创期公司而言 资金和人力资源管理都非常欠缺 重心点更偏重于业务流程自身 因而会将会计等有关问题交到代理记账公司 实际上这个是较为聪明的作法 代理记账是指将本公司的财务核算 做账 纳税申报等一系列的工作中所有委派给技术专业做账公司进
  • C语言之求两个整数之和

    include
  • uva 120(排序,检索)

    题目 Stacks and Queues are often considered the bread and butter of data structures and find use in architecture parsing o
  • Tesseract 最简单的图片文字识别

    Tesseract是一个开源的库 下面写一个最简单的实例 include stdafx h include strngs h include baseapi h include