发表回复 
屏幕抓字生成字库工具与找字函数 v5.6
2016-08-30, 16 : 12
RE: 快捷抓取、查找屏幕文字/图像字符串 v5.3
我也是,xp试了一下, 报错了: ==> Call to nonexistent function. ( StrReplace )
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-08-31, 09 : 34
RE: 快捷抓取、查找屏幕文字/图像字符串 v5.3
升级到最新版就行了。

OutputVar := StrReplace(Haystack, SearchText [, ReplaceText, OutputVarCount, Limit := -1]) ; v1.1.21+
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-09-14, 09 : 11
RE: 快捷抓取、查找屏幕文字/图像字符串 v5.3
(2016-06-08 01 : 53)feiyue 提到:  如果不编写自动操作脚本,则基本上不需要使用它。比如AHK内置命令ImageSearch我也基本没用过。

如果要编写自动操作脚本,则下面几个场景可以用得上:(有些可以用颜色检测代替但可靠性低些)
1、登录时碰到简单的数字或字母验证码,要人工填写才能下一步,这时可以用它。——自动过验证码
2、要读取某个位置的数字是多少,可以用它。还可用于自动记牌的识别。——识别数字等
3、网页自动化时,点击了链接后要等待网页出现某个文字再进行下一步,可以用它。——等待状态出现
4、网页中用相对窗口坐标也不能确保位置绝对正确,可以搜索一个独特的单色文字作为原点,
返回原点坐标(X,Y)后,其他位置可以用相对原点的坐标,即用(X+10,Y+20)形式来定位。
这种方法可以在换了电脑(分辨率一致),或在许多天后在再用时有普适性。——基于文字原点的坐标系
5、要根据网页特定位置显示的是什么文字来决定下一步操作,可以用它。——定点条件判断
6、点击、选择、粘贴等操作后为了确保正确,可以定点查找结果文字。——定点可靠性验证
7、要搜索屏幕区域指定文字在哪儿,找到后点击或其他操作。——搜索文字动态位置
8、需要挂机看某个视频又想前台做其他的事,要在后台播放完毕时提醒,可以用它。——检测后台程序状态


我是个新手,想用第7种,但不知引用函数时各参数应该怎样填,能指导一下吗,谢谢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢gzafei
2016-11-10, 09 : 40
RE: 快捷抓取、查找屏幕文字/图像字符串 v5.3
感谢feiyue大侠,非常好用,在不同电脑上,不同分辨率,或者同一页面有些字体缩放上面,不知道feiyue大侠能不能用某种模糊识别的方式解决呢?
因为我也是菜鸟哈,我感觉是不是等比缩放的什么公式呢。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-01-20, 21 : 26
RE: 快捷抓取、查找屏幕文字/图像字符串 v5.3
太好用了!三年前看到这个帖子,就好了!谢谢feiyue大侠的工作!用来抓识别文字特别好用
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-11, 06 : 58
Rainbow RE: 快捷抓取、查找屏幕文字/图像字库 v5.5
为了方便实际应用到自动化脚本的编写中,我把脚本改进了一下,
采用了单行的字库形式代替原来的形象化“0_”字符串,希望大家喜欢。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-14, 19 : 28
RE: 快捷抓取、查找屏幕文字/图像字库 v5.5
泛用性質還挺高的!!實用
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-18, 00 : 01 (这个帖子最后修改于: 2017-02-18 16 : 03 by feiyue.)
Tongue RE: 屏幕抓字生成字库工具与找字函数 v5.6
更新到v5.6版,为颜色模式添加了偏色设置。因为按键精灵、大漠等用于游戏的找字
基本都提供偏色参数。因为游戏中的文字常常背景透明的缘故,文字颜色中的三个分量
红(RR)、绿(GG)、蓝(BB)都会在一定范围内变动,偏色就是为了设置各个分量
的允许变动值。另外如果设置背景 _字符 的容错为1(100%),就可实现背景透明了。

我又试图采用常规的设置范围方式,比如方式一:左上角X、Y加范围的宽W、高H;
方式二:左上角X、Y加右下角X、Y。可惜我用惯了中心点X、Y加左右偏移W、上下偏移H
的方式,对前两种都觉得不太方便,因为中心坐标对于写代码时设定文字原点很方便。

