NGMsoftware

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

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

    팁 앤 테크

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

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

    에디터 이미지 조건 옵션별 테스트.

    페이지 정보

    본문

    목차

    • 테스트 준비 사항
    • 활성 모드 테스트
      - 이미지 체크
      - 이미지 멀티 체크
      - 이미지 서치
      - 이미지 멀티 서치
      - 이미지 매치
      - 이미지 멀티 매치
    • 비활성 모드 테스트
      - 이미지 체크
      - 이미지 멀티 체크
      - 이미지 서치
      - 이미지 멀티 서치
      - 이미지 매치
      - 이미지 멀티 매치
    • 주의 사항

     

    테스트 준비 사항

    테스트에 사용할 도형들을 그림판에 하나씩 만들어 줍니다.

    WM1hNrc.png

     

     

    각각의 도형들을 엔지엠 매크로 이미지(ngi)로 하나씩 저장 해줍니다.

    Mefujd3.png

     

     

    공용 이미지(png, gif, jpg, bmp)도 도형별로 저장 해줍니다.

    QIngXGR.png

     

     

    활성 모드 테스트

    1. 이미지 체크

    이미지 이름에서 삼각형.ngi를 선택한 후 실행합니다. 가장 일반적인 형태로 문제 없이 동작합니다.

    NXEHIIF.png

     

     

    이번에는 이미지 선택에서 png 이미지를 선택하고 실행하세요. 이미지 체크는 동일한 위치에 이미지가 동일한지 비교하는 액션입니다. ngi 이미지의 경우 캡쳐할 때 이미지 위치가 내부에 저장됩니다. 하지만, png와 같은 공용 이미지는 위치값이 없습니다. 그래서, 대상 이미지를 선택하고 두 이미지가 같은지 비교하는 방식으로 동작합니다. 이미지의 위치를 알 수 없기 때문에 마우스 클릭과 같은 동작은 수행할 수 없습니다.

    • 아웃풋 설명: 십자 별표, Warning [대상 이미지 선택] 필수 입력 값이 누락되었습니다. 값을 입력하고 다시 실행하세요.

    GPwf2hI.png

     

     

    마우스 클릭을 설정하고 다시 실행 해보세요. 그림판에서 삼각형을 찾아서 클릭합니다.

    xhzCGnU.png

     

     

    대상 이미지 선택에 이미지 선택 속성에서 선택한 십자 별표 이미지를 선택하고, 다시 실행해보세요. 이 경우에는 윈도우 화면을 캡쳐해서 비교하는게 아니라서 그림판이 없어도 이미지 체크가 동작합니다. 첫번째 이미지 체크는 그림판이 없어서 False가 되었고 두번째 이미지 체크는 True가 되었습니다. 대상 이미지를 바꾸면 결과는 False가 됩니다.

    NLUs8SA.png

     

     

    이미지 이름이 아닌 이미지 선택의 경우 마우스 클릭을 설정하면 무조건 0, 0 좌표를 클릭합니다. 앞서 설명했듯이 엔지엠 매크로 이미지가 아닌 공용 이미지는 위치 값이 없기 때문에 윈도우의 좌측 상단 0,, 0 좌표로만 이동됩니다. 이미지 선택으로 마우스 클릭을 사용하려면 이미지 서치 또는 이미지 매치를 이용해야 합니다.

    MQyweJL.png

     

     

    2. 이미지 멀티 체크

    이미지 이름을 클릭해서 모든 이미지를 추가 해줍니다.

    nnS3aJC.png

     

     

    이미지 멀티 체크를 실행하면 아래와 같이 모든 이미지가 존재하기 때문에 최종 결과는 True가 됩니다.

    1AbKYZL.png

     

     

    비교 조건을 Custom으로 변경하고, 비교 조건 수를 4로 설정하세요. 이렇게 하면 전체 이미지에서 5개 이상 True인 경우 나머지 이미지들은 비교하지 않고 True로 완료됩니다. 비교 조건 수보다 커야 합니다. 그래서, 비교 조건 수에 4를 입력했으면 실제로 찾은 이미지 개수는 5개여야 합니다.

    mcth2av.png

     

     

    이미지 멀티 체크의 이미지 이름에서 마우스 클릭을 설정한 후 다시 실행 해보세요.

    rvcPV7y.png

     

     

    그림판에서 모든 이미지의 중앙을 클릭합니다. 모든 이미지를 하나의 이미지로 처리하고, ①가운데를 클릭합니다.

    pkZI3zN.png

     

     

    모든 이미지를 클릭하려면 다중 처리 방식을 Each로 변경해야 합니다. 다중 처리 방식의 옵션은 3가지입니다.

    • Combine: 모든 이미지를 합쳐서 하나로 처리합니다.
    • Each: 이미지 각각 마우스 처리합니다.
    • EachAndCombine: 이미지 각각 마우스를 클릭하고 하나로 합쳐서 한번 더 클릭합니다.

    ZOygcvQ.png

     

     

    일부 원하는 이미지만 클릭하려면 이미지 목록에서 원하는 이미지만 마우스 액션을 설정하세요.

    pue5rY8.png

     

     

    이미지 선택에 png 이미지를 모두 추가 해줍니다. 이미지 체크와 동일하게 이미지의 위치가 없기 때문에 대상 이미지를 추가해줘야 합니다. 이미지 멀티 체크에서 이미지 파일과 대상 이미지 파일로 비교하는 경우는 무조건 False입니다. 소스 이미지는 여러개지만 대상 이미지는 하나라서 모두 만족할 수 없기 때문입니다.

    67uBzXk.png

     

     

    이런 경우에는 비교 조건을 Or로 사용해야 합니다. 하나라도 같은 이미지가 있으면 True로 처리됩니다.

    6VufNpS.png

     

     

    3. 이미지 서치

    이미지 서치 액션을 스크립트에 추가한 후 이미지 이름에서 오른쪽 화살표를 선택한 후 실행하세요.

    GtAaKLF.png

     

     

    두번째 이미지 서치는 이미지 선택에 사각형 이미지를 선택하고 실행하세요.

    4Byy77R.png

     

     

    이미지 서치는 이미지 선택, 이미지 이름 모두 마우스 클릭이 정상 동작합니다.

    6JSgzOY.png

     

     

    4. 이미지 멀티 서치

    엔지엠 이미지를 모두 추가하고 실행하세요. 이미지 멀티 서치의 비교 조건은 And입니다. 모든 이미지를 추가한 상태고, 그림판에 모든 이미지가 있으므로 결과는 True입니다.

    0qteAiH.png

     

     

    공용 이미지를 모두 추가하고 실행해보세요. 결과는 동일합니다.

    w00STmq.png

     

     

    이미지 멀티 서치 2개 모두 비교 조건을 Or로 변경하고 다시 실행 해보세요. 아래는 각각의 로그입니다.

    Runtime: 00:00:00.000
    스레드 수: 34
    테스트 그림판 원본 위치: 00:00:00.000
    스레드 수: 34
    [동그라미.ngi] 1: 비교 결과: True
    반복한 횟수: 1
    결과 반환: True
    Runtime: 00:00:00.195
    스레드 수: 34
    [동그라미.png] 1: 비교 결과: True
    반복한 횟수: 1
    결과 반환: True
    Runtime: 00:00:00.336
    스레드 수: 35
    

     

    다시 모든 속성을 원래대로 돌려놓고, 마우스 클릭을 설정해보세요. 다중 처리 방식의 기본 값은 Combine이기 때문에 모든 이미지를 합친 가상의 이미지 가운데를 클릭합니다.

    GHHO1iY.png

     

     

    Combine 옵션은 아래와 같이 모든 이미지를 합쳐서 하나의 가상 이미지를 만든 후 좌표를 처리합니다. 만약, 육각형과 삼각형을 빼면 클릭 위치는 왼쪽으로 이동할겁니다.

    pkZI3zN.png

     

     

    이번에는 서브 다중 처리 방식에 대해 알아보도록 하겠습니다. 옵션은 아래와 같습니다. 가깝거나 먼 거리를 계산하려면 아래 이미지처럼 찾을 좌표를 설정해야 합니다.

    • FarSort: 먼 순서로 정렬한 후 순차적으로 마우스 액션을 처리합니다.
    • NearSort: 가까운 순서대로 정렬한 후 순차적으로 마우스 액션을 처리합니다.
    • FarFirst: 가장 먼 하나만 마우스 액션을 처리합니다.
    • NearFirst: 가장 가까운 하나만 마우스 액션을 처리합니다.
    • None: 아무것도 수행하지 않습니다.

    o0Yq7jO.png

     

     

    서브 다중 처리 방식을 하나씩 바꿔가면서 테스트 해보세요. 각각의 옵션에 따라서 찾을 좌표를 기준으로 마우스 액션이 처리됩니다.

     

    5. 이미지 매치

    이미지 매치 액션을 2개 추가하고 첫번째 이미지 매치에서 이미지 이름을 육각형으로 선택하고 실행하세요.

    mAbnVKt.png

     

     

    이번에는 이미지 선택에 마름모를 선택하고 실행하세요.

    gqkAiwR.png

     

     

    이미지 매치에서 마우스 동작을 클릭으로 변경하고, 매크로를 실행 해보세요. 그림판에서 육각형 이미지를 클릭합니다.

    6Kxoq7p.png

     

     

    6. 이미지 멀티 매치

    이미지 멀티 매치 액션을 2개 추가하고, 첫번째 액션에는 모든 엔지엠 매크로 이미지를 추가하세요. 두번째 액션에는 공용 이미지를 모두 추가하고 실행하세요.

    5aL8Bki.png

     

     

    전체 이미지를 모두 찾기 때문에 결과는 동일합니다.

    ICFIZ20.png

     

     

    이미지 멀티 매치에 마우스를 테스트 해보겠습니다. 아래와 같이 옵션을 설정하세요.

    • 다중 처리 방식: Each
    • 마우스 동작: LeftClick (클릭)
    • 마우스 실행 전 지연: 500 (0.5초)
    • 서브 다중 처리 방식: FarSort (먼 순서대로)
    • 찾을 좌표: 오른쪽 화살표 바로 옆 설정

    KddFYAT.png

     

     

    매크로를 실행하면 오른쪽 화살표에서 먼 도형부터 클릭하면서 오른쪽 화살표를 마지막에 클릭합니다. 서브 다중 처리 방식에 따라서 하나만 처리할수도 있습니다.

     

     

    비활성 모드 테스트

    비활성 모드로 테스트하기 위해 핸들 추가 액션을 스크립트 위에 추가하세요. 그리고, 그림판을 선택 해줍니다. 비활성 모드에서 매크로를 제작할 때는 주의할점들이 있습니다. 처음 이미지를 캡쳐할 때 창 위치와 이미지 위치를 내부에 기억합니다. 따라서, 매크로를 제작할 때 이창, 저창 옴겨다니면서 캡쳐하거나 찾기 영역을 설정하면 기준이 되는 좌표를 알 수 없기 때문에 비활성 모드에서 마우스 좌표를 계산할 수 없습니다.

    plcX59R.png

     

     

    1. 이미지 체크

    이미지 체크 액션을 기본 설정으로 두고, 마우스 클릭만 설정한 후 실행 해보세요. 비활성 모드에서는 창 위치가 변경되더라도 마우스 동작이 정상적으로 실행됩니다. 활성 모드는 무조건 좌표 기준이라서 창이 이동되면 이미지를 찾지 못합니다. 하지만, 비활성 모드는 핸들 추가한 프로그램을 기준으로 상대 좌표를 계산해서 처리 해줍니다. 그래서, 핸들 추가한 프로그램이 이동하더라도 정상 처리가 가능합니다.

     

     

    이미지 체크는 활성 모드와 동일하게 이미지 선택은 마우스 클릭이 동작하지 않습니다. 좌표 값을 핸들 추가한 프로그램과 상대 위치를 계산할 수 없기 때문입니다. 엔지엠 매크로 이미지는 캡쳐할 때 내부에 이미지 위치까지 저장하지만, 공용 이미지(png, gif, jpg, bmp)는 순수하게 이미지 정보만 가지고 있으므로 위치를 알 수 없습니다.

     

    2. 이미지 멀티 체크

    이미지 멀티 체크에서 비활성 모드도 활성 모드와 동일하게 엔지엠 이미지만 마우스 처리가 가능합니다. 아래 동영상을 보면, Each 속성으로 모두 클릭하는걸 확인할 수 있습니다.

     

     

    비활성 모드이므로 그림판이 이동되어도 모든 이미지를 정상적으로 찾고, 클릭도 됩니다.

    A8nPOB4.png

     

     

    3. 이미지 서치

    이미지 서치는 오른쪽 화살표 이미지를 찾도록 설정했습니다. 비활성 모드라서 창이 이동해도 정상적으로 찾고 클릭까지 실행됩니다.

     

     

    4. 이미지 멀티 서치

    이미지 멀티 서치도 이미지 서치와 동일하게 동작합니다. 앞서 알아본 마우스 옵션의 설정에 따라 동작은 다를 수 있습니다. 하지만, 상대적인 위치를 찾는건 같습니다. 아래 동영상과 같이 그림판이 이동되어도 모든 이미지를 찾고 클릭합니다. 또한, 비활성 모드라서 창이 가려져도 마우스 클릭이 가능합니다.

    ※ 일부 프로그램은 창이 가려지면 클릭할 수 없습니다.

     

     

    5. 이미지 매치

    이미지 매치도 이미지 서치와 대부분 속성이 동일합니다. 윈도우 화면에서 이미지를 찾는 방식입니다. 다만, 이미지 서치는 픽셀 정보를 기반으로 인접한 픽셀의 RGB값을 비교하지만, 이미지 매치는 템플릿 매칭이라는 알고리즘을 사용합니다. 이미지 서치보다 복잡한 계산식을 통해 이미지의 유사성을 찾습니다. 이미지 매치 액션의 매치 옵션 속성은 아래와 같습니다.

    ※ 참고 자료: https://docs.opencv.org/3.4/de/da9/tutorial_template_matching.html

    • SQDIFF R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2
    • SQDIFF_NORMED R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2
    • CCORR R(x,y)=∑x′,y′(T(x′,y′)⋅I(x+x′,y+y′))
    • CCORR_NORMED R(x,y)=∑x′,y′(T(x′,y′)⋅I(x+x′,y+y′))∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2
    • CCOEFF R(x,y)=∑x′,y′(T′(x′,y′)⋅I′(x+x′,y+y′)) where T′(x′,y′)=T(x′,y′)−1/(w⋅h)⋅∑x′′,y′′T(x′′,y′′)I′(x+x′,y+y′)=I(x+x′,y+y′)−1/(w⋅h)⋅∑x′′,y′′I(x+x′′,y+y′′)
    • CCOEFF_NORMED R(x,y)=∑x′,y′(T′(x′,y′)⋅I′(x+x′,y+y′))∑x′,y′T′(x′,y′)2⋅∑x′,y′I′(x+x′,y+y′)2

     

    이미지 매치에서 육각형 이미지를 찾도록 해보세요. 이미지 서치 테스트와 동일하게 창을 이동해도 정상적으로 찾고 클릭합니다.

     

     

    6. 이미지 멀티 매치

    마지막으로 이미지 멀티 매치 테스트가 남았습니다. 이미지 멀티 매치도 이미지 멀티 서치와 동일합니다.

     

     

    찾기 영역 및 성능 테스트

    1. 이미지 체크

    이미지 체크는 찾기 영역을 설정할 수 없습니다. 윈도우 화면에서 이미지를 찾는게 아닌 윈도우 화면의 동일한 위치에 찾을 이미지가 있는지 판단하는 액션이기 때문입니다. 따라서 퍼포먼스는 이미지 서치, 이미지 매치보다 우수합니다. 핸들을 추가하지 않은 경우 속도입니다.

    • Runtime: 00:00:00.044

     

    핸들을 추가한 후 속도입니다.

    • Runtime: 00:00:00.043

    grDXuSy.png

     

     

    2. 이미지 멀티 체크

    이미지 멀티 체크도 위의 이미지 체크와 동일하게 같은 영역을 비교하기 때문에 찾기 영역을 설정할 수 없습니다. 아래는 핸들 없이 실행한 속도입니다.

    • Runtime: 00:00:00.372 (비동기 사용: 00:00:00.399)

     

    핸들을 추가하고 실행한 속도입니다.

    • Runtime: 00:00:00.255 (비동기 사용: 00:00:00.330)

    TgIsChz.png

    .

     

    3. 이미지 서치

    핸들 및 찾기 영역이 없는 경우 아래와 같은 속도입니다.

    • Runtime: 00:00:00.366

     

    핸들만 설정한 경우 아래와 같은 속도가 나옵니다. 약 2배정도 차이가 발생합니다.

    • Runtime: 00:00:00.150
       

    핸들 없이 그림판 크기만큼 찾기 영역을 설정한 경우입니다.

    • Runtime: 00:00:00.140

     

    핸들을 추가하고, 찾기 영역을 설정한 속도입니다.

    • Runtime: 00:00:00.138

    NoxxIGk.png

     

     

    참고로, 엔지엠 이미지는 비활성 모드에서 창이 이동해도 정상 동작합니다. 하지만, 이전 이미지의 위치를 알 수 없는 공용 이미지(png, gif, jpg, bmp)는 창이 이동하면 마우스 클릭 좌표를 계산할 수 없습니다. 활성, 비활성 모드를 모두 사용해야 한다면 고정 위치에서 엔지엠 이미지를 사용하세요.

     

    4. 이미지 멀티 서치

    이미지 멀티 서치를 기본 설정으로 10개의 이미지를 모두 찾는데 소요되는 시간입니다.

    • Runtime: 00:00:03.078 (비동기: 00:00:03.993)

     

    핸들을 추가하고 매크로를 실행하면 아래와 같이 속도가 많이 개선됩니다.

    • Runtime: 00:00:01.057 (비동기: 00:00:01.653)

     

    핸들을 사용 안함으로 변경하고, 찾기 영역만 그림판 크기만큼 설정한 후 실행하세요.

    • Runtime: 00:00:01.057

     

    핸들을 사용함으로 변경하고 찾기 영역도 설정하세요. 약간 속도가 개선되었습니다.

    • Runtime: 00:00:00.976

     

     

    5. 이미지 매치

    이미지 매치 액션도 이미지 서치와 동일합니다. 위 이미지 서치 속도와 비교 해보세요. 핸들과 찾기 영역이 없는 일반 설정 속도입니다.

    • Runtime: 00:00:00.210

     

    핸들을 사용함으로 변경하고, 다시 실행 해보세요.

    • Runtime: 00:00:00.060

     

    핸들을 사용 안함으로 변경하고, 찾기 영역만 그림판 크기만큼 설정하고 실행 해보세요.

    • Runtime: 00:00:00.055

     

    핸들을 사용함으로 변경하고 찾기 영역도 설정하고 실행 해보세요.

    • Runtime: 00:00:00.044

    wfBZ5Sd.png

     

     

    6. 이미지 멀티 매치

    이미지 멀티 매치도 이미지 멀티 서치와 대부분 동일합니다. 다만 이미지 분석 알고리즘이 다르기 때문에 속도 부분만 참고하시면 됩니다. 핸들과 찾기 영역 없이 실행한 속도입니다.

    • Runtime: 00:00:02.106

     

    핸들을 사용함으로 변경하고 실행한 속도입니다.

    • Runtime: 00:00:00.412

     

    핸들을 사용 안함으로 변경하고 찾기 영역을 그림판 크기만큼 설정한 후 실행한 속도입니다.

    • Runtime: 00:00:00.503

     

    핸들을 사용함으로 변경하고, 찾기 영역이 있는 상태에서 실행한 속도입니다.

    • Runtime: 00:00:00.426

     

     

    활성, 비활성, 찾기 영역 및 비동기까지 전체 테스트를 진행하지는 않았지만, 비동기 모드는 이미지가 적을 때 효율이 더 떨어집니다. 패러럴하게 이미지를 불러 들여서 처리하다보니 동기적으로 수행해야 하는 부분들은 대기 상태에 빠집니다. 하지만, 이미지가 많은 경우에는 효율이 좋을수도 있습니다. 일반 모드와 비동기 모드에 대한 테스트는 아래 글을 참고하세요.

    [ 이미지 멀티 조건 성능 비교 및 테스트 ]

     

    주의사항

    엔터프라이즈에는 이미지 멀티 체크, 이미지 멀티 서치, 이미지 멀티 매치를 조금이라도 더 빠르게 수행하기 위해 패러럴하게 동작하는 옵션이 추가되어 있습니다. 엔터프라이즈 에디터 및 플레이어를 사용하시는 분들은 이 내용을 확인 후 어떻게 사용할지 먼저 고민해봐야 합니다. 우선, 이미지 멀티 매치의 10개 이미지를 찾차서 클릭하는 순차 실행 속도를 확인 해보겠습니다.

    • Runtime: 00:00:02.332

     

     

    이번에는 비동기로 실행 해봤습니다. 동기 모드로 약 2.3초 걸렸던게 비동기로 실행하면 0.8초정도 걸립니다.

    • Runtime: 00:00:00.850

     

     

    이미지도 정상적으로 모두 찾고, 클릭도 되었습니다.

    wlMb7jr.png

     

     

    핸들을 추가하고, 테스트 해볼께요. 비동기는 끈 상태입니다. 핸들을 사용하지 않았을 때보다 약 150프로정도 성능이 향상되었습니다.

    • Runtime: 00:00:00.406

     

    이번에는 비동기로 테스트를 해보겠습니다.

    • Runtime: 00:00:00.262

     

    핸들을 추가하고, 비동기로 테스트하면 랜덤하긴 하지만 핸들이 없거나 동기 모드로 실행할 때보다 속도가 빠릅니다. 하지만, 전체 이미지를 비교할 때 비동기 옵션이 유용합니다. 만약, Or 조건으로 사용한다면 마우스 클릭이 정상적으로 수행되지 않을 수 있습니다. 검증하고 있는 이미지가 여러개다보니 어떤게 참(True)인지 거짓(False)인지 결과가 섞일 수 있습니다. 비동기 옵션을 끄고, 비교 조건을 Custom으로 변경하세요. 그리고 비교 조건 수를 4로 입력합니다. 이렇게 설정하면 5개 이상 이미지를 찾으면 전체 결과는 True가 됩니다. 아래 그림에서 보듯이 5개 이미지를 찾고 True가 되었기 때문에 더이상 클릭이 발생하지 않았습니다.

    fsjTyHc.png

     

     

    이번에는 비동기를 True로 변경하고 다시 실행 해볼까요? 동기 모드처럼 5개만 클릭하고 끝나야 하는데요. 아래 그림처럼 모든 이미지를 다 찾고 클릭했습니다. 이렇게 동작하는 이유는 간단합니다. 하나씩 확인하고 마우스 클릭하는게 아니라 동시에 10개가 모두 실행되고 결과를 동시에 내놓기 때문에 조건 5보다 크다고 판단하기 전 이미 모두가 참으로 판단되었기 때문입니다.

    L5bBv6o.png

     

     

    마우스 클릭을 동기화 하려면 이미지 목록에서 각각의 이미지에 클릭 옵션을 주는 것입니다.

    zAgXbs6.png

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.