1.基础样例

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>int main()
{char *outText;tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();// 初始化tesseract-ocr,使用英语,不指定数据路径if (api->Init(NULL, "eng")) {fprintf(stderr, "Could not initialize tesseract.\n");exit(1);}// 使用 leptonica library 打开图片Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");api->SetImage(image);// 获得最终的结果outText = api->GetUTF8Text();printf("OCR output:\n%s", outText);// 删除对象释放内存api->End();delete [] outText;pixDestroy(&image);return 0;
}

2.获得元素图片样例

  Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();api->Init(NULL, "eng"); //初始化tesseractapi->SetImage(image); //获得图像Boxa* boxes = api->GetComponentImages(tesseract::RIL_TEXTLINE, true, NULL, NULL); //获得元素图像printf("Found %d textline image components.\n", boxes->n);for (int i = 0; i < boxes->n; i++) {BOX* box = boxaGetBox(boxes, i, L_CLONE);api->SetRectangle(box->x, box->y, box->w, box->h); //获得元素的位置char* ocrResult = api->GetUTF8Text();  //获得对应文字int conf = api->MeanTextConf();fprintf(stdout, "Box[%d]: x=%d, y=%d, w=%d, h=%d, confidence: %d, text: %s",i, box->x, box->y, box->w, box->h, conf, ocrResult);}

以上是获得元素图片的基本方法,下面分析它所用到的一些方法。

Boxa* GetComponentImages(const PageIteratorLevel level,const bool text_only,Pixa** pixa, int** blockids)

GetComponentImages方法有四个参数,第一个参数设置分割的等级,它总共有5个选项。

选项 描述 原文
RIL_BLOCK 按块分 Block of text/image/separator line
RIL_PARA 按段分 Paragraph within a block
RIL_TEXTLINE 按行分 Line within a paragraph
RIL_WORD 按单词分 Word within a textline
RIL_SYMBOL 按字母分 Symbol/character within a word

这些参数的好处是可以将图像,不同类别的文字区别开,然后再进行处理。

第二个参数text_only为真,则只返回文字区域坐标,不返回图像区域坐标。
第三个参数pixa用于返回分割出来的图像,Null表示不返回图像。
第四个参数blockids返回序列号

该方法的返回值是一个结构体

struct Box
{l_int32            x;l_int32            y;l_int32            w;l_int32            h;l_uint32           refcount;      /* reference count (1 if no clones)  */};
typedef struct Box    BOX;struct Boxa
{l_int32            n;             /* number of box in ptr array        */l_int32            nalloc;        /* number of box ptrs allocated      */l_uint32           refcount;      /* reference count (1 if no clones)  */struct Box       **box;           /* box ptr array                     */
};
typedef struct Boxa  BOXA;

boxaGetBox是获得矩形数组中的某个矩形,L_CLONE是软拷贝,L_COPY是硬拷贝
MeanTextConf用于返回置信度

3.结果迭代样例

Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();api->Init(NULL, "eng");  //初始化api->SetImage(image);  //读取图片api->Recognize(0);tesseract::ResultIterator* ri = api->GetIterator();tesseract::PageIteratorLevel level = tesseract::RIL_WORD;if (ri != 0) {do {const char* word = ri->GetUTF8Text(level);float conf = ri->Confidence(level);int x1, y1, x2, y2;ri->BoundingBox(level, &x1, &y1, &x2, &y2);printf("word: '%s';  \tconf: %.2f; BoundingBox: %d,%d,%d,%d;\n",word, conf, x1, y1, x2, y2);delete[] word;} while (ri->Next(level));}

4. osd样例

  const char* inputfile = "/usr/src/tesseract/testing/eurotext.tif";tesseract::Orientation orientation;tesseract::WritingDirection direction;tesseract::TextlineOrder order;float deskew_angle;PIX *image = pixRead(inputfile);tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();api->Init("/usr/src/tesseract/", "eng");api->SetPageSegMode(tesseract::PSM_AUTO_OSD);api->SetImage(image);api->Recognize(0);tesseract::PageIterator* it =  api->AnalyseLayout();it->Orientation(&orientation, &direction, &order, &deskew_angle);printf("Orientation: %d;\nWritingDirection: %d\nTextlineOrder: %d\n" \"Deskew angle: %.4f\n",orientation, direction, order, deskew_angle);