查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-21, 22 : 07
RE: 屏幕抓字生成字库工具与找字函数 v5.6
学习中,非常感谢楼主。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-23, 18 : 24 (这个帖子最后修改于: 2017-02-23 22 : 56 by 火冷.)
RE: 屏幕抓字生成字库工具与找字函数 v5.6
@feiyue 截图后的Gui,按钮好多,对于新手,能否做个大致的介绍呢?
颜色、偏色、灰度、灰差,什么时候用哪个?阀值怎么选,修改的框什么用?
还有win7的彩色字怎么处理比较好?
我现在的做法就是选则背影色,然后点“颜色二值化"→智删→确定。
还有请问下如何判断有多个结果呢?
这么多人留言却都使用正常,感觉我实在太low了...

再补充下生成的代码的疑问:
文字变量的第一行怎么老是空?应试是从字库识别到文字吧?
感觉我的强迫症又犯了,问题有点多,绝无冒犯之意哈!

感谢分享这么好用的脚本给大伙!!谢谢~~~
我的脚本可以不用放查找的图片了
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-24, 04 : 06
RE: 屏幕抓字生成字库工具与找字函数 v5.6
@火冷 我在脚本的说明中添加了详细的操作流程及界面介绍,应该对新人有帮助。

另外对于要搜索的文字或图像有多处都有的情况,首先建议另外选择唯一的文字或
图像,其次可以缩小查找范围,默认的是全屏查找,可以把宽高调整为150或更小。

查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢feiyue
2017-02-25, 16 : 01
RE: 屏幕抓字生成字库工具与找字函数 v5.6
Run, D:\图文处理\MyNotesKeeper3.8\MyNotesKeeper.exe

WinWait, My Notes Keeper
if ErrorLevel
{
return
}
else
{
Sleep , 500
}

文字.="|<>14.AkX8Cq3AMfiDzXQ0jk/z2EUs"
if 查找文字(771,53,150000,150000,文字,"*106",X,Y,OCR,0,0)
{
CoordMode, Mouse
MouseMove, X, Y
Click left 1
}
Sleep , 1000


文字1.="|<>20.b07Dw0nz0A81zr1zzzUAw03C00nM0AX038" ;===为什么放到一起找第二个目标时没有动静,分着是正常的呢?
if 查找文字(905,388,150000,150000,文字1,"*164",X_1,Y_1,OCR,0,0)
{
CoordMode, Mouse
MouseMove, X_1, Y_1
Click left 1
}
else
{
MsgBox , I am here.
}







;---- 将后面的函数附加到自己的脚本中 ----
;-----------------------------------------
; 查找屏幕文字/图像字库及OCR识别
; 注意:参数中的x、y为中心点坐标,w、h为左右上下偏移
; cha1、cha0分别为0、_字符的容许减少百分比
;-----------------------------------------
查找文字(x,y,w,h,wz,c,ByRef rx="",ByRef ry="",ByRef ocr=""
, cha1=0, cha0=0)
{
xywh2xywh(x-w,y-h,2*w+1,2*h+1,x,y,w,h)
if (w<1 or h<1)
return, 0
bch:=A_BatchLines
SetBatchLines, -1
;--------------------------------------
GetBitsFromScreen(x,y,w,h,Scan0,Stride,bits)
;--------------------------------------
; 设定图内查找范围,注意不要越界
sx:=0, sy:=0, sw:=w, sh:=h
if PicOCR(Scan0,Stride,sx,sy,sw,sh,wz,c
,rx,ry,ocr,cha1,cha0)
{
rx+=x, ry+=y
SetBatchLines, %bch%
return, 1
}
; 容差为0的若失败则使用 5% 的容差再找一次
if (cha1=0 and cha0=0)
and PicOCR(Scan0,Stride,sx,sy,sw,sh,wz,c
,rx,ry,ocr,0.05,0.05)
{
rx+=x, ry+=y
SetBatchLines, %bch%
return, 1
}
SetBatchLines, %bch%
return, 0
}

