본문 바로가기
VBA

[VBA] 나만의 OCR로 세상을 스캔해보자

by 일등미노왕국 2022. 8. 11.

오늘 해볼건 랜덤으로 생성된 4자리 숫자(번호판 4자리) 를 텍스트가 아닌 이미지로 인식하여 그것을 통해 텍스트를 추출하는 작업을 해볼것이다. 

엑셀이 텍스트인데 왜 이걸 이미지로 인식해서 다시 텍스트로 긁어오냐는 식의 어의없음은 탑재를 안하길 바란다.

 

OCR 엔진의 인식률은 좋은 편이다. 물론 이걸 사용하려면 윈도우10이어야 하고 윈도우에서 언어 패키지를 설치하여야 한다. 요즘 OCR엔진들은 학습도 가능하다고 하는데 이건 학습이 안된다고 한다. 참고하길 바란다.

처음에 OCR 영역을 설정하게 되면 영어와 숫자는 큰 무리없이 바로 마우스 포인트 옆에 스캔한 결과를 보여주는 tooltip이 생긴다. 이걸 클립보드에 담아서 각 해당 영역에 뿌려주는 코드이다. 

완벽하지는 않지만 생각보다 인식률이 좋은 편이니 간단하게 사용하기에는 좋을 듯 하다.

더보기
Option Explicit
Sub 주차관제()

    Dim rNum$, Num&, i&, n&: n = 1
    Dim rngAll As Range
    Dim rngA As Range
    Dim rngX As Range
    Dim rngT As Range: Set rngT = [k2]
    Dim ReNum$
    
    Set rngAll = [b6:h6]                                '= 영역설정
    [k1].CurrentRegion.Offset(1).ClearContents          '= 초기화
    Do Until n >= 50                                    '= 총 50차례 스캔
   
        Num = Application.RandBetween(1, 9999)          '= 1부터 9999까지의 랜덤 순번
        rNum = Application.Text(CStr(Num), "0000")      '= 4자리를 유지해라
        
        i = 0                                           '= 번호가 들어갈 열 번호 초기화
        Set rngX = [b6]                                 '= 처음 번호가 들어올 영역
        For Each rngA In rngAll                         '= 자리수를 반복해라
        If i >= 4 Then Exit For                         '= 자리수가 4자리가 되면 for문을 종료해라
        
            i = i + 1                                   '= 자리수를 증가해라
            rngX = Mid(rNum, i, 1)                      '= 각 자리에 하나씩 숫자들을 집어넣어라
            Set rngX = rngX.Offset(0, 1)                '= 열을 한 칸씩 옮겨가라
                                    
        Next rngA
        
        On Error Resume Next
             rngT.PasteSpecial                          '= OCR값을 붙여넣어라 / 만일 스캔값이 없다면 그냥 넘겨라
        On Error GoTo 0
        
        rngT.Next = Now()                               '= 현재 시간을 넣어라
        
        Set rngT = rngT.Offset(1)                       '= 스캔을 출력할 영역을 행기분으로 한칸 내려라
        Application.Wait (Now + TimeValue("0:00:02"))   '= 2초간 딜레이를 줘라
        n = n + 1                                       '= 전체 스캔 변수를 +1해라
      
    Loop
    
End Sub

OCR 영역은 응용파일로 되어 있으니 독립적으로 사용해도 된다.

 

주차관제.zip
0.41MB

댓글