osd进行页面的方向检测和文字的方向检测,文字方向检测主要是看文字的阅读方向。
SetPageSegMode设置页面分割模式。

enum PageSegMode {PSM_OSD_ONLY,       ///< Orientation and script detection only.PSM_AUTO_OSD,       ///< Automatic page segmentation with orientation and///< script detection. (OSD)PSM_AUTO_ONLY,      ///< Automatic page segmentation, but no OSD, or OCR.PSM_AUTO,           ///< Fully automatic page segmentation, but no OSD.PSM_SINGLE_COLUMN,  ///< Assume a single column of text of variable sizes.PSM_SINGLE_BLOCK_VERT_TEXT,  ///< Assume a single uniform block of vertically///< aligned text.PSM_SINGLE_BLOCK,   ///< Assume a single uniform block of text. (Default.)PSM_SINGLE_LINE,    ///< Treat the image as a single text line.PSM_SINGLE_WORD,    ///< Treat the image as a single word.PSM_CIRCLE_WORD,    ///< Treat the image as a single word in a circle.PSM_SINGLE_CHAR,    ///< Treat the image as a single character.PSM_SPARSE_TEXT,    ///< Find as much text as possible in no particular order.PSM_SPARSE_TEXT_OSD,  ///< Sparse text with orientation and script det.PSM_RAW_LINE,       ///< Treat the image as a single text line, bypassing///< hacks that are Tesseract-specific.PSM_COUNT           ///< Number of enum entries.
};

参考文献:
https://github.com/tesseract-ocr/tesseract/wiki/APIExample

tesseract 样例相关推荐

  1. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  2. 2021年大数据常用语言Scala(三十二):scala高级用法 样例类

    目录 样例类 定义样例类 样例类方法 样例对象 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),而且它会自动生成apply方法,允许我们快速地创建样例 ...

  3. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  4. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  5. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  6. 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...

  7. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

  8. ACMNO.21 C语言-逆序输出 输入10个数字,然后逆序输出。 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0

    题目描述 输入10个数字,然后逆序输出. 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 提示 数组?堆栈 ...

  9. ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7

    这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...

最新文章

  1. 李飞飞确认将离职!谷歌云AI总帅换人,卡耐基·梅隆老教授接棒
  2. Jquery的深度拷贝和深度克隆
  3. ie9怎么开兼容模式
  4. Android-04:线程的使用
  5. C#如何使用DirectX实现视频播放
  6. linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)
  7. leetcode172. 阶乘后的零 最快算法
  8. Rancher助力美国农业部的容器实践之路
  9. solidity return data和revert/require的reason string的获得
  10. 学习SQL:INNER JOIN与LEFT JOIN
  11. 使用CompletableFuture实现业务服务的异步调用实战代码
  12. SQL Sever 常用语句总结
  13. 关于do{}while()的代码讨论
  14. windows下封一些危险的端口
  15. su封面插件_儿豁嘛,这就是SU空间布线葵花宝典
  16. pyqt5 显示更新进度条_python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能...
  17. Python脚本文件的创建运行
  18. maven 阿里源配置完整 亲测有效
  19. 【emoji大全宝典】
  20. Effective C++学习笔记(条款1-34)

热门文章

  1. 教师节我用Python分析了336个赞美老师的句子,满满的幸福和开心
  2. Python使用pyopencl在GPU上并行处理批量判断素数
  3. java内部邮件系统_java 图形界面 邮件系统
  4. python未定义名称大小_名称错误:未定义名称“高度”
  5. mysql创建师徒_[郑州|结业弟子]JAVA-乔兆年|2020年05月09日的日报-技能树.IT修真院...
  6. oracle中的 expdp命令,Oracle 10G 数据泵中EXPDP命令行选项介绍
  7. php mysql单引号 双引号_php单引号、双引号与数据库
  8. python定时运行py文件_Python 定时运行脚本
  9. 决策树 随机森林 xgboost_一文看懂随机森林-RandomForest(附4个构造步骤+4种实现方式评测+10个优缺点)...
  10. 视觉SLAM——ORB-SLAM2运行tum数据集,kitti数据集,euroc数据集