Tesseract识别指定字符范围的字符

可以通过配置Tesseract来使用Tesseract进行OCR,opencv和opencv的C#版本Emgu都集成了Tesseract这个工具。

但是在使用时经常会出现误判,比如把“s”识别成“5”,把“1”识别成“l”或“i”。可以设置相应的参数来识别指定范围的字符。

下面是Emgu中关于这个函数的API文档:

Emgu.CV.OCR.Tesseract.Tesseract(string, string, Emgu.CV.OCR.Tesseract.OcrEngineMode, string)

public Tesseract(string dataPath, string language, Emgu.CV.OCR.Tesseract.OcrEngineMode mode, string whiteList)

Member of Emgu.CV.OCR.Tesseract

Summary:

Create an tesseract OCR engine.

Parameters:

dataPath: The datapath must be the name of the parent directory of tessdata and must end in / . Any name after the last / will be stripped.

language: The language is (usually) an ISO 639-3 string or NULL will default to eng.  It is entirely safe (and eventually will be efficient too) to call Init multiple times on the same instance to change language, or just to reset the classifier.  The language
may be a string of the form [~]%lt;lang>[+[~]<lang>]* indicating that multiple languages are to be loaded. Eg hin+eng will load Hindi and English. Languages may specify internally that they want to be loaded with one or more other languages, so the ~ sign
is available to override that. Eg if hin were set to load eng by default, then hin+~eng would force loading only hin. The number of loaded languages is limited only by memory, with the caveat that loading additional languages will impact both speed and accuracy,
as there is more work to do to decide on the applicable language, and there is more chance of hallucinating incorrect words.

mode: OCR engine mode

whiteList: This can be used to specify a white list for OCR. e.g. specify "1234567890" to recognize digits only. Note that the white list currently seems to only work with OcrEngineMode.OEM_TESSERACT_ONLY

Tesseract tesseract = new Tesseract();

tesseract.Init(path, lang,Tesseract.OcrEngineMode.OEM_TESSERACT_ONLY);//path为语言包路径,lang为语言

tesseract.SetVariable("tessedit_char_whitelist", "0123456789");

上面代码可以实现只识别数字,这样就会大大提高识别的准度。把“0123456789”改成“abcdefghijkmnopqrstuvwxyz”即可只识别出字母。

设置前:

设置后:

貌似还是会失误啊。。。

不要在乎这些细节

时间: 2024-08-29 23:50:02

Tesseract识别指定字符范围的字符的相关文章

删除最后结尾的指定字符后的字符

#region 删除最后结尾的指定字符后的字符 2 /// <summary> 3 /// 删除最后结尾的指定字符后的字符 4 /// </summary> 5 public static string DelLastChar(string str, string strchar) 6 { 7 if (string.IsNullOrEmpty(str)) 8 return ""; 9 if (str.LastIndexOf(strchar) >= 0 &a

【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集

Java中的一个char采用的是Unicode编码集,占用两个字节,而一个中文字符也是两个字节,因此Java中的char是可以表示一个中文字符的. 但是在C/C++中由于采用的字符编码集是ASCII,只有一个字节,因此是没办法表示一个中文字符的. 解答了上面的浅显易懂的问题之后,下面彻底理清楚字符 字节以及编码的原理. 其实关于编码以及字节的问题,在腾讯实习生一面的时候也问到过,当时搞不懂面试官为什么会问这个问题,现在想想,这个问题还是很考验一个人的思考以及钻研深度的,而且这个问题远远比自己想象

字符乱码之字符集和字符编码

最近经常会碰到上传客户提供的历史数据上传时csv文件用Excel打开时会有乱码问题,虽然知道知道是字符编码不一致导致的,但其中诸多细节却知之甚少,今日特来理理. 1.为什么会有字符乱码问题?如何解决字符乱码问题 计算机中存储的信息都是二进制数表示的,但是世界上有各种不同的语言文字,所以我们需要一些规则将各种字符转换成二进制后存储在计算机中 即编码,以及如果将存储在计算机中的二进制数解析出来即解码.就如破译电报密码一样如果密码本是错误的,那么密码也是错误.会有字符乱码问题就是因为解码方式是不对的,

字符指针,字符数组,双引号的字符串的区别与联系

作者 :  陈宗权 先说说双引号的字符串,比如"chenzongquan",它是由里面咱们看到的一系列字符以及一个尾随的'\0'字符组成,存储在内存的只读存储区中.只读存储区是在整个程序运行期间都保留着的.可见的,而且其中的数据原则上是保持不变的.所以对一个双引号表示的字符串,只要你知道它的具体地址,可以在程序的任何一个函数中再次使用. 说到只读,要引一下,在16位系统中没有进行内存访问保护,所以在程序运行时实际上也可以改变只读存储区中的数据,但是在32位系统中有内存访问保护,程序运行

通过编写串口助手工具学习MFC过程&mdash;&mdash;(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

多字节字符和宽字符

多字节字符和宽字符 开发多语言版软件,经常会碰到字符编码的问题,看了很多资料都说得不是很清楚,终于碰到一篇讲的不错的文章跟大家分享一下!(时间关系,翻译了重点部分) char型和wchar型 在日文版Windows上我们用到字符编码是Shift-JIS,主要的用1byte表示英数字,2byte表示日文字符,这种编码表示的字符称作多字节字符.(中文版Windows字符编码:GB2312) char数组的字符 世界上主流的标准字符编码是Unicode,在Windows上,英数字,日文字符,中文字符,

字符编码、字符存储、字符转换及工程中字符的使用

字符编码.字符存储.字符转换及工程中字符的使用 版本控制 版本 时间(北京时间) 作者 备注 V1.0 2016-05-13 施小丰 创建本文.第七章工程总结尚未完成 一.          前言 1.        目的 本文主要用于整理字符相关知识,包括字符编码.字符存储.行业标准.文件读写.工程注意事项等涉及字符相关的内容, 从而在实际工程中更好地设计和使用字符.更快地解决字符问题. 2.        适用范围 本文标题是"Windows C++字符编码.存储.转换大全", 但

Java 字符码、字符流、字节流

字符编码表 Ascii: 0-xxxxxxx正数 iso-8859-1: 拉丁码表1-xxxxxxx  负数. GB2312: 简体中文码表 GBK: 最常用的中文码表 String字符串默认 GB18030: 最新的中文码表 unicode: 国际标准码表 char字符默认 每个字符两字节 UTF-8: 基于unicode 每个字符一个或两个字节 能识别中文的码表:GBK.UTF-8 常见的编码 GBK  UTF-8  ISO-8859-1 文字--->(数字) :编码 "abc&quo

字符指针与字符数组

学了挺久的c语言,c语言有意思的就有指针这一大块,另外就是字符串,字符指针与字符数组的区别对于初学者应该是比较难以区分的,讲讲自己的看法. 1.定义上的区别 字符数组具有固定的地址,且字符数组的名字不能更改或运算. 字符指针是一个变量,用来存储首字符的地址,且指向的字符串通常为一个常量. char str[] = "helloworld"; str[4] = 'X'; printf("%s",str); 输出结果:hellXworld char *str = &qu