AHK很方便的离线OCR脚本分享,拖拽鼠标截屏,识别文字到编辑框

119 阅读1分钟

OCR 截屏工具,quicker有,但需要联网。实际上 AHK 早就支持离线文字识别。调用的是 Capture2Text。

ahk 通过 run 指令 调用过 Capture2Text , 传入坐标参数,后者识别屏幕后,将结果文本复制到剪贴板。于是 ahk 就可以显示一个对话框,里面一个编辑框,编辑识别的文本。

识别率感人,但用来识别简单的英文数字,还是很方便的。或者可以更换识别引擎。

; creates a click-and-drag selection box to specify an area
getSelectionCoords(ByRef x_start, ByRef x_end, ByRef y_start, ByRef y_end) {
	;Mask Screen
	Gui, Color, FFFFFF
	Gui +LastFound
	WinSet, Transparent, 75
	Gui, -Caption 
	Gui, +AlwaysOnTop
	Gui, Show, x0 y0 h%A_ScreenHeight% w%A_ScreenWidth%,"AutoHotkeySnapshotApp"     

	;Drag Mouse
	CoordMode, Mouse, Screen
	CoordMode, Tooltip, Screen
	WinGet, hw_frame_m,ID,"AutoHotkeySnapshotApp"
	hdc_frame_m := DllCall( "GetDC", "uint", hw_frame_m)
	KeyWait, LButton, D 
	MouseGetPos, scan_x_start, scan_y_start 
	Loop
	{
		Sleep, 10   
		KeyIsDown := GetKeyState("LButton")
		if (KeyIsDown = 1)
		{
			MouseGetPos, scan_x, scan_y 
			DllCall( "gdi32.dll\Rectangle", "uint", hdc_frame_m, "int", 0,"int",0,"int", A_ScreenWidth,"int",A_ScreenWidth)
			DllCall( "gdi32.dll\Rectangle", "uint", hdc_frame_m, "int", scan_x_start,"int",scan_y_start,"int", scan_x,"int",scan_y)
		} else {
			break
		}
	}

	;KeyWait, LButton, U
	MouseGetPos, scan_x_end, scan_y_end
	Gui Destroy
	
	if(scan_x_start!=scan_x_end || scan_y_start!=scan_y_end) {
		if (scan_x_start < scan_x_end)
		{
			x_start := scan_x_start
			x_end := scan_x_end
		} else {
			x_start := scan_x_end
			x_end := scan_x_start
		}
		
		if (scan_y_start < scan_y_end)
		{
			y_start := scan_y_start
			y_end := scan_y_end
		} else {
			y_start := scan_y_end
			y_end := scan_y_start
		}
	}
}

RunOCR(){
	getSelectionCoords(x_start, x_end, y_start, y_end)
	RunWait, D:\software\Capture2Text_v4.6.3_64bit\Capture2Text.exe --screen-rect  "%x_start% %y_start% %x_end% %y_end%" --clipboard
	; MsgBox, In area ::  --screen-rect "%x_start% %y_start% %x_end% %y_end%" `n`nFound Text:`n`n%clipboard%
	; global vMyText
	vMyText := "In area ::  --screen-rect """ . x_start . " " . y_start . " " . x_end . " " . y_end . """`n`nFound Text:`n`n" . clipboard
	; MsgBox, %vMyText%
	Gui, Font, s24
	Gui, Add, Edit, , %vMyText%
	Gui, Show
}
#IfWinActive ahk_exe AutoHotkeyU64.exe
^W::
	send !{F4}
return
^!Enter::
~^Q::
	RunOCR()
return

image (4).png