tesseract-ocr 第四课 如何训练新语言

2023-11-12

tesseract 3.0x是完全可训练的。该页描述了训练过程,提供了一些指南来应用到各语言中。

版权所有,转载请注明出处,并标明链接
作者:jolly wang
介绍
tesseract 3.0x是完全可训练的。该页描述了训练过程,提供了一些指南来应用到各语言中。
背景和权限
tesseract原先只为English文本而设计。后来经过努力,可以处理其它语言,以及 utf8字符。tesseract 3.0可以处理任何unicode字符,但只限于已经成功的字符集。
tesseract 3.01 新增了 从上到下 阅读顺序的语言, tesseract 3.02 添加了希伯来语  Hebrew  (从右到左)。tesseract当前只有一个辅助引擎cube来处理阿拉伯语(Arabic)。(在3.0+中新增)
tesseract在一些大语种语言中进展缓慢,比如中文,但是目前可以运行。
任何语言都有不同的标点和数字,很难被只认ASCII标点和数字的  硬编码算法识别  。该问题将在3.0x中解决。x>=2
4.1:需要的数据
为了训练另一种语言,你可以在tessdata子目录下创建一些数据文件,接着使用combine_tessdata将它们融合进一个文件,命名规范为:  languagecode.file_name。语言码可以遵从ISO 639-3标准。3.00使用的English文件有:
  • tessdata/eng.config
  • tessdata/eng.unicharset
  • tessdata/eng.unicharambigs
  • tessdata/eng.inttemp
  • tessdata/eng.pffmtable
  • tessdata/eng.normproto
  • tessdata/eng.punc-dawg
  • tessdata/eng.word-dawg
  • tessdata/eng.number-dawg
  • tessdata/eng.freq-dawg
