|
2#
楼主 |
发表于 2010-12-5 21:01:48
|
只看该作者
SilkTest天龙八部系列2-OCR
SilkTest提供了基本的OCR功能,其中OCR 代表Optical Character Recognition光学字符识别,它允许SilkTest从屏幕区域或者图片上获取文字内容。注意:这和silktest从对象上取得caption 或者text是两回事(通过windows消息调用),OCR是根据像素的分布用一定的pattern来识别文字的。
Silktest的OCR函数定义在安装目录里的OCR.inc中,它主要提供了两个函数:OcrGetTextFromWnd(),OcrGetTextFromBmp().它们分别提供了从屏幕对象上和bmp文件中识别文字的功能。
帮助文件中对他们的描述如下:
OCR.inc includes the following 4Test functions for OCR:
• function: iRet = OcrGetTextFromBmp (sOcrText, sBitmapFile)
• returns: iRet: Result length. If conversion fails, then an E_OCR exception will be raised. INTEGER.
• parameter: sOcrText: The result of converting the bitmap to text. NULL if conversion failed. OUT. STRING.
• parameter: sBitmapFile: The bitmap (.bmp) file to convert. STRING.
• notes: Convert a bitmap file into text. The conversion uses the preconfigured pattern file, which is in the textract.ini file (Database Path setting).
• function: iRet = OcrGetTextFromWnd (sText, wWindow[, rCapture])
• returns: iRet: Result length. If conversion fails, then an E_OCR exception will be raised. INTEGER.
• parameter: sText: The result of converting a bitmap of the window to text. NULL if conversion failed. OUT. STRING.
• parameter: wWindow: The window that will be the source of the bitmap to be converted to text. WINDOW.
• parameter: rCapture: The capture region. OPTIONAL. RECT.
• notes: Convert a bitmap of a window (or area within a window) into text. The conversion uses the preconfigured pattern file, which is specified in the textract.ini file (Database Path setting).
SilkTest默认使用的textract来实现文本的识别,它的设置可以在textract.ini配置文件中找到,其中的配置行Database Path=C:\Program Files\Borland\SilkTest\SgOcrPattern.pat定义了使用sgOcrPattern.pat这个pattern库来进 行识别工作。
下面我们做一个简单的例子,你需要首先打开一个记事本(notepad),输入1行文本:Here is an example for OCR test 然后运行下面的script:
1. [-] testcase OCR()
2. [ ] int iRet // return value
3. [ ] string sText // text
4. [ ] string sBmp = "c:\screenshot.bmp"
5. [ ] MainWin("New Text Document (2).txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").SetActive()
6. [ ] iRet = OcrGetTextFromWnd (sText, MainWin("New Text Document (2).txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").TextField("#1|$15"))
7. [ ] print(iRet)
8. [ ] print(sText)
9. [ ] MainWin("SH.txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").TextField("#1|$15").CaptureBitmap(sBmp)
10. [ ] iRet = OcrGetTextFromBmp (sText, sBmp)
11. [ ] print(iRet)
12. [ ] print(sText)
它的目的是从记事本的TextField上用 OcrGetTextFromWnd() 直接识别文本内容,然后再抓屏在c盘上生成一个bmp文件,然后用 OcrGetTextFromBmp() 从该bmp文件识别文本内容。 在我机器上得到的结果是:
1. [ ] 37
2. [ ] H r is an xam I for OCR t st
3. [ ] 37
4. [ ] H r is an xam I for OCR t st
这说明用 OcrGetTextFromWnd() 和OcrGetTextFromBmp()得到的结果基本一致,但是都不太理想,因为有一些字符都没有识别出来。如果你把记事本中的文本内容改成大写: HERE IS AN EXAMPLE FOR OCR TEST 结果就好得多了。
1. [ ] 32
2. [ ] HERE IS AN EXAMP E FOR OCR TEST
3. [ ] 32
4. [ ] HERE IS AN EXAMP E FOR OCR TEST
可见SilkTest自带的OCR识别库并不能很好的应对各种情况,所以在实际的项目中,你可能需要使用其他第三方或者开发自己的pattern库,这对自动化测试工程师来说是一个挑战。
作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处 |
|