NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • NGM 6
  • 매뉴얼

    NGM 6

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

    커스텀 1부 - 커스텀 모듈로 이미지 서치 액션 만들기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로의 커스텀 모듈로 이미지 서치 또는 이미지 매치 액션을 어떻게 만드는지 알아보도록 하겠습니다. 이 내용을 학습하기전에 아래 내용들을 먼저 확인 해보셔야 합니다. 커스텀 모듈 개발 환경 구성과 간단한 예제로 마우스 클릭 만들기를 따라해보시고, 이 예제를 따라 해보세요^^

    [ 커스텀 모듈 개발 환경 만들기 ]

    [ 1부 - 광클릭 마우스 액션 만들기 ]

    [ 2부 - 광클릭 마우스 액션 만들기 ]

    [ 3부 - 광클릭 마우스 액션 만들기 ]

     

    광클릭 마우스 액션 만들기뿐만 아니라 엔지엠 매크로에서 사용되는 모든 액션뿐만 아니라 사용자가 필요한 기능을 액션으로 만들어서 엔지엠 매크로 에디터에 추가할 수 있습니다. 광클릭 마우스 액션외에 다양한 예제들이 있는데요. 아래 글을 한번 참고해보세요.

    [ 커스텀 모듈 개발 예제 ]

     

    Visual Studio Community를 실행하고, 새로운 프로젝트를 추가하세요. CustomModuls 이름으로 솔루션을 만들었습니다. 그리고, 라이브러리 CustomImageSearch 프로젝트를 만들고 자동으로 생성되는 Class.cs는 삭제하세요. CustomImageSearchModel.cs 클래스를 새롭게 추가하세요.

    W01K9HT.png

     

     

    이미지 서치에 사용할 이미지 2개를 만들었는데요. 아래 이미지는 source.png로 저장하세요.

    Hx13qUH.png

     

     

    source.png 이미지를 찾을 대상 이미지는 target.png입니다.

    SHpmdyi.png

     

     

    target.png 이미지에 source.png 이미지가 있는지 판단하는 간단한 액션입니다. 프로젝트에 참조 추가를 클릭하고, 커스텀 모듈 개발 라이브러리 3개를 추가하세요.

    ※ 프로젝트의 참조에서 우클릭하고, 컨텍스트 메뉴에서 참조 추가를 클릭하세요.

    I7oRaxo.png

     

     

    찾아보기를 클릭하시고, 관리자로부터 받은 커스텀 개발 프레임워크 라이브러리 3개를 선택하세요. 그리고, 확인을 클릭하세요.

    9tOYPkE.png

     

     

    프로젝트의 참조를 펼쳐보면 라이브러리 3개가 추가된걸 확인할 수 있습니다.

    fNFo3AN.png

     

     

    이제 코딩을 해야 하는데요. C# 언어에 대해 어느정도 알고 있으면 아래 내용들을 쉽게 이해할 수 있을겁니다. 하지만, 개발 언어를 한번도 접해보지 않았다면 이해가 안되는 부분들이 많을거예요. 그리고, 개발이라는게 단시간에 습득할 수 있는건 아니라서 꾸준히 학습하면서 예제들을 따라해보세요. 잘 모르는 부분들은 홈페이지의 [ 질문과 답변 게시판 ]에 질문하시면 알려드리도록 하겠습니다.

     

    CustomImageSearchModel 클래스에 NGM.Models.Interface.BaseCustomConditionToolModel 추상 클래스를 상속 받습니다.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CustomImageSearch
    {
        [Serializable]
        public class CustomImageSearchModel : NGM.Models.Interface.BaseCustomConditionToolModel
        {

     

    엔지엠 커스텀 모듈 프레임워크에서는 총 4개의 추상 클래스를 제공합니다.

    • NGM.Models.Interface.BaseCustomToolModel: 도구 상자 액션으로 반환 값이 없는 추상 클래스입니다.
    • NGM.Models.Interface.BaseCustomConditionToolModel: 도구 상자 액션으로 반환 값이 있는 조건 추상 클래스입니다.
    • NGM.Models.Interface.BaseCustomFunctionModel: 함수 상자 액션으로 반환 값이 없는 추상 클래스입니다.
    • NGM.Models.Interface.BaseCustomConditionFunctionModel: 함수 상자 액션으로 반환 값이 있는 추상 클래스입니다.

     

    용도에 맞게 추상 클래스를 상속 받은 후 추상 속성과 메소드를 구현해야 합니다. 아래는 이미지 서치의 전체 코드입니다.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CustomImageSearch
    {
        [Serializable]
        public class CustomImageSearchModel : NGM.Models.Interface.BaseCustomConditionToolModel
        {
            public override string DisplayCategory => "조건";
    
            public override string DisplayName => "이미지 서치";
    
            [Category("Data")]
            [DisplayName("판단 결과")]
            [DefaultValue(false)]
            [Browsable(true)]
            public bool Result { get; set; }
    
            public override bool? Execute()
            {
                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\target.png")
                    );
    
                Result = !rect.IsEmpty;
                return Result;
            }
        }
    }

     

    DisplayCategory 속성은 에디터의 카테고리 텍스트입니다. 동일한 카테고리를 사용하는 액션들은 하나의 카테고리 안에 추가됩니다.

    public override string DisplayCategory => "조건";

     

    엔지엠 매크로 에디터에서 조건과 같지만, 사용자 도구 상자에 표시됩니다.

    arSX73Q.png

     

     

    DisplayName은 카테고리안에 추가할 액션의 이름입니다. 엔지엠 매크로 에디터의 이미지 서치, 이미지 매치와 같은 이름을 말합니다.

    public override string DisplayName => "이미지 서치";

     

    Execute 메소드는 실제로 동작해야 할 내용입니다. 이곳에 코딩하는데로 액션이 동작합니다.

    public override bool? Execute()

     

    엔지엠 매크로에서 제공해주는 편리하고 다양한 함수(Function)들을 이용해서 이미지 서치 또는 이미지 매치를 쉽게 만들 수 있습니다. 지금은 간단한 예제라서 사용자가 이미지를 선택하거나 캡쳐하는건 아닙니다. 미리 저장된 이미지 2개로 찾을 이미지가 포함되어 있는지 체크하는 방법입니다. 아래 코드에서 NGM.Utility.ImageManager.ImageCondition.IsFind 메소드를 사용하면 첫번째 이미지가 두번째 이미지 안에 있는지 찾을 수 있습니다.

    ※ 보기좋게 줄바꿈을 해서 코딩했지만, 실제로는 한줄로 쭉 작성해도 상관 없습니다.

                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\target.png")
                    );

     

    IsFind 액션은 첫번째 이미지가 두번째 이미지에 포함되어 있는지 확인 후 찾은 이미지의 위치 값을 반환합니다. 이 값을 rect 변수에 저장합니다. 그럼, 이미지를 못찾으면 어떻게 될까요? rect는 빈 값을 반환 받는데요. 빈 값인지 확인하는 쉬운 방법은 IsEmpty를 사용하는겁니다. 반환 받은 rect 변수가 비어있는지 체크할 때 느낌표(!)를 앞에 붙여주면 참, 거짓을 반대로 처리합니다. 그래서 아래 코드는 이미지를 찾았다는 뜻이 됩니다.

                Result = !rect.IsEmpty;
                return Result;

     

    테스트를 위해서 아래와 같이 컴파일하세요. 솔루션 탐색기에서 프로젝트를 우클릭하고, 빌드를 클릭하세요.

    1DrHGUi.png

     

     

    빌드가 완료되면 프로젝트에서 다시 우클릭한 후 파일 탐색기에서 폴더 열기를 클릭하세요.

    zs9ykfZ.png

     

     

    bin > Debug 폴더로 이동한 후 모든 파일을 복사합니다.

    RMM5aY0.png

     

     

    내문서 > NGM6 > ToolExtension 폴더에 모두 붙여넣기 해주세요. 그리고, 엔지엠 매크로 에디터를 실행하세요. 그리고, 새 스크립트를 하나 추가해줍니다.

    cnOuw3h.gif

     

     

    에디터의 사용자 도구 상자 탭(Tab) 안에 조건 카테고리가 보입니다. 조건 카테고리를 펼쳐보면 우리가 만든 이미지 서치 액션이 보입니다.

    RZvkHv0.png

     

     

    설정할 수 있는 속성이 없기 때문에 사용자가 뭔가 할 수 있는건 없습니다. 매크로를 실행 해볼까요? target.png 안에 source.png 이미지가 존재하기 때문에 결과는 True가 됩니다.

    ROFyz01.png

     

     

    이미지 매치에는 몇가지 옵션들이 존재합니다. 예를 들어서 target 이미지에 source 이미지가 얼마나 일치하는지 확인할 수 있는데요. 아래와 같이 코드를 변경 해보세요.

            [Category("Data")]
            [DisplayName("매치율")]
            [DefaultValue(0)]
            [Browsable(true)]
            public double MatchRate { get; set; } = 0.0;

     

    그리고, Execute 메소드에서 값을 가져와서 넣어주세요. matchRate가 추가되었고, 결과를 MatchRate 속성에 저장하도록 했습니다.

            public override bool? Execute()
            {
                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\target.png"),
                    out double matchRate
                    );
    
                Result = !rect.IsEmpty;
                MatchRate = matchRate;
                return Result;
            }

     

    다시 프로젝트를 빌드하고, 라이브러리를 내문서 > NGM6 > ToolExtension에 복사하세요. 그리고, 엔지엠 매크로 에디터에서 다시 실행 해보세요. 매치율도 표시됩니다.

    PUeFjjr.png

     

     

    간단하게 이미지 서치 또는 이미지 매치 액션을 커스텀 모듈로 만드는 방법에 대해 알아봤습니다. 이외에도 다양한 방식으로 이미지 조건을 만들 수 있는데요. 다음에는 실제 사용자로부터 이미지를 받거나 캡쳐해서 이미지를 비교하는 방법을 알아볼께요. 그리고, 찾은 이미지를 어떻게 클릭하는지도 같이 학습하도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.