TesseractDotnet 的使用示例
下载源文件 (TesseractDotnetExample.zip)



TesseractDotnet 的使用其实还是很方便的,只是能参考的资料比较少 (Tesseract 本身的参考资料就少)。例如把图像作为单行文本进行 OCR,只要有下面这些代码就可以了:

  1. using System;
  2. using System.Drawing;
  3. using tesseract;
  4.  
  5. // ...
  6.  
  7. TesseractProcessor processor = new TesseractProcessor();
  8.  
  9. bool succeed = processor.Init(@"..\tessdata\""eng", 3); // TesseractEngineMode: DEFAULT
  10. if (!succeed)
  11. {
  12.     // Deal with error
  13.     Application.Exit();
  14. }
  15.  
  16. processor.SetVariable("tessedit_pageseg_mode""3"); // TesseractPageSegMode: PSM_SINGLE_LINE
  17.  
  18. Image image = Image.FromFile("...");
  19.  
  20. processor.Clear();
  21. processor.ClearAdaptiveClassifier();
  22.  
  23. string result = processor.Apply(image);
  24.  
  25. // ...

但有一点需要注意,TesseractProcessor.Init() 方法的第 1 个参数 dataPath 是 traineddata 文件所在路径,这个路径必须以斜杠 "/" 或反斜杠 "\" 结尾。否则初始化会失败,Init() 方法返回 false。

如果恰巧又没有对 Init() 的返回值进行处理,那么在进行到 Apply() 一步开始进行 OCR 时,会产生异常:

AccessViolationException:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.



这个问题应该是由于 Tesseract 3 中初始化部分函数对 dataPath 的处理存在缺陷而造成的。
当前语言: 中文 (简体) · also available in: English
Tesseract 3 语言数据的训练方法
需要用到的程序

(1) Tesseract 3.00
(2) Tesseract 3.00 Bugfix
(3) CowBoxer 1.01
(4) Universal Extractor 1.61 (非必需)

使用 Universal Extractor 将 Tesseract 的安装包解开,再用 Bugfix 里的 tesseract.exe 覆盖原来的主程序,Tesseract 就可用了。CowBoxer 是用于修改 box 文件的程序。

生成第一个 box 文件

演示中将 Tesseract 解压到了 E:\tesseract-ocr 目录。然后在该目录中建立了一个 build 目录用于存放原始数据和训练过程中生成的文件。原始图片数据一共有 3 个 (test.001.tif - test.003.tif):





首先生成第一个图片 test.001.tif 的 box 文件,这里使用官方的 eng 语言数据进行文字识别:

E:\tesseract-ocr\build>..\tesseract test.001.tif test.001 -l eng batch.nochop makebox
Tesseract Open Source OCR Engine with Leptonica
Number of found pages: 1.

执行完这个命令之后,build 目录下就生成了一个 test.001.box。使用 CowBoxer 打开这个 box 文件,CowBoxer 会自动找到同名的 tif 文件显示出来。



CowBoxer 的使用方法可以看 Help -> About 中的说明。修改完成之后 File -> Save box file 保存文件。

生成初始的 traineddata

接下来使用这一个 box 文件先生成一个 traineddata,在接下来生成其他图片的 box 文件时,使用这个 traineddata 有利于提高识别的正确率,减少修改次数。

..\tesseract test.001.tif test.001 nobatch box.train
..\training\unicharset_extractor test.001.box
..\training\mftraining -U unicharset -O test.unicharset test.001.tr
..\training\cntraining test.001.tr
rename normproto test.normproto
rename Microfeat test.Microfeat
rename inttemp test.inttemp
rename pffmtable test.pffmtable
..\training\combine_tessdata test.

在 build 目录下执行完这一系列命令之后,就生成了可用的 test.traineddata。

生成其余 box 文件

将上一步生成的 test.traineddata 移动到 tesseract-ocr\tessdata 目录中,接下来生成其他 box 文件时就可以通过 -l test 参数使用它了。

..\tesseract test.002.tif test.002 -l test batch.nochop makebox
..\tesseract test.003.tif test.003 -l test batch.nochop makebox

这里仅仅是使用 3 个原始文件作为例子。实际制作训练文件时,什么时候生成一个 traineddata 根据情况而定。中途生成 traineddata 的目的只是为了提高文字识别的准确率,使后面生成的 box 文件能少做修改。

生成最终的 traineddata

在所有的 box 都制作完成后,就可以生成最终的 traineddata 了。

..\tesseract test.001.tif test.001 nobatch box.train
..\tesseract test.002.tif test.002 nobatch box.train
..\tesseract test.003.tif test.003 nobatch box.train
..\training\unicharset_extractor test.001.box test.002.box test.003.box
..\training\mftraining -U unicharset -O test.unicharset test.001.tr test.002.tr test.003.tr
..\training\cntraining test.001.tr test.002.tr test.003.tr
rename normproto test.normproto
rename Microfeat test.Microfeat
rename inttemp test.inttemp
rename pffmtable test.pffmtable
..\training\combine_tessdata test.

在文件较多时可以用程序生成这种脚本执行。
当前语言: 中文 (简体)
DeBejeweled3 —— 自动玩 Bejeweled 3 的小程序
昨天夜里心血来潮,把好几年前就想写的自动玩 Bejeweled 的程序给写了。不过今天下午一搜,好像有人写过了,但看视频感觉是冲着刷分去的,没什么视觉效果,和我的目的不一样。



程序是 C# 写的,从 CodeProjects 上找来了抓屏、鼠标控制以及全局热键设置的代码,自己只写玩 Bejeweled 的算法。宝石的颜色通过取几个像素的色相平均值来判断,再遇到发光之类的非普通宝石时容易判断错误,大部分情况下还都可以,通过加入一定的随机性处理不至于让操作成为死循环。

宝石具体如何拖动,是靠对预先定义的模板进行匹配得到的。模板就像下面这个样子:

--A-
XXB-
--X-
--X-

程序启动时读取这些模板,对其进行水平/垂直翻转和旋转,以得到各种可能的情况。最终生成的可用数据是一个表示宝石分布的二进制序列 (如以上这个模板的二进制序列即为 0010 1100 0010 0010),一个表示要移动宝石的位置的整数 (以上这个模板中为 2),和一个表示目标位置的整数 (以上这个模板中为 6)。

程序对所有宝石进行 4x4 和 3x3 的分块后,也为每个分块生成一个二进制序列,若其与模板的二进制序列进行逻辑与运算的结果不为0,则表明该模板可应用于该分块。最终对所有可行的移动方法按优先级进行排序后,就能确定如何进行操作了。
当前语言: 中文 (简体)
WUSN Detector —— 通过摄像头识别手写 WUSN 编码的程序


图像预处理使用 EmguCV 库 (OpenCV 的 .NET 封装),文字识别采用 tesseractdotnet (Tesseract 3.0 的 .NET 封装)。自己主要是写了 WUSN 编码定位的算法,同时训练了一个用于 Tesseract 的自己手写英文和数字的数据文件。
当前语言: 中文 (简体)
福运泉酸枣汁瓶子上的印刷太山寨了
前些天买了两瓶福运泉的酸枣汁,看到这一瓶子的广告语我马上就想到 STC 的山寨网站了……



VS.



PS,这酸枣汁没喝出哪好喝来,而且卖6块的无糖型口感居然还不如2块多的淡汁型。
当前语言: 中文 (简体)
最近 DIY 的一个小功率音频功放
开始时本来是想做成一个用于实验的平台,各个模块都能很方便地进行更换。结果后来因为尺寸问题,搞着搞着就成了针对外壳定制的了。

现在板子都已制作完成,简单地调试了一下,应该没有问题。下一步就是把前后面板都弄完,再完善一下控制程序。

电源:





音源选择:





功率放大:





音量电位器:





控制:





整体:

各个板子都放到塑料外壳内的效果是这样的:



放上前面板和自己做的双头 XH2.54 线后的效果:


当前语言: 中文 (简体)
书籍推荐:刘树林《半导体器件物理》

当前语言: 中文 (简体)
书籍推荐:《运算放大器权威指南 (第3版)》

当前语言: 中文 (简体)
DoZ 甲类功放电路的 LTSpice 原理图文件


DoZ 甲类功放电路LTSpice 原理图文件
当前语言: 中文 (简体)
书籍推荐:黄昆 韩汝琦《半导体物理基础》


这学期在学半导体物理,学校用的刘恩科的那本半导体物理教材感觉很难阅读。黄昆这本书是1979年首次出版的,之后好像都没再印刷过。上个月从网上下载PDF版的看了一下,感觉和学校用的这本教材相比,更容易理解。

学校图书馆有这本书可借,但已经非常旧了,那时的印刷质量也不好。不过巧的是今年9月份科学出版社出了一套“中国科学技术经典文库·物理卷”的书,黄昆的这本书被再版了。精装本,开本也从原来的32开改为16开。前两天赶上某网站搞活动,就买下来了。书的印刷质量还是很不错的,和79年版本的书比起来,貌似书中的图重画过,光是印刷技术改变的话应该不会有这么大的变化。
当前语言: 中文 (简体)
更多条目: [1] ... [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] ... [17]
« 上一页 · 下一页 »