书籍推荐: FPGA Prototyping By Verilog Examples by Pong P. Chu


Pong P. Chu - FPGA Prototyping By Verilog Examples
当前语言: 中文 (简体) · also available in: English
AutoJewel 0.1.0 -- 自动玩 Bejeweled 3 的程序
今天又花了一天时间把六月份提过的那个自动玩 Bejeweled 的程序的代码改了一下。开始时只是一个花了一夜时间弄出来的原型,现在算是勉强能见人了。源文件和 Release 版本的二进制文件都已经上传到 Google Code 上了。

下载源文件 (AutoJewel-0.1.0-src.zip)
下载程序 (AutoJewel-0.1.0-bin.zip)



使用方法:同时运行 Bejeweled 和 AutoJewel,在 AutoJewel 上选择正确的参数后,到 Bejeweled 里进入相应的游戏模式,然后按默认的全局热键 Ctrl + F8 使 AutoJewel 运行。

在这里要说一下,这个程序现在没有任何智能,只是根据模板进行匹配,然后选择一个消灭宝石最多的匹配方法去操作。而匹配方法是我自己逐一列出的。

我自己玩这个游戏的水平很差,因而这个程序和我比较的话,只是眼疾手快,智能上实际比我还要差一些。所以以下几个演示视频中的最终得分还比不上很多人类玩家就再正常不过了。

我在第一次提到这个程序时就说过,这个程序主要是冲着 Bejeweled 的视觉效果去的,而不是为了刷分。冲着视觉效果去,主要目标自然是闪电模式,其他模式只是顺便能玩玩而已。像对待冰风暴模式的方法其实和闪电模式完全一样。而经典模式则只是降低了操作速度,同时给予接近顶部的匹配更高的优先级罢了。

闪电模式 (最高乘数为 9, 最终得分 419 万)



冰风暴模式 (最高乘数为 8, 最终得分 151 万)



经典模式 (达到第 13 级, 最终得分 74 万)



平衡模式 (纯搞笑)

当前语言: 中文 (简体) · also available in: English
解决 Windows XP/2003 下显示器不能按照电源设置自动关闭的问题
下载源文件 (SystemParamsMonitor.zip)

这是一个困扰了我大半年的问题。最近一次偶然的机会,终于用排除法试出来罪魁祸首果真是 Adobe Flash Player 插件了。随后通过搜索“NPSWF32.dll”找到了牛人 prekageo 的一篇文章:Windows XP: My monitor does not turn off for power saving

文章中对问题分析得很透彻。我运气应该也还算好的,找到了这么一篇文章,而且等我找到原因时,那个 Bug FP-5216 也早已在 7 月 14 日被开发人员关闭了。我没看日期就先换了最新的稳定版本 10.3.181.34,结果一测试发现问题没有解决。



后来看 Release Notes 才知道这个版本还是 7 月 1 日发布的,可能还没修正这个 bug。这时又看了一眼 11 beta,最新版本的日期是 7 月 13 日的 11.0.1.60,比那个 bug 关闭的日期早 1 天。不过换上之后用程序测系统参数没异常了,屏幕也能正常自动关闭。看来这个 beta 版本已经修正了这个 bug 了。
当前语言: 中文 (简体) · also available in: English
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,则表明该模板可应用于该分块。最终对所有可行的移动方法按优先级进行排序后,就能确定如何进行操作了。
当前语言: 中文 (简体)
更多条目: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] ... [22]
« 上一页 · 下一页 »