接着融合成一个文件:
tessdata/eng.traineddata
然后提供另一个独立文件:
tessdata/eng.user-words
traineddata文件通常是一个输入文件的连接,带有目录表,并包含了已知文件类型的偏移。在源代码中见ccutil/tessdatamanager.h,可以看到当前接受的文件名列表。注意,  traineddata  文件不同于3.00版本以上的列表,并且很可能在以后版本中变动。
4.2 准备文本输入文件
文本输入文件(  lang.config, lang.unicharambigs, font_properties, box files, wordlists for dictionaries..  )需要满足以下需求:
  • ASCII 或者 utf8 编码,没有BOM
  • uinx行结尾符('\n')
  • 文件尾空行(否则:将得到错误信息:last_char == '\n':Error:Assert failed..
4.2.1 How little can you get away with?
你必须使用下面的过程来创建  unicharset, inttemp, normproto, pfftable。如果你只尝试识别一个受限范围的字体(例如:单一字体),那么一个简单的训练页就足够了。在你的应用程序中不再需要提供  另外的文件  ,但是必须更精确。老的DangAmbigs已经被替换成  unicharambigs。
4.3 训练过程
一些过程不可避免是人工的。尽可能提供自动化帮助。在将来,会出来许多自动化工具,但需要更复杂的install/build过程。以下的工具是自带的:
4.3.1 生成训练图像
第一步是决定使用完整的字符集,准备一个包含了许多样本集的文本或词处理文件。重点要注意的是,当创建一个训练文件时:
  • 确保每个字符的最小数目的样本。10很好,但5只对少数字符有效。
  • 常用字符的样本应更多:至少20个。
  • 不要将所有非字母组合在一起。让文件更实际化。例如,“The quick brown fox jumps over the lazy dog. 0123456789 !@#$%^&(),.{}<>/?”,这个就很糟糕。而这个则更好:“The (quick) brown {fox} jumps! over the $3,456.78<lazy> #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam?” ,这个给出了文本行查找码,来获取特定字符的基标语义。
  • 当打印时,文本空格绝对安全。。。。。。
  • 训练数据应该按字体分组。。。。。
  • 没必要训练多个size的文本。。。。。
  • 不要在一个image文件混合多种字体(确切的说:在单个.tr文件中),它将造成丢弃一些特征,导致识别错误
  • 下载页的boxtiff文件将帮助你如何格式化你的训练数据。
接着,打印和扫描(使用一些电子渲染方法)来创建你的训练页的image。直到32个训练文件都被使用。它交创建一个混合的字体和样式,包含italic和bold。
注意:由于间距,训练真实的image是相当困难的,这个将在未来改善。对于现在,更容易打印和扫描你自己的训练文本。
你也可以保存你的文本成为一个utf8文本文件,用来在下一步中,将代码插入到另一个文件。
对于大量训练数据的识别,对于多数字体,  限制  32个图像。每个字体都应被放到单个 多页tiff(只有你正使用libtiff),和boxfile中,可以通过修改指定页数来为每个字符做协调。。。。。
4.3.2 制作box file
接下来,tesseract需要一个‘box’文件来定位每个训练图像。box文件是一个文本文件,它在每行列出了训练图像的字符,以及围绕  bounding box  的坐标。tesseract 3.0有一个模式,可以用来输出一个需要格式的文本文件,但是如果字符集不同于当前训练,它将自然地具有不对的文本。因此,这里的关键是,需要人工编辑正确的文本进去。
命令行下运行tesseract你的训练图片:
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
比如:
tesseract eng.timesitalic.exp0.tif eng.timesitalic.exp0 batch.nochop makebox
接下来是最困难的部分。你需要编辑文件   [lang].[fontname].exp[num].box  ,并为每个字符放至utf8编码在文件是每行起始处。例如:发行版包含了一个图像:eurotext.tif. 运行以上的命令来生成一个文本文件,可 以包含下面的行:
s 734 494 751 519 0 p 753 486 776 518 0 r 779 494 796 518 0 i 799 494 810 527 0 n 814 494 837 518 0 g 839 485 862 518 0 t 865 492 878 521 0 u 101 453 122 484 0 b 126 453 146 486 0 e 149 452 168 477 0 r 172 453 187 476 0 d 211 451 232 484 0 e 236 451 255 475 0 n 259 452 281 475 0
因为  Tesseract   以英文模式运行  ,它不能正确识别元音(umlaut)。这种字符需要使用一个合适的编辑器来纠正。可以使用能识别utf8的编辑器。HTML 编辑器是个不错的选择。。。。
理论上,boxfile中的每行都表示了你训练文件中的每个字符,如果你需要水平分隔字符,比如双逗号 ,, 它将具有两个box需要合并。
示例:  lines 116-129:
D 101 504 131 535 0 e 135 502 154 528 0 r 158 503 173 526 0 , 197 498 206 510 0 , 206 497 214 509 0 s 220 501 236 526 0 c 239 501 258 525 0 h 262 502 284 534 0 n 288 501 310 525 0 e 313 500 332 524 0 l 336 501 347 534 0 l 352 500 363 532 0 e 367 499 386 524 0  389 520 407 532 0
你将看到, 最下面的双引号字符被表达成两个单一的逗号。bounding box必须按以下方式合成:
  • 第一个数(左)采用两行中最小的(197)
  • 第二个数(下)采用两行中最小的(496)
  • 第三个数(右)采用两行中最大的(214)
  • 第四个数(上)采用两行中最大的(508)
于是,给出:
D 101 504 131 535 0 e 135 502 154 528 0 r 158 503 173 526 0 ? 197 497 214 510 0 s 220 501 236 526 0 c 239 501 258 525 0 h 262 502 284 534 0 n 288 501 310 525 0 e 313 500 332 524 0 l 336 501 347 534 0 l 352 500 363 532 0 e 367 499 386 524 0  389 520 407 532 0
如果你不能成功地在训练图像中将字符分隔开,其中一些会被圈进另一个box中。在一些情况下,你可以使用更好的空格和起点,重新标注图像。(比如:2.04,有24个字节来描述一个字符的限制,这将允许你  根据你的unicode字符集,  在6到24个unicode间来描述这个字符。如果达到该限制,请编写一个issue描述你的情况)
注意:在box 文件中的坐标系统,在左下边有(0,0)。
如果你的编辑器支持utf8,该过程将更简单,每个utf8字符都最高支持4字节来编写它,使用dumb功能可以查看所有字节。
一些支持编辑box文件的可视化工具:  AddOns wiki  .
4.3.3 自引导一个新的字符集
如果你尝试一个新的字符集,将它们使用单字体来获取一个新的box文件会很合适,运行其余的训练过程,接着使用tesseract来生成其它的box文件:
tesseract fontfile.tif fontfile -l yournewlanguage batch.nochop makebox
这将使得第二个box文件更容易生成,一种较好的选择是,tesseract将识别出大多数正确文本。你可以总是重复这个过程,来添加更多的字体到训练集中(比如:命令行工具 mfTraining 和 cnTraining)来制作它们,但是注意,还没有增量模式来允许你添加新的训练数据到存在的字符集中。这意味着每次你运行mfTraining和cnTraing工具,你可以从tr文件中制作新的数据文件,这些工具不会将采用已经存在的intproto/pffmtable/normproto并将它们直接添加进去。
4.3.4 全新提供Tif/Box pair!!
Tif/Box 对在新的下载页提供。(注意:tiff文件采用G4压缩以便节省空间,因此,你必须首先具有libtiff或者未压缩的数据)。你可以遵从以下过程,来为你的语言生成更好的训练数据或添加不同的字符形状到已经存在的语言中:
  1. 过滤box文件,只保持你想要的字符。
  2. 运行tesseract来训练。
  3. 对于每种字体,从多个语言中cat出.tr文件,来获取你想要的字符休,并从你有的字体或字符中添加.tr文件
  4. 以相同的方式cat出已经过滤的box文件到.tr文件中,以便在unicharset_extractor中处理
  5. 运行训练过程的其它步骤
注意!这听起来并不简单!cntraining和mftraining只能最多采用32个.tr文件,因此,对于相同的字体,你必须从多种语言中,以字体独立的方式,将所有的文件  cat到一起来让32种语言结合在一起。cntraining/mftraining以及unicharset_extractor命令行工具必须各自由给定的.tr和.box文件,以相同的顺序,为不同的字体进行不同的过滤。可以提供一个程序来完成以上的事情,并在字符集表中挑出相同字符集。这样会将事情更简单些。
4.3.5 运行 tesseract进行训练
对于你的训练图像,box文件对,以训练模式运行tesseract:
tesseract fontfile.tif junk nobatch box.train
或者
tesseract fontfile.tif junk nobatch box.train.stderr
在版本2.03及以下,第一种方式发送所有错误给 tesseract.log(在所有平台上)。而使用box.train.stderr,将发送错误到stderr 上。
注意,box文件名必须匹配tif文件名,包含路径,否则tesseract将找不到它。这一步的输出是fontfile.tr,它包含了训练页的每个字符的特征。注意,输出名从输入的图像名中派生出来,而非正常的输出名,这里的junk. junk.txt将被使用单个不带文本的新行来写。
非常重要 在apply_box中确认输出错误。如果报告了FATALITIES,没必要继续训练过程,  直到你你修正box文件。新的box.train.stderr配置文件使得它很选择输出的位置。一个FATALITY通常标明这一步错误。如果该坐标错误,那么关注的特征图像也将错误。如果一个字符没有工作样本不能被识别,那么生成的inttemp文件将不会茶杯unicharset文件,接着tesseract 将中止。
另一个错误:box file format error on line n.。。。。。。。
没必要编辑fontfile.tr文件的内容。里面的字体名不必设置。出于好奇,以下是该格式的信息:
Every character in the box file has a corresponding set of entries in the .tr file (in order) like this UnknownFont <utf8 code(s)> 2 mf <number of features> x y length dir 0 0 ... (there are a set of these determined by <number of features> above) cn 1 ypos length x2ndmoment y2ndmoment The mf features are polygon segments of the outline normalized to the 1st and 2nd moments. x= x position [-0.5.0.5] y = y position [-0.25, 0.75] length is the length of the polygon segment [0,1.0] dir is the direction of the segment [0,1.0] The cn feature is to correct for the moment normalization to distinguish position and size (eg c vs C and , vs ')
5 计算字符集
tesseract需要知道可能要输出的字符集。为了生成unicharset数据文件,在相同的页bounding box文件上使用unicharset_extractor程序进行聚类:
unicharset_extractor fontfile_1.box fontfile_2.box ...
tesseract需要访问字符属性  (  isalpha, isdigit, isupper, islower.  ).该数据而可以以unicharset的数据形式被编码。每行都是一个字符。utf8的字符是按照十六进制数表达。每位表示一个属性。如果相应位置1,它意味着属性是真的。这些位(从最小位到最大位):  isalpha, islower, isupper, isdigit。
示例:
  • ';' 为非字母字符,小写字符,大小字符,而非数字。它的属性通过二进制数 10000表示(16进制的10表示 )
  • 'b'是一个字母字符,小写字符。它的属性通过二进制数00011表示(3)
  • 'W'是一个字母字符,大写字符。它的属性通过二进制数00101表示(5)
  • '7'只是一个数字。它的属性通过二进制数01000表示(8)
  • ‘=’非数字或字母字符。它的属性通过二进制数字00000表示(0)
; 10 Common 46 b 3 Latin 59 W 5 Latin 40 7 8 Common 66 = 0 Common 93
日文或中文字母字符属性由二进制数00001表示(1)
如果你的系统支持wctype函数,这些值都将通过unicharset_extractor自动设置,并且没必要通编辑unicharset文件。在一些老的系统中,unicharset文件必须通过手动添加属性描述代码。
注意    inttemp,  normproto   和  pffmtable被生成时,  unicharset文件必须重新生成  (比如:当box文件被更改时,它们必须被重新创建)。必须以正确的方式,随着inttemp存储成索引到unicharset中时,实际的字符将通过给定索引的unichaset分类器返回。
最后两列表示脚本类型(  Latin, Common, Greek, Cyrillic, Han, null  ),以及相应语言的字符id。
5.1 字体属性(3.01 中新)
3.01中的新需求是font_property文件。该文件的目的是提供字体形式信息,当字体被识别时,将出现在输出中。font_properties 文件是一个文本文件,通过 -F filename 选项指定来进行mftraining.
每行的font_properties文件都以如下进行格式化:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
当<fontname>是一个字体的字符串名,并且<italic>, <bold>, <fixed>, <serif> and <fraktur>   是所有简单的0 或 1标记,表示字体具有命名属性。
当运行mftraining时,每个.tr文件名必须有相关entry在font_properties文件中,否则将中止mftraining。。。。。
例如:
font_properties文件如下:
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr 
5.2 聚合
当所有训练页的字符特征被抽取出来时,我们需要将它们聚集起来创建prototype文件。这些字符形状特性可以通过使用shapeclustering(在3.02版本之后提供)、mftraining 和 cntraining 程序进行聚焦。
shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
shapeclustering通过形状聚集创建了主形状表,并将它写到一个文件中:shapetable.
mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
-U 文件表示unicharset,由上面的  unicharset_extractor   生成,     lang.unicharset是输出unicharset,它将由 combine_tessdata给出。Mftraining将输出两个其它的数据文件:inttemp(形状原型)和pffmtable(每个字符所希望的特征)。  
cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...
它将输出normproto 数据文件(character normalizati  on sensitivity prototypes 
6.字典数据(可选)
tesseract为每种语言使用三个字典文件。两种文件被编码成  有向非循环字图.  DAWG (     Directed Acyclic Word Graph  ).其它是普通utf8文本文件:
Name Type Description
punc-dawg dawg A dawg made from punctuation patterns found around words. The "word" part is replaced by a single space.
word-dawg dawg A dawg made from dictionary words from the language.
number-dawg dawg A dawg made from tokens which originally contained digits. Each digit is replaced by a space character.
freq-dawg dawg A dawg made from the most frequent words which would have gone into word-dawg.
fixed-length-dawgs dawg Several dawgs of different fixed lengths —— useful for languages like Chinese.
bigram-dawg dawg A dawg of word bigrams where the words are separated by a space and each digit is replaced by a ?.
unambig-dawg dawg TODO: Describe.
为了生成DAWG字典文件,你首先需要为你的语言提供一个wordlist。你需要找到一个合适的字典文件,用来作为一个 spellcheckers   的  wordlist的基础 (ispell aspell hunspell)== 注意lincense. wordlist格式化成一个utf8的文本文件,每行都有一个词。将wordlist分割成需要的集合: 比如:常用词,其它剩下的词,接着使用worldlist2dawg来生成DAWG文件:
wordlist2dawg frequent_words_list lang.freq-dawg lang.unicharset wordlist2dawg words_list lang.word-dawg lang.unicharset
对于从右向左的语言(RTL)使用选项 "-r 1".  其它选项参照:  wordlist2dawg Manual Page
注意:wordlist必须包含至少一个单词!在合并的traineddata文件中不允许存在。
如果单词总是具有标点在其中,比如:google.com , 那么在字典中包含它们很合适。
最后的字典文件称为:user-words,通常为空。
如果你需要字典wordlists的样本文件,解合并(使用  combine_tessdata  )已经存在的语言数据文件(比如:eng.traineddata),接着使用  dawg2wordlist  抽取wordlists.
7、最后的文件(unicharambigs
tesseract最后使用的数据文件称为:  unicharambigs  。它表示了在字符或字符集间固有的模糊,这通常整个都是以人工方式生成。为了理解文件格式,查看以下示例:
v1 3       I I 0   2       u o     3 3       I - I   1       H       2 2       ' '     1       "       1 2       ?? 6    1       ??     1 1       m       2       r n     0 3       i i i   1       m       0
第一行是一个版本标识符。剩下的行包含了5个以tab分隔的字段。第一个字段表示的是第二个字段的字符串数。第三个字段表示的是第四个字段的字符串数。第5个字段是一个类型标识符。第二和第四个字段表示了空格分隔的字符串。这可以是一个utf8格式的文件,因此,每个字符串是一个utf8字符串。每个这样的字符串必须匹配unicharset文件中一些行的第一个字段,比如,它必须是一个可识别单元。
类型表示符的值如下:
Value Type Description
0 NOT_AMBIG the ngram pair is not ambiguous
1 REPLACE_AMBIG ocred ngram should always be substituted with correct
2 DEFINITE_AMBIG add correct ngram to the classifier results (1-1)
3 SIMILAR_AMBIG use pairwise classifier for ocred/correct pair (1-1)
4 CASE_AMBIG this is a case ambiguity (1-1)
替代规则是,
如果第5个字段为1, 在第二字段中的 字符串集联总会被第4字段中的字符串联连替代。
如果第5个字段为0,那么没必要替换。
它扮演着hint的角色,如果替换将一个非字典词替换为一个字典词,那么,这个词就应该用来训练该适配性分类器,分段搜索可以提高识别第4个字段的可能性。主要影响是,第5个字段为0的主要影响是,减少错误适配,它不会使用更高的hint来替代。
当为2时,第一行显示了双引号('')应该被替换单引号(')。(第5个字段标是是否标准替换)。第二行表示的是,pair 'rn'可能有时被识别成'm'。而第三行表示,字母‘m  ’可能有时被识别成序列'iii'。第4行表示,  埃纳德语符号“  ??  ”,常被误识别,因为符号“  ??  ”后面跟着的数字‘6’,接着的序列常常被替换。最后一行可以是空行('\n')。
注意,  两边的  字符应出现在  unicharset中。该文件不能用来从一种字符翻译成另一种字符。
unicharambigs文件应该为空,或者不存在。
8.将它们放在一起
所有都合在一起!你需要做的所有事情是将它们收集在一起(shapetable, normproto, inttemp, pffmtable),并且重命名为一个lang.prefix,lang可以是3个字符的编码(     http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes    ),接着以如下方式运行:
combine_tessdata lang.
注意,不要忘记加句点。
接着将生成lang.traineddata。tesseract可以识别文本:
tesseract image.tif output -l lang
实际上,你可以使用语言码中的任何字符串,但是,如果你想任何人能轻易理解,按ISO 639的方式命名。
关于  combine_tessdata  更多选项,在  Manual Page 或者源码注释中(  source code  )。
转自:http://my.oschina.net/ywbrj042/blog/405992
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tesseract-ocr 第四课 如何训练新语言 的相关文章

  • 除了 Tesseract 之外还存在哪些 OCR 选项? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 字符识别(OCR算法)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个项目 其中我必须开发 OCR 算法 我必须从图像中读取文本 然后将其转换为不同的语言 所以我的第一个任务是从图像中获取文
  • Java OCR 库有推荐吗? [复制]

    这个问题在这里已经有答案了 我需要检查大量图片 看看它们是否有关键字 谁能推荐一个好的 可靠的 OCR 库 我很乐意牺牲速度来换取准确性 没有纯 Java OCR 库具有与准确性有关的事情 https stackoverflow com q
  • 如何使用OCR(TesseractOCR)php库

    我使用此链接克隆了 OCR 的 git 库 git clone git github com thiagoalessio tesseract ocr for php git 然后我只需按照以下步骤包含所需的文件example http th
  • 识别图像中的 visio 形状

    在提供 SCADA 解决方案时 我们经常会获得结构化控制图 如下所示的 visio 类似流程图 中指定的最终用户规范 这些规范通常以 PDF 格式或图像形式提交 为了在 C 中访问这些 我希望使用 OpenCV 库之一 我正在研究模板识别
  • OCR 处理前的图像预处理

    我当前的项目涉及将 pdf 中的文本转录为文本文件 我首先尝试将图像文件直接放入 OCR 程序 tesseract 中 但效果不佳 原始图像文件基本上是旧报纸 并且有一些背景噪音 我确信 tesseract 存在问题 因此 我尝试在将图像输
  • Android 中最好的 OCR(光学字符识别)示例 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想要一个在android中运行OCR的例子 我做了一些研究并找到了一个在android中实现OCR的例子 https github co
  • 使用Python从具有两列或三列数据的图像中使用OCR读取图像中的文本

    在示例图像中 仅作为参考 我的图像将具有相同的图案 一个页面具有完整的水平文本 其他页面具有两个水平文本列 如何在python中自动检测文档的模式并逐一读取另一列数据 我将 Tesseract OCR 与 Psm 6 一起使用 它是水平读取
  • 什么是可以检测手写的好的 OCR? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要一个库 可以在扫描手写纸后从其中提取文本 正常拉丁文本 它可以是一个免费的解决方案 甚至是我必须付费的解决方案 只要它可以处理大写字
  • 提高 Python Tesseract OCR 的准确性

    我在用pytesseract https pypi org project pytesseract 随着openCV https pypi org project opencv python 在 Python 中的简单 django 应用程
  • 提高识别率的图像预处理步骤

    我正在为我的项目使用 TessBaseAPI 制作一个简单的 OCR Android 应用程序 我已经完成了一些图像预处理步骤 例如二值化和图像增强 但他们的结果是50 到60 怎样才能提高识别率呢 我包括两个示例图像 http image
  • 如何将 Tesseract 导入 Angular2 (TypeScript)

    我正在尝试将 Tesseract 导入 Angular2 TypeScript 我可以看到它保存到 node modules 文件夹中 但是在使用时 import Tesseract from types tesseract js it s
  • Tess4j - Pdf 到 Tiff 到 tesseract - “警告:分辨率 0 dpi 无效。使用 70 代替。”

    我正在使用 tess4j net sourceforge tess4j tess4j 4 4 0 并尝试对 pdf 文件进行 OCR 因此 据我了解 我必须首先将 pdf 转换为 tiff 或 png 其中有任何建议吗 我这样做是这样的 t
  • Tess4j 问题 java.lang.UnsatisfiedLinkError

    我正在尝试解决 Tess4J 安装问题 1 我在 WEB INF win32 x86 中创建了一个文件夹2 我把 libtesseract302 dll 和 liblept168 dll 放在那里 然后将其添加到 java 构建路径中的源
  • 训练 tesseract 与 iPhone 一起使用

    我正在尝试在我的 iPhone 应用程序中使用 tesseract 2 04 只想检测数字 我在这里所做的首先是使用这篇文章交叉编译 tesseract 以生成 lib 文件http robertcarlsen net 2009 07 15
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • 在 R 中使用深度网络和 MNIST 数据读取手写数字第 3 部分

    我尝试编写一个基于深度网络的程序来读取手写数字 我在 Youtube 上找到了一个代码 https www youtube com watch v 5bso 5X7Zu4 https www youtube com watch v 5bso
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 从笔记本中提取文本

    我正在尝试从图像中提取手写文本 我使用 python 和 opencv 函数 例如 find contours 当我使用像这样的图像时 一切进展顺利 它工作得很好 因为我有一个简单的背景 但后来我用这张图片测试了它 由于背景中有笔记本的线条
  • 使用 Tesseract 进行手写识别

    我只是想知道 如果将大写字母全部放在表格中自己的小框中 那么超正方体的手写识别准确度有多高 我知道你可以训练它来识别你自己的笔迹 但我的问题是我需要在多个笔迹中使用它 有人能指出我正确的方向吗 多谢 简而言之 您必须训练 Tesseract

随机推荐

  • 浅谈Router和Route

    router 和 route 是在前端框架中用于管理和处理路由的两个关键概念 这两者之间的关系可以通过具体的代码来解释 在本示例中 我将使用 React 和 React Router 来说明它们之间的关系 Router 路由器 Router
  • DataPipeline丨DataOps的技术考量

    作者 DataPipeline CEO 陈诚 从 数据的资产负债表与现状 到 DataOps理念与设计原则 直至 DataOps的组织架构与挑战 我们对于DataOps的讨论已经进行了三周 不难发现 在此期间 我们探讨的话题始终围绕在上层建
  • SSR、SSE、SST、R2

    在MATLAB中 计算回归问题的拟合优度 或判定系数 可用 B BINT R RINT STATS regress Y X 指令 其中的STATS的第一个返回值即为R2 R2约接近于1 拟合效果越好 SSR为回归平方和 SSE为残差平方和
  • React官网入门项目井字棋游戏

    React官网里有很详细的教程 也有在线沙盒 但是写的东一榔头西一棒槌的 不适合新手入门 所以我还是建议大家可以先去看看阮一峰大神的React博客或者某硅谷的网课 这个网课讲的很详细 甚至详细到有些啰嗦 我大概是用20天把网课看完 然后再看
  • 进程信号(信号产生、注册、注销、处理),信号阻塞和volatile关键字

    文章目录 进程信号 信号产生 信号在进程中注册 信号在进程的注销 信号的处理 信号的处理方式 信号阻塞 如何阻塞一个信号 int sigprocmask int how sigset t set sigset t old int sigem
  • 从零开始制作Linux

    提到制作Linux 大家都能想到如雷贯耳 大名鼎鼎的Linux from scratch 但Linux from scratch的复杂性不是普通人能轻易掌握的 对于初学者来说 任何步骤出现不一致 会让初学者遇到挫拆 攻破LFS的信心越来越低
  • 【Linux命令】Linux复制时显示进度

    sudo rsync av progress src dest 效果如下图 更详细的使用 linux 命令 rsync 详解 yspg 217的博客 CSDN博客 linux rsync命令详解
  • 十四、计算机网络--iptables

    iptables只是个传参的工具 真正起作用的内核中的netfilter 1 默认的五种规则链 INPUT OUTPUT FORWARD POSTROUTING PREROUTING 2 默认的4个规则表 raw表 确定是否对该数据包进行状
  • 一文带你了解socket网络编程以及详解过程和原理

    创作不易 期望亲友们给个免费的就行 文章目录 一 什么是socket 二 TCP IP 三 socket原理 四 代码说明 五 API函数 一 什么是socket Socket 套接字 是计算机网络编程中的一种抽象概念 它提供了在网络上进行
  • OpenGL ES着色器语言(GLSL ES)规范 ——上篇

    文章目录 前言 OpenGL ES基础 一段基本的着色器代码 大小写和分号 数据值类型 命名规范 类型转换 运算符 矢量和矩阵 矢量和矩阵类型 矢量构造 访问 矩阵构造 访问 矢量矩阵运算规则 特殊类型 结构体和数组 结构体 数组 取样器
  • android 自动换行布局

    此方法是固定每行居中 使用 android paddingLeft dimen margin common 10 android paddingRight dimen margin common 15 进行调整左右间距 import and
  • PannoOccUnified Occupancy Representation for Camera-based 3D Panoptic Segmentation

    中科院 摘要 周围三维世界的综合建模是自主驾驶成功的关键 然而 现有的感知任务 比如目标检测 道路结构分割 深度和高度估计以及开放式对象定位 都只关注于整体三维场景理解任务的一小部分 这种分而治之的策略简化了算法开发过程 但代价是失去了问题
  • 地理坐标系_GCS汇总

    地理坐标系 GCS汇总 4001 GCS Airy 1830 GEOGCS GCS Airy 1830 DATUM D Airy 1830 SPHEROID Airy 1830 6377563 396 299 3249646 PRIMEM
  • Flutter学习二:最简单的Material Flutter应用

    import package flutter material dart void main 顶层容器 相当于rootview runApp new MaterialApp 标题 title Flutter Application 主题 t
  • lcov和gcov的使用错误

    编译使用的gcc版本和gcov的版本对不上的话 使用lcov和gcov的时候会报错 lcov的错误 xx localhost XXX lcov capture directory cov output file xxx info test
  • 程序员:腾讯32k,16个月+5万签字费,美团35k,15.5个月,怎么选

    腾讯和美团都是国内非常知名的互联网公司 是很多程序员非常向往的公司 最近有一位java程序员同时拿到了这两个公司的offer 却不知道应该选哪一个好 腾讯这边给的offer是32k一个月 一年16个月工资 另外还有5万块钱签字费 美团的of
  • vue中methods一个方法调用另外一个方法

    vue在同一个组件内 methods中的一个方法调用methods中的另外一个方法 可以在调用的时候 this options methods test2 this options methods test2 一个方法调用另外一个方法 ne
  • 今天我们来分享一下著名的分布式存储项目IPFS吧嘻嘻(最近在金融科技大赛,有相关的了解调用)

    我们先来了解一下HTTP的机制和原理吧 对于我们现在的网页协议来说 所有的HTML等前端的页面结构显示和文件都是通过HTTP请求来进行对中心化服务的访问 就像某一些时候 我们会发现自己的网页是不存在 是因为在服务器的中间无法的接受到我们的请
  • TypeScript 联合类型

    联合类型 联合类型 Union Types 可以通过管道 将变量设置多种类型 赋值时可以根据设置的类型来赋值 语法 Type1 Type2 Type3 实例 let res string number res 12 console log
  • tesseract-ocr 第四课 如何训练新语言

    tesseract 3 0x是完全可训练的 该页描述了训练过程 提供了一些指南来应用到各语言中 版权所有 转载请注明出处 并标明链接 作者 jolly wang 介绍 tesseract 3 0x是完全可训练的 该页描述了训练过程 提供了一