;-- 规范输入范围在屏幕范围内
xywh2xywh(x1,y1,w1,h1,ByRef x,ByRef y,ByRef w,ByRef h)
{
; 获取包含所有显示器的虚拟屏幕范围
SysGet, zx, 76
SysGet, zy, 77
SysGet, zw, 78
SysGet, zh, 79
left:=x1, Right:=x1+w1-1, up:=y1, down:=y1+h1-1
left:=left<zx ? zx:left, Right:=Right>zx+zw-1 ? zx+zw-1:Right
up:=up<zy ? zy:up, down:=down>zy+zh-1 ? zy+zh-1:down
x:=left, y:=up, w:=Right-left+1, h:=down-up+1
}

;-- 获取屏幕图像的内存数据,图像包括透明窗口
GetBitsFromScreen(x,y,w,h,ByRef Scan0,ByRef Stride,ByRef bits)
{
VarSetCapacity(bits, w*h*4, 0)
Ptr:=A_PtrSize ? "Ptr" : "UInt"
; 桌面窗口对应包含所有显示器的虚拟屏幕
win:=DllCall("GetDesktopWindow", Ptr)
hDC:=DllCall("GetWindowDC", Ptr,win, Ptr)
mDC:=DllCall("CreateCompatibleDC", Ptr,hDC, Ptr)
hBM:=DllCall("CreateCompatibleBitmap", Ptr,hDC
, "int",w, "int",h, Ptr)
oBM:=DllCall("SelectObject", Ptr,mDC, Ptr,hBM, Ptr)
DllCall("BitBlt", Ptr,mDC, "int",0, "int",0, "int",w, "int",h
, Ptr,hDC, "int",x, "int",y, "uint",0x00CC0020|0x40000000)
;--------------------------
VarSetCapacity(bi, 40, 0)
NumPut(40, bi, 0, "int"), NumPut(w, bi, 4, "int")
NumPut(-h, bi, 8, "int"), NumPut(1, bi, 12, "short")
NumPut(bpp:=32, bi, 14, "short"), NumPut(0, bi, 16, "int")
;--------------------------
DllCall("GetDIBits", Ptr,mDC, Ptr,hBM
, "int",0, "int",h, Ptr,&bits, Ptr,&bi, "int",0)
DllCall("SelectObject", Ptr,mDC, Ptr,oBM)
DllCall("DeleteObject", Ptr,hBM)
DllCall("DeleteDC", Ptr,mDC)
DllCall("ReleaseDC", Ptr,win, Ptr,hDC)
Scan0:=&bits, Stride:=((w*bpp+31)//32)*4
}

;-----------------------------------------
; 图像内查找文字/图像字符串及OCR函数
;-----------------------------------------
PicOCR(Scan0, Stride, sx, sy, sw, sh, wenzi, c
, ByRef rx, ByRef ry, ByRef ocr, cha1, cha0)
{
static MyFunc
if !MyFunc
{
x32:="5589E55383EC608B45200FAF45188B551CC1E20201D0894"
. "5F08B5524B80000000029D0C1E00289C28B451801D08945ECC"
. "745E800000000C745D400000000C745D0000000008B4524894"
. "5CC8B45288945C8C745C400000000837D08000F85B20000008"
. "B450CC1E81025FF0000008945C08B450CC1E80825FF0000008"
. "945BC8B450C25FF0000008945B8C745F400000000EB75C745F"
. "800000000EB5A8B45F083C00289C28B451401D00FB6000FB6C"
. "03B45C075368B45F083C00189C28B451401D00FB6000FB6C03"
. "B45BC751E8B55F08B451401D00FB6000FB6C03B45B8750B8B5"
. "5E88B453001D0C600318345F8018345F0048345E8018B45F83"
. "B45247C9E8345F4018B45EC0145F08B45F43B45287C83E9170"
. "20000837D08010F85A30000008B450C83C001C1E00789450CC"
. "745F400000000EB7DC745F800000000EB628B45F083C00289C"
. "28B451401D00FB6000FB6C06BD0268B45F083C00189C18B451"
. "401C80FB6000FB6C06BC04B8D0C028B55F08B451401D00FB60"
. "00FB6D089D0C1E00429D001C83B450C730B8B55E88B453001D"
. "0C600318345F8018345F0048345E8018B45F83B45247C96834"
. "5F4018B45EC0145F08B45F43B45280F8C77FFFFFFE96A01000"
. "0C745F400000000EB7BC745F800000000EB608B55E88B452C8"
. "D0C028B45F083C00289C28B451401D00FB6000FB6C06BD0268"
. "B45F083C00189C38B451401D80FB6000FB6C06BC04B8D1C028"
. "B55F08B451401D00FB6000FB6D089D0C1E00429D001D8C1F80"
. "788018345F8018345F0048345E8018B45F83B45247C988345F"
. "4018B45EC0145F08B45F43B45280F8C79FFFFFF8B452483E80"
. "18945B48B452883E8018945B0C745F401000000E9B0000000C"
. "745F801000000E9940000008B45F40FAF452489C28B45F801D"
. "08945E88B55E88B452C01D00FB6000FB6D08B450C01D08945E"
. "C8B45E88D50FF8B452C01D00FB6000FB6C03B45EC7F488B45E"
. "88D50018B452C01D00FB6000FB6C03B45EC7F328B45E82B452"
. "489C28B452C01D00FB6000FB6C03B45EC7F1A8B55E88B45240"
. "1D089C28B452C01D00FB6000FB6C03B45EC7E0B8B55E88B453"
. "001D0C600318345F8018B45F83B45B40F8C60FFFFFF8345F40"
. "18B45F43B45B00F8C44FFFFFFC745E800000000E9E30000008"
. "B45E88D1485000000008B454001D08B008945E08B45E08945E"
. "48B45E48945F08B45E883C0018D1485000000008B454001D08"
. "B008945B48B45E883C0028D1485000000008B454001D08B008"
. "945B0C745F400000000EB7CC745F800000000EB678B45F08D5"
. "0018955F089C28B453401D00FB6003C3175278B45E48D50018"
. "955E48D1485000000008B453801C28B45F40FAF452489C18B4"
. "5F801C88902EB258B45E08D50018955E08D1485000000008B4"
. "53C01C28B45F40FAF452489C18B45F801C889028345F8018B4"
. "5F83B45B47C918345F4018B45F43B45B00F8C78FFFFFF8345E"
. "8078B45E83B45440F8C11FFFFFF8B45D00FAF452489C28B45D"
. "401D08945F08B45240FAF45C8BA0100000029C289D08945E4C"
. "745F800000000E9B5020000C745F400000000E993020000C74"
. "5E800000000E9710200008B45E883C0018D1485000000008B4"
. "54001D08B008945B48B45E883C0028D1485000000008B45400"
. "1D08B008945B08B55F88B45B401D03B45CC0F8F2D0200008B5"
. "5F48B45B001D03B45C80F8F1C0200008B45E88D14850000000"
. "08B454001D08B008945E08B45E883C0038D1485000000008B4"
. "54001D08B008945AC8B45E883C0048D1485000000008B45400"
. "1D08B008945A88B45E883C0058D1485000000008B454001D08"
. "B008945DC8B45E883C0068D1485000000008B454001D08B008"
. "945D88B45AC3945A80F4D45A88945A4C745EC00000000E9820"
. "000008B45EC3B45AC7D378B55E08B45EC01D08D14850000000"
. "08B453801D08B108B45F001D089C28B453001D00FB6003C317"
. "40E836DDC01837DDC000F884E0100008B45EC3B45A87D378B5"
. "5E08B45EC01D08D1485000000008B453C01D08B108B45F001D"
. "089C28B453001D00FB6003C30740E836DD801837DD8000F881"
. "20100008345EC018B45EC3B45A40F8C72FFFFFF837DC4000F8"
. "5840000008B551C8B45F801C28B454889108B454883C0048B4"
. "D208B55F401CA89108B45488D50088B45B489028B45488D500"
. "C8B45B08902C745C4040000008B45F42B45B08945D08B55B08"
. "9D001C001D08945C88B55B089D0C1E00201D001C083C064894"
. "5CC837DD0007907C745D0000000008B45282B45D03B45C87D2"
. "E8B45282B45D08945C8EB238B45F83B45107E1B8B45C48D500"
. "18955C48D1485000000008B454801D0C700FFFFFFFF8B45C48"
. "D50018955C48D1485000000008B454801D08B55E883C207891"
. "0817DC4FD0300007F788B55F88B45B401D00145D48B45242B4"
. "5D43B45CC0F8D60FDFFFF8B45242B45D48945CCE952FDFFFF9"
. "0EB0490EB01908345E8078B45E83B45440F8C83FDFFFF8345F"
. "4018B45240145F08B45F43B45C80F8C61FDFFFF8345F8018B4"
. "5E40145F08B45F83B45CC0F8C3FFDFFFF837DC4007508B8000"
. "00000EB1B908B45C48D1485000000008B454801D0C70000000"
. "000B80100000083C4605B5DC2440090"
x64:="554889E54883EC60894D10895518448945204C894D288B4"
. "5400FAF45308B5538C1E20201D08945F48B5548B8000000002"
. "9D0C1E00289C28B453001D08945F0C745EC00000000C745D80"
. "0000000C745D4000000008B45488945D08B45508945CCC745C"
. "800000000837D10000F85C90000008B4518C1E81025FF00000"
. "08945C48B4518C1E80825FF0000008945C08B451825FF00000"
. "08945BCC745F800000000E985000000C745FC00000000EB6A8"
. "B45F483C0024863D0488B45284801D00FB6000FB6C03B45C47"
. "5438B45F483C0014863D0488B45284801D00FB6000FB6C03B4"
. "5C075288B45F44863D0488B45284801D00FB6000FB6C03B45B"
. "C75108B45EC4863D0488B45604801D0C600318345FC018345F"
. "4048345EC018B45FC3B45487C8E8345F8018B45F00145F48B4"
. "5F83B45500F8C6FFFFFFFE959020000837D10010F85B600000"
. "08B451883C001C1E007894518C745F800000000E98D000000C"
. "745FC00000000EB728B45F483C0024863D0488B45284801D00"
. "FB6000FB6C06BD0268B45F483C0014863C8488B45284801C80"
. "FB6000FB6C06BC04B8D0C028B45F44863D0488B45284801D00"
. "FB6000FB6D089D0C1E00429D001C83B451873108B45EC4863D"
. "0488B45604801D0C600318345FC018345F4048345EC018B45F"
. "C3B45487C868345F8018B45F00145F48B45F83B45500F8C67F"
. "FFFFFE999010000C745F800000000E98D000000C745FC00000"
. "000EB728B45EC4863D0488B4558488D0C028B45F483C002486"
. "3D0488B45284801D00FB6000FB6C06BD0268B45F483C0014C6"
. "3C0488B45284C01C00FB6000FB6C06BC04B448D04028B45F44"
. "863D0488B45284801D00FB6000FB6D089D0C1E00429D04401C"
. "0C1F80788018345FC018345F4048345EC018B45FC3B45487C8"
. "68345F8018B45F00145F48B45F83B45500F8C67FFFFFF8B454"
. "883E8018945B88B455083E8018945B4C745F801000000E9CA0"
. "00000C745FC01000000E9AE0000008B45F80FAF454889C28B4"
. "5FC01D08945EC8B45EC4863D0488B45584801D00FB6000FB6D"
. "08B451801D08945F08B45EC4898488D50FF488B45584801D00"
. "FB6000FB6C03B45F07F538B45EC4898488D5001488B4558480"
. "1D00FB6000FB6C03B45F07F388B45EC2B45484863D0488B455"
. "84801D00FB6000FB6C03B45F07F1D8B55EC8B454801D04863D"
. "0488B45584801D00FB6000FB6C03B45F07E108B45EC4863D04"
. "88B45604801D0C600318345FC018B45FC3B45B80F8C46FFFFF"
. "F8345F8018B45F83B45B40F8C2AFFFFFFC745EC00000000E90"
. "D0100008B45EC4898488D148500000000488B8580000000480"
. "1D08B008945E48B45E48945E88B45E88945F48B45EC4898488"
. "3C001488D148500000000488B85800000004801D08B008945B"
. "88B45EC48984883C002488D148500000000488B85800000004"
. "801D08B008945B4C745F800000000E989000000C745FC00000"
. "000EB748B45F48D50018955F44863D0488B45684801D00FB60"
. "03C31752C8B45E88D50018955E84898488D148500000000488"
. "B45704801C28B45F80FAF454889C18B45FC01C88902EB2A8B4"
. "5E48D50018955E44898488D148500000000488B45784801C28"
. "B45F80FAF454889C18B45FC01C889028345FC018B45FC3B45B"
. "87C848345F8018B45F83B45B40F8C6BFFFFFF8345EC078B45E"
. "C3B85880000000F8CE4FEFFFF8B45D40FAF454889C28B45D80"
. "1D08945F48B45480FAF45CCBA0100000029C289D08945E8C74"
. "5FC00000000E929030000C745F800000000E907030000C745E"
. "C00000000E9E20200008B45EC48984883C001488D148500000"
. "000488B85800000004801D08B008945B88B45EC48984883C00"
. "2488D148500000000488B85800000004801D08B008945B48B5"
. "5FC8B45B801D03B45D00F8F8C0200008B55F88B45B401D03B4"
. "5CC0F8F7B0200008B45EC4898488D148500000000488B85800"
. "000004801D08B008945E48B45EC48984883C003488D1485000"
. "00000488B85800000004801D08B008945B08B45EC48984883C"
. "004488D148500000000488B85800000004801D08B008945AC8"
. "B45EC48984883C005488D148500000000488B8580000000480"
. "1D08B008945E08B45EC48984883C006488D148500000000488"
. "B85800000004801D08B008945DC8B45B03945AC0F4D45AC894"
. "5A8C745F000000000E9920000008B45F03B45B07D3F8B55E48"
. "B45F001D04898488D148500000000488B45704801D08B108B4"
. "5F401D04863D0488B45604801D00FB6003C31740E836DE0018"
. "37DE0000F88790100008B45F03B45AC7D3F8B55E48B45F001D"
. "04898488D148500000000488B45784801D08B108B45F401D04"
. "863D0488B45604801D00FB6003C30740E836DDC01837DDC000"
. "F88350100008345F0018B45F03B45A80F8C62FFFFFF837DC80"
. "00F85970000008B55388B45FC01C2488B85900000008910488"
. "B85900000004883C0048B4D408B55F801CA8910488B8590000"
. "000488D50088B45B88902488B8590000000488D500C8B45B48"
. "902C745C8040000008B45F82B45B48945D48B55B489D001C00"
. "1D08945CC8B55B489D0C1E00201D001C083C0648945D0837DD"
. "4007907C745D4000000008B45502B45D43B45CC7D368B45502"
. "B45D48945CCEB2B8B45FC3B45207E238B45C88D50018955C84"
. "898488D148500000000488B85900000004801D0C700FFFFFFF"
. "F8B45C88D50018955C84898488D148500000000488B8590000"
. "0004801D08B55EC83C2078910817DC8FD0300007F7B8B55FC8"
. "B45B801D00145D88B45482B45D83B45D00F8DEFFCFFFF8B454"
. "82B45D88945D0E9E1FCFFFF90EB0490EB01908345EC078B45E"
. "C3B85880000000F8C0FFDFFFF8345F8018B45480145F48B45F"
. "83B45CC0F8CEDFCFFFF8345FC018B45E80145F48B45FC3B45D"
. "00F8CCBFCFFFF837DC8007508B800000000EB23908B45C8489"
. "8488D148500000000488B85900000004801D0C70000000000B"
. "8010000004883C4605DC390909090909090909090"
MCode(MyFunc, A_PtrSize=8 ? x64:x32)
}
;--------------------------------------
; 统计字库文字的个数和宽高,将解释文字存入数组并删除<>
;--------------------------------------
wenzitab:=[], num:=0, wz:="", j:=""
loop, Parse, wenzi, |
{
v:=A_LoopField, txt:="", e1:=cha1, e0:=cha0
; 用角括号输入每个字库字符串的识别结果文字
if RegExMatch(v,"<([^>]*)>",r)
v:=StrReplace(v,r), txt:=r1
; 可以用中括号输入每个文字的两个容差,以逗号分隔
if RegExMatch(v,"\[([^\]]*)]",r)
{
v:=StrReplace(v,r), r2:=""
StringSplit, r, r1, `,
e1:=r1, e0:=r2
}
; 记录每个文字的起始位置、宽、高、10字符的数量和容差
StringSplit, r, v, .
w:=r1, v:=base64tobit(r2), h:=StrLen(v)//w
if (r0<2 or w>sw or h>sh or StrLen(v)!=w*h)
continue
if InStr(c,"-")
{
r:=e1, e1:=e0, e0:=r, v:=StrReplace(v,"1","_")
v:=StrReplace(StrReplace(v,"0","1"),"_","0")
}
len1:=StrLen(StrReplace(v,"0"))
len0:=StrLen(StrReplace(v,"1"))
e1:=Round(len1*e1), e0:=Round(len0*e0)
j.=StrLen(wz) "|" w "|" h
. "|" len1 "|" len0 "|" e1 "|" e0 "|"
wz.=v, wenzitab[++num]:=Trim(txt)
}
IfEqual, wz,, return, 0
;--------------------------------------
; wz 使用Astr参数类型可以自动转为ANSI版字符串
; in 输入各文字的起始位置等信息,out 返回结果
; ss 等为临时内存,jiange 超过间隔就会加入*号
;--------------------------------------
mode:=InStr(c,"**") ? 2 : InStr(c,"*") ? 1 : 0
c:=RegExReplace(c,"[*\-]"), jiange:=5, num*=7
VarSetCapacity(in,num*4,0), i:=-4
loop, Parse, j, |
if (A_Index<=num)
NumPut(A_LoopField, in, i+=4, "int")
VarSetCapacity(gs, sw*sh)
VarSetCapacity(ss, sw*sh, Asc("0"))
k:=StrLen(wz)*4
VarSetCapacity(s1, k, 0), VarSetCapacity(s0, k, 0)
VarSetCapacity(out, 1024*4, 0)
if DllCall(&MyFunc, "int",mode, "uint",c
, "int",jiange, "ptr",Scan0, "int",Stride
, "int",sx, "int",sy, "int",sw, "int",sh
, "ptr",&gs, "ptr",&ss
, "Astr",wz, "ptr",&s1, "ptr",&s0
, "ptr",&in, "int",num, "ptr",&out)
{
ocr:="", i:=-4 ; 返回第一个文字的中心位置
x:=NumGet(out,i+=4,"int"), y:=NumGet(out,i+=4,"int")
w:=NumGet(out,i+=4,"int"), h:=NumGet(out,i+=4,"int")
rx:=x+w//2, ry:=y+h//2
while (k:=NumGet(out,i+=4,"int"))
v:=wenzitab[k//7], ocr.=v="" ? "*" : v
return, 1
}
return, 0
}

MCode(ByRef code, hex)
{
ListLines, Off
bch:=A_BatchLines
SetBatchLines, -1
VarSetCapacity(code, StrLen(hex)//2)
loop, % StrLen(hex)//2
NumPut("0x" . SubStr(hex,2*A_Index-1,2)
, code, A_Index-1, "char")
Ptr:=A_PtrSize ? "Ptr" : "UInt"
DllCall("VirtualProtect", Ptr,&code, Ptr
,VarSetCapacity(code), "uint",0x40, Ptr . "*",0)
SetBatchLines, %bch%
ListLines, On
}

base64tobit(s) {
ListLines, Off
s:=RegExReplace(s,"\s+")
Chars:="0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ"
. "abcdefghijklmnopqrstuvwxyz"
SetFormat, IntegerFast, d
StringCaseSense, On
loop, Parse, Chars
{
i:=A_Index-1, v:=(i>>5&1) . (i>>4&1)
. (i>>3&1) . (i>>2&1) . (i>>1&1) . (i&1)
s:=StrReplace(s,A_LoopField,v)
}
StringCaseSense, Off
s:=SubStr(s,1,InStr(s,"1",0,0)-1)
ListLines, On
return, s
}

bit2base64(s) {
ListLines, Off
s:=RegExReplace(s,"\s+")
s.=SubStr("100000",1,6-Mod(StrLen(s),6))
s:=RegExReplace(s,".{6}","|$0")
Chars:="0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ"
. "abcdefghijklmnopqrstuvwxyz"
SetFormat, IntegerFast, d
loop, Parse, Chars
{
i:=A_Index-1, v:="|" . (i>>5&1) . (i>>4&1)
. (i>>3&1) . (i>>2&1) . (i>>1&1) . (i&1)
s:=StrReplace(s,v,A_LoopField)
}
ListLines, On
return, s
}

梦幻软件天堂
人生R棋随1出招借力打力多而合1扬C避D奇L断金
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-02-26, 04 : 23 (这个帖子最后修改于: 2017-02-26 05 : 30 by feiyue.)
RE: 屏幕抓字生成字库工具与找字函数 v5.6

使用前先把函数的说明看一看,理解了每个参数的意思之后再用。
把 “文字.=” 改为 “文字:=” ,150000 改为 150 即可。
左右上下都偏移150000,肯定是全屏查找,但是你自己用时,
最好限定左右上下偏移150即可(300*300范围)。

查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-03-01, 18 : 58
RE: 屏幕抓字生成字库工具与找字函数 v5.6
感觉楼主好厉害!先收藏,日后琢磨琢磨用处,谢谢!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-03-01, 21 : 40
RE: 屏幕抓字生成字库工具与找字函数 v5.6
程序很好用,大神好厉害。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-03-03, 15 : 57
RE: 屏幕抓字生成字库工具与找字函数 v5.6
登录时碰到简单的数字或字母验证码,要人工填写才能下一步,这时可以用它。——自动过验证码
以前用过纯数字的验证码,用的楼主的代码,效果不错,非常感谢。
1.现在想请教,字典库的生成能不能在自动化一些。我先获取验证码图片到本地,并储存为文件,用人工识别后文字作为文件名,获取一批后,用你的代码设置一个标准,后面自动​完成字库的建立,是否可行?
2.验证码图片中,相同位置的相同数字相似度极高,但不同位置的相同数字相似度倒是不高。在取样本时,每个位置的数字的样本分开管理,这样是否在字库的建立上会提升效率?​
3.验证码去掉外围的空白后,自动分割,能否多个选项,手动分割?或者等距离分割?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-03-03, 21 : 15
RE: 屏幕抓字生成字库工具与找字函数 v5.6
to76楼,你为何不读取文件呢?识别文件不是一样吗?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-03-03, 22 : 17 (这个帖子最后修改于: 2017-03-03 23 : 00 by feiyue.)
RE: 屏幕抓字生成字库工具与找字函数 v5.6

目前这个对验证码的识别没有缩放功能,所以只是针对简单的验证码,玩玩而已。
但它可以识别粘连、错位重叠、带干扰点、带干扰线的验证码(适当调整容差)。
由于不能缩放识别,因此对于验证码文字的各种大小字体、倾斜字体都要分别
生成字库,而且对于干扰点、干扰线要手动修改清除杂点来生成干净标准的字库。
因此对于多字符、多变形的验证码还是算了吧,手动生成字库太麻烦了。

你想先获取验证码图片到本地,再人工识别后一一重命名,像神经网络的训练数据
一样,显然是针对多字符、多变形的,不建议用这个识别。当然你可以自己写个
脚本完成自动将图片二值化、去噪、分割生成字库。我再研究这个就是写论文了。

【字库分割添加】会去掉外围的空白,也可以手动分割,利用【字库整体添加】即可。
另外,验证码的抓字框太窄可以修改代码中的“hh:=12”为“hh:=24”,应该就够了。

查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-05-06, 21 : 55
RE: 屏幕抓字生成字库工具与找字函数 v5.6
旋转的文字怎么处理?比如识别一下现实中的书本上的一行字。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-05-07, 04 : 01
RE: 屏幕抓字生成字库工具与找字函数 v5.6
@southriver 这个我也不懂,我不是程序员,只是业余对AHK感兴趣。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合