반응형
광학 문자 인식(OCR)
광학 문자 인식(OCR)은 이미지로 된 텍스트를 컴퓨터가 이해할 수 있는 텍스트로 변환하는 기술입니다.
위 이미지를 보면 미리보기 / 맞춤법 / 글감검색 / open source / DOWNLOAD POWERED BY TINY
와 같은 글자가 들어있는 이미지 파일이 있습니다.
이미지파일에서 텍스트를 수정하거나 삭제하거나 편집하는 것은 불가능하지만
광학문자인식을 통해 이미지안에 들어있는 텍스트를 추출하여 데이터를 얻을 수 있는 기술입니다.
광학 문자 인식(OCR) 오토핫키 사용법
원작자 커뮤니티 주소입니다.
https://www.autohotkey.com/boards/viewtopic.php?f=83&t=116406
예제 1
데스크톱에서 찾은 모든 텍스트를 표시한 다음 결과를 줄별로 강조 표시합니다.
#include OCR.ahk
result := OCR.FromDesktop()
MsgBox "All text from desktop: `n" result.Text
MsgBox "Press OK to highlight all found lines for 3 seconds."
for line in result.Lines
result.Highlight(line, -3000)
ExitApp
예제 2
메모장에서 일부 텍스트를 찾아 마우스로 클릭&드래그하여 선택합니다.
#include OCR.ahk
Run "notepad.exe"
WinWaitActive "ahk_exe notepad.exe"
Send "Lorem ipsum "
Sleep 40
result := OCR.FromWindow("A",,2)
try found := result.FindString("Lorem")
if !IsSet(found) {
MsgBox '"Lorem" was not found in Notepad!'
ExitApp
}
result.Highlight(found)
CoordMode "Mouse", "Window"
MouseClickDrag("Left", found.x, found.y, found.x + found.w, found.y + found.h)
예제 3
커서 아래에 있는 텍스트를 읽어 실시간으로 표시합니다.
#Requires AutoHotkey v2
#include OCR.ahk
CoordMode "Mouse", "Screen"
CoordMode "ToolTip", "Screen"
DllCall("SetThreadDpiAwarenessContext", "ptr", -3) ; Needed for multi-monitor setups with differing DPIs
global w := 150, h := 50, minsize := 5, step := 3
Loop {
MouseGetPos(&x, &y)
Highlight(x-w//2, y-h//2, w, h)
ToolTip(OCR.FromRect(x-w//2, y-h//2, w, h, "en-us").Text, , y+h//2+10)
}
Right::global w+=step
Left::global w-=(w < minsize ? 0 : step)
Up::global h+=step
Down::global h-=(h < minsize ? 0 : step)
Highlight(x?, y?, w?, h?, showTime:=0, color:="Red", d:=2) {
static guis := []
if !IsSet(x) {
for _, r in guis
r.Destroy()
guis := []
return
}
if !guis.Length {
Loop 4
guis.Push(Gui("+AlwaysOnTop -Caption +ToolWindow -DPIScale +E0x08000000"))
}
Loop 4 {
i:=A_Index
, x1:=(i=2 ? x+w : x-d)
, y1:=(i=3 ? y+h : y-d)
, w1:=(i=1 or i=3 ? w+2*d : d)
, h1:=(i=2 or i=4 ? h+2*d : d)
guis[i].BackColor := color
guis[i].Show("NA x" . x1 . " y" . y1 . " w" . w1 . " h" . h1)
}
if showTime > 0 {
Sleep(showTime)
Highlight()
} else if showTime < 0
SetTimer(Highlight, -Abs(showTime))
}
예제 4
활성 창에서 검색어를 찾으려고 시도합니다.
#Requires AutoHotkey v2
#include OCR.ahk
CoordMode "Mouse", "Window"
Loop {
ib := InputBox("Insert search phrase to find from active window: ", "OCR")
Sleep 100 ; Small delay to wait for the InputBox to close
if ib.Result != "OK"
ExitApp
result := OCR.FromWindow("A",,2)
try found := result.FindString(ib.Value)
catch {
MsgBox 'Phrase "' ib.Value '" not found!'
continue
}
MouseMove found.x, found.y
result.Highlight(found)
break
}
예제 5
텍스트를 기다리는 방법, 결과 개체에서 키워드를 검색하는 방법, 결과를 클릭하는 방법을 보여줍니다
#Requires AutoHotkey v2
#include OCR.ahk
Run "https://www.w3schools.com/tags/att_input_type_checkbox.asp"
WinWaitActive "HTML input type",,10
if !WinActive("HTML input type") {
MsgBox "Failed to find test window!"
ExitApp
}
예제 6
검색 영역의 창을 특정 좌표로 제한하는 방법
result := CropResult(OCR.FromDesktop(), 0, 0, 500, 80)
for line in result.Lines
ToolTip(line.Text), result.Highlight(line)
CropResult(result, x, y, w, h) {
result := result.Clone()
croppedLines := [], croppedWords := [], text := ""
for line in result.Lines {
croppedWords := [], lineText := ""
for word in line.Words {
if word.x >= x && word.y >= y && (word.x+word.w) <= (x+w) && (word.y+word.h) <= (y+h)
croppedWords.Push(word), lineText .= word.Text " ", ObjAddRef(word.ptr)
}
if croppedWords.Length {
line := {Text:Trim(lineText), Words:croppedWords}
line.base.__Class := "OCR.OCRLine"
croppedLines.Push(line)
text .= lineText
}
}
result.DefineProp("Lines", {Value:croppedLines})
result.DefineProp("Text", {Value:Trim(text)})
result.DefineProp("Words", OCR.Prototype.GetOwnPropDesc("Words"))
return result
}
반응형
'오토핫키(v2) > 오토핫키 스크립트' 카테고리의 다른 글
오토핫키(Autohotkey) 버전 v1 에서 v2 스크립트 변환 스크립트 (2) | 2024.09.07 |
---|---|
오토핫키(AutoHotkey) v2 - 다양한 소리를 한번에 출력하는방법 (1) | 2024.06.03 |