tesseract 样例
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 样例相关推荐
- YOLOv4 资源环境配置和测试样例效果
YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...
- 2021年大数据常用语言Scala(三十二):scala高级用法 样例类
目录 样例类 定义样例类 样例类方法 样例对象 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),而且它会自动生成apply方法,允许我们快速地创建样例 ...
- 在Ubuntu下构建Bullet以及执行Bullet的样例程序
在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...
- JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Oracle简单脚本演示样例
Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR VARCHAR2( ...
- 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...
- 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 ...
- 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 提示 数组?堆栈 ...
- ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7
这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...
最新文章
- 李飞飞确认将离职!谷歌云AI总帅换人,卡耐基·梅隆老教授接棒
- Jquery的深度拷贝和深度克隆
- ie9怎么开兼容模式
- Android-04:线程的使用
- C#如何使用DirectX实现视频播放
- linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)
- leetcode172. 阶乘后的零 最快算法
- Rancher助力美国农业部的容器实践之路
- solidity return data和revert/require的reason string的获得
- 学习SQL:INNER JOIN与LEFT JOIN
- 使用CompletableFuture实现业务服务的异步调用实战代码
- SQL Sever 常用语句总结
- 关于do{}while()的代码讨论
- windows下封一些危险的端口
- su封面插件_儿豁嘛,这就是SU空间布线葵花宝典
- pyqt5 显示更新进度条_python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能...
- Python脚本文件的创建运行
- maven 阿里源配置完整 亲测有效
- 【emoji大全宝典】
- Effective C++学习笔记(条款1-34)
热门文章
- 教师节我用Python分析了336个赞美老师的句子,满满的幸福和开心
- Python使用pyopencl在GPU上并行处理批量判断素数
- java内部邮件系统_java 图形界面 邮件系统
- python未定义名称大小_名称错误:未定义名称“高度”
- mysql创建师徒_[郑州|结业弟子]JAVA-乔兆年|2020年05月09日的日报-技能树.IT修真院...
- oracle中的 expdp命令,Oracle 10G 数据泵中EXPDP命令行选项介绍
- php mysql单引号 双引号_php单引号、双引号与数据库
- python定时运行py文件_Python 定时运行脚本
- 决策树 随机森林 xgboost_一文看懂随机森林-RandomForest(附4个构造步骤+4种实现方式评测+10个优缺点)...
- 视觉SLAM——ORB-SLAM2运行tum数据集,kitti数据集,euroc数据集