NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    에디터 가변 길이 문자열에서 OCR 문자 추출하는 방법.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 가변 길이 문자열이란 폰트에 따라서 문자의 폭이 줄어들거나 늘어나는걸 말합니다. 보통 폰트는 맑은 고딕, 굴림, 굴림체와 같은 이름을 가집니다. 여기서 굴림과 굴림체처럼 동일한 폰트 이름뒤에 "체"자가 붙는것들이 있습니다. 이 둘의 차이점은 아래와 같습니다.

    • ABCDEFGHIJKLMN 굴림
    • ABCDEFGHIJKLMN 굴림체

     

    폰트 굴림과 굴림체의 차이는 알파벳에 따라 크기가 균일한지 가변적인지가 다릅니다. 물론, 모양도 약간씩 다르긴 하지만요^^; 알파벳 "I"나 "M"과 "N" 크기를 비교해보시면 알 수 있습니다. 아래와 같은 문자열이 있다고 생각 해보세요. 길이가 다르죠? OCR로 인식해야 할 부분이 슬래시(/) 뒤쪽 문자라고 하면 인식 영역이 매번 달라질겁니다.

    • TEST (공용) / ROCKET 1542-900
    • IIII (공용) / MISSILE 0905-482

     

    위의 예처럼 인식 범위가 어느정도 여유가 있으면 넓게 OCR 영역을 설정해도 됩니다. 하지만, 인식 범위가 타이트(Tight)한 경우에는 문자 판독하기가 쉽지 않습니다. 테스트를 해볼까요? 엔지엠 에디터를 실행하고, 새로운 스크립트를 하나 추가 해줍니다.

    cnOuw3h.gif

     

     

    이미지에서 문자를 판독하기 위해 아래 그림과 같이 [ OCR 체크 ] 액션을 스크립트에 추가하세요.

    1. 도구 상자 탭 클릭
    2. 조건의 OCR 체크 액션 선택
    3. 더블 클릭 또는 드래그로 스크립트에 추가

    fk0zNbq.png

     

     

    아래 동영상을 참고해서 인식할 이미지 영역을 잡아줍니다. 영역을 선택하고, F1을 누르면 문자를 판독할 영역이 선택됩니다.

    ckOF29p.gif

     

     

    스크립트를 실행(Ctrl+Alt+F8)하면 아래 동영상과 같이 정상적으로 문자가 판독된 것을 알 수 있습니다.

    5qUubpL.gif

     

     

    문자를 변경하고, 다시 실행 해볼까요? 아래 동영상과 같이 아쉽게도 인식하려는 글자의 앞부분 "R"이 짤렸습니다. 반대의 상황이라면 슬래시 문자가 들어가거나 슬래시 문자의 앞부분 문자가 하나 더 들어갈수도 있습니다. 이런 현상이 발생되는 이유는 인식 범위는 고정인데 문자열의 길이는 가변적으로 변화하기 때문입니다.

    c0J0Nc5.gif

     

     

    만약, 앞쪽의 문자를 인식하는거라면 좀 더 쉬울겁니다. 시작 위치가 고정적이니까요. 그렇지만, 인식할 문자도 가변적이라면 끝 부분의 문자가 짤리거나 다른 문자가 포함되어 원하는 문자만 추출하는데 문제가 발생하게 됩니다. 매크로를 사용하는 목적을 생각해보면~ 이런 문제에 대해서도 유연하게 대응이 되어야하지 않을까 생각합니다^^; 자 그럼, 이 문제를 어떻게 해결해야 할까요? 인식할 문자가 포함된 전체 영역을 잡고, 슬래시 부분을 기준으로 문자열을 분리한 후 뒤쪽 문자열만 사용하면 될거 같습니다. 일단 전체 영역을 선택해보죠.

    OEOuuGL.gif

     

     

    스크립트를 실행(Ctrl+Alt+F8)하면 "IIII(38)/ROCKET 1542-900"와 같이 인식됩니다. 엔지엠의 문자 판독 기능은 한글과 영어를 동시에 인식할 수 없습니다. 한글과 영어가 혼합되어 있다면 아래 글을 참고하시면 도움이 될거 같습니다. 구글 Vision AI를 이용해서 다중 언어를 인식하는 방법입니다.

    [ 한글과 영어 다중 언어 인식 매크로 ]

    f97ZwVv.gif

     

     

    문자를 슬래시 기준으로 분리하려면 변수와 함수가 필요합니다. 일단, 판독한 문자를 변수에 저장 해줍시다. [ 변수 추가 ] 액션을 스크립트에 추가하세요.

    1. 함수 상자 탭 클릭
    2. 변수 카테고리 확장
    3. 변수 추가 액션 선택
    4. 더블 클릭 또는 드래그로 스크립트에 추가 (상단으로 이동: 콘트롤키+방향키)
    5. 아이디에 "판독문자" 입력
    6. 덮어 쓰기 속성을 True로 변경

    gmStpK2.png

     

     

    OCR 체크 액션에서 판독한 문자를 "판독문자" 변수에 저장해줄겁니다. 아래 그림을 참고해서 변수를 추가하세요.

    1. 변수 카테고리의 추가하기 클릭
    2. 추가 버튼 클릭
    3. "판독문자" 변수를 선택하고, "판독 문자" 속성 선택
    4. 확인 클릭

    LQ10wFP.png

     

     

    슬래시로 문자열을 분리하려면 [ 문자열 분리 ] 액션을 사용하면 됩니다.

    1. 함수 상자의 표현식 카테고리 확장
    2. 문자열 분리 선택
    3. 더블 클릭 또는 드래그로 스크립트에 추가
    4. 속성창의 변수 카테고리에 가져오기 클릭
    5. 추가 버튼 클릭
    6. 변수 이름과 다이터에 각각 "판독문자"와 "원본 문자열" 선택
    7. 확인 클릭
    8. 분리자에 슬래시(/) 입력
    9. 인덱스 1 설정

    z1FKgAk.png

     

     

    "IIII(38)/ROCKET 1542-900" 문자열을 슬래시로 분리하면 두개의 배열이 만들어집니다. "IIII(38)", "ROCKET 1542-900"입니다. 우리는 "ROCKET 1542-900" 이 문자를 선택해야 하기 때문에 인덱스 속성의 값을 1로 설정해준겁니다. 만약, 이 값을 0으로 하면 "IIII(38)" 값이 선택됩니다. 인덱스를 2로 입력하면 에러가 나겠죠^^; 자~ 이제 이 값을 변수에 한번 더 저장 해줍니다.

    1. 변수 카테고리의 추가하기 클릭
    2. 추가 버튼 클릭
    3. 변수 이름과 데이터를 각각 "판독문자", "결과 값"으로 선택
    4. 확인 클릭

    NwBKbgI.png

     

     

    정상적으로 동작했는지 확인하기 위해 [ 메세지 박스 ] 액션을 하나 추가 했습니다. 그리고, 아래 그림을 참고해서 판독한 문자를 내용에 넣어주세요.

    1. 메시지 박스 액션을 스크립트에 추가
    2. 변수 카테고리의 가져오기 클릭
    3. 추가 버튼 클릭
    4. 변수이름과 데이터에 "판독문자", "내용" 선택
    5. 확인 클릭

    4qk4YNM.png

     

     

    스크립트를 실행하면 메세지 박스에 "ROCKET 1542-900" 문자가 판독된 것을 확인할 수 있습니다.

    SicmGcB.gif

     

     

    텍스트를 "TEST(공용)/ROCKET 1542-900"과 같이 변경하고, 다시 실행 해볼까요?

    1Q00Sdn.gif

     

     

    OCR의 문자 판독 영역은 고정되어 있더라도, 모든 문자를 가져와서 특정 구분자 또는 키워드로 분리해서 처리 해봤습니다. 이외에도 정규식이나 기타 여러가지 방법을 응용하면 좀 더 쉽게 원하는 결과를 얻을 수 있을겁니다. 위 예제는 간단해서 금방 처리할 수 있었지만, 이보다 복잡한 구조를 가진다면 다른 방법을 사용해야 할겁니다. 궁금한점이 있거나 잘 이해가 되지 않는 부분들은 [ 질문과 답변 게시판 ]  또는 [ 고객 서비스 ]방에 문의하시면 친절하게 답변 드리도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.