매크로

조회 수 1043 추천 0 댓글 13

안녕하세요

이미지서치 쪽으로 응용이 가능하거나 혹은 다른방법으로 가능한지 여쭈어볼려고 글을 적습니다.


제가 찾아야할 이미지가 숫자인데요.

총 10개의 숫자가 무작위 순서로 생성이 됩니다

모양이 찌그러지거나 비틀어지지는 않습니다.

모양은 일정합니다.


여기서 문제점이 있는데.

첫번째는 숫자가 완전한 불투명 이미지가 아니고 약간 투명한 이미지입니다.


그리고 두번째는 색상이 다양하게 바뀌는데요.

처음에는 30가지 정도의 색상인줄알았는데 이미지서치가 안될때마다 스크린샷을 찍어서 확대해서

픽셀단위로 색깔을 비교해보니 원래 색상에서 조금 연하거나 진하게도 색상이 바뀌더라구요.

이런색상까지 지금 일일이 다 캡쳐해서 만들어 볼려고했는데

약간 투명한 상태에서 색상까지 종류가 많아서 

대충 어림잡아도 200가지 이상 색이 나올꺼 같은데 1부터 0까지 총 10개종류의 숫자가 200가지 색상이 있으면 

2000개의 이미지를 서치해야 하는데 10종류의 10개의 숫자를 입력해야 되는시간이 10초도 안되서

제한시간안에 서치를 하고 입력까지 하기에는 무리가 있어 보이더라구요.


예전에 질문을 올려서 답글을 주신내용에 OCR쪽을 이용해보라고 권하셔서 그쪽을 알아봤는데

재대로 인식이 되지않고 속도도 느려서 이미지 서치쪽으로 만들어볼려고 방향을 잡았는데 

현재 위와같은 문제가 생겼습니다.


래서 혹시 이미지 서치를 할때 아래의 그림처럼 틀을 만들어서

검은색부분은 transblack로 처리를 하고

흰색부분인 숫자 "7" 부분을 어떤색상이 오더라도 "7"이라는 이미지로 인식이 되게 할수있나요? 

https://i.imgur.com/ZYzffNp.png


이미지 서치가 안된다면 다른쪽으로 가능한 방법이 있는지 알고싶습니다.

작은 힌트라도 답글 달아주시면 정말 감사하겠습니다.


  • profile
    모노레인 2016.03.18 08:50
    반투명에 좌표도 바뀌면 OCR 도 어렵겠네요
  • 뎅뎅 2016.03.18 11:21

    그나마 다행인것이..
    네모난 칸안에 숫자가 나오는데 네모난칸은 불투명이 이여서
    칸 왼쪽위 모서리만 찾은뒤 OutputVarX,Y 변수 를 기준으로
    각 칸마다 찾아야할 위치는 정확히 다 잡은상태입니다.

    그리고 그 칸마다 숫자 10개와 색상별로 이미지를 다 준비해서 만들었는데...
    위에쓴 글처럼 제가 인식안되는 이미지를 캡쳐해보니 지금 색깔만 약 50가지가 넘어갔네요..
    숫자가 10개이니 지금 이미지파일만 500장정도인데

    현재 이미지 서치는 아래 스크립트 처럼 해놨고
    이미지파일은 1001.png로 폴더에 저장을 해놓았습니다.
    (제일 첫번째 숫자는 "1" 이라는 이미지를 나타난 숫자이고 뒤에 3자리 숫자는 색상 순서 번호입니다.)

    제일 마지막에 "숫자1" 이라는 변수에 찾은 이미지파일의 이름이 저장이 되면
    StringLeft 를 이용해서 제일 첫글자만 뽑아서 파일명이 1 로 시작하면
    if문을 사용해서 1을 입력하게 해놓은상태입니다.



    Loop, %A_ScriptDir%\이미지\숫자\*.PNG
    {
    ImageSearch,,,%x100%,%y100%,%x1000%,%y1000%, *Transblack *%sd% %A_ScriptDir%\이미지\숫자\%A_LoopFileName%
    숫자1:=A_LoopFileName




    이미지파일만 해결이 된다면 정말 모든문제가 풀리는데 너무 어렵습니다 ㅜㅜ

    인식율쪽을 건들여 보고있는데 위에 쓴 글처럼 색상만 더 인식 시킬수있게 할수없는지 궁금하네요
    혹시라도 제가 만든 스크립트외에 다른 방법이 있으시다면 조금만 힌트라도 주시면 감사하겠습니다

  • profile
    모노레인 2016.03.18 11:25
    이미지를 그래이 스케일로 변환하는건 어떨까요?
    방법은 모르겠지만, 그러면 좀 줄어들지 않을까요?
    그 뒤에 오차 범위를 좀 높이면..
  • 뎅뎅 2016.03.18 12:08

    아.. 그레이스케일도 전에 답글 달아주셔서 꼼꼼히 찾아봤는데
    제가 찾아서 시도를 해봤을때 10초정도되는시간에 찾아서 입력하기에는 조금 느린거 같더라구요..
    숫자가 뜨는 화면을 프로그램을 써서 창 위를 덮어서 그냥 흑백으로 나오게도 해봤는데
    프로그램을 사용하니 전체적으로 너무 느려져 시간제한이 있는데 사용하기 어렵웠습니다.
    그래도 말씀하신데로 서치쪽은 확실히 오차가 줄기는 했습니다.

    그리고 아직 시도는 따로 안해보았지만 nvdia 그래픽 카드 설정에 아래그림의 빨간 네모칸을 0%로 만들면

    모든 화면이 그레이 스케일이 된거처럼 되는데 이 방법을 사용을 하면 다른작업을 할수가없어서

    나중에 라도 이 방법을 사용을 한다면 더블모니터를 사용하고 한쪽 화면만 그레이스케일을

    적용시킬수 있을지 여러모로 생각이 많네요.

    https://i.imgur.com/PFGJD7N.png



    이런 프로그래밍 쪽은 오토핫키가 처음이고
    오토핫키를 다시 시작해서 배운지 얼마 안되서
    제가 실력이 모자라서 이것밖에 못하는 것일지도 모른다는 생각도 듭니다.

    좋은 의견 주셔서 감사합니다.
    더 노력해 보겠습니다.

  • profile
    와이로 2016.03.18 14:03
    한번 숫자이미지가 나오는 상태의 해당화면의 스샷을 올려보세요.
  • 뎅뎅 2016.03.19 00:49
    디지털 바이브런스를 0% 맞추고 캡쳐를 한뒤 다시 50% 맞추고
    0%일때 캡쳐한 이미지를 봤는데 색깔은 그대로 나오더라구요.
    그냥 제 모니터 화면만 그레이스케일이 된거고 실제로는 색상이 그대로 있네요.
    소용없는 방법이였습니다. ㅜㅜ

    와이로님 혹시 댓글을 달아주셧다가 지우시고 새로 쓰셧나요???
    지워지기 전에 써주신 글이랑 링크보고 제가 가장 찾고있던 걸 가르쳐주셔서
    감사의 말씀이라도 적을려고했는데 올려주신 링크를 보고 공부하는 사이에
    글이 삭제가 되어서 말씀도 못드렸네요.

    전에 적어주신 ColorReplace 쪽으로 시도를 해보면 될꺼같아서요.

    좋은가르침 감사드립니다.
  • profile
    와이로 2016.03.19 11:58

    아래 이미지는 제가 지금 하는 크리스탈하츠의 영웅레벨이 표시되는 부분입니다. 레벨숫자가 약하게 그라데이션 처리되있어서 일반적인 이미지서치만으로는 인식하기 애매합니다. 이걸 아래처럼 색상 단순화만 해줘도 OCR 이나 이미지서치로 검색하기 쉬워집니다.

    https://i.imgur.com/6HMnUp6.png

     

    처리방식은 0xFFFFFF 색값을 기준으로 공차값 180(0~255) 범위 내의 색상은 흰색으로 그외 색상은 적색으로 바꾼것입니다.

    어제말씀드린 ColorReplace() 를 사용한것이니 참고해보세요.

     

     

     

  • 뎅뎅 2016.03.19 14:23
    흐헛.. 좋은정보 감사합니다.
    열심히 공부해서 적용해보겠습니다.
  • 힘들지말입 2018.01.31 02:03
    안녕하세여 해당 색상 체인지 부분 검색하다가
    왔는데
    아직 활동중이신지 모르겠네요
    혹시
    컬러변환부분 정보좀 얻을수있을까요?
    검색해도 안나와서..
  • profile
    와이로 2018.02.01 16:48
    https://autohotkey.com/boards/viewtopic.php?f=6&t=6517

    Gdip 라이브러리안에 보면 픽셀 색상을 얻어오거나 설정하는 함수가 있습니다.
    이걸 이용해서 색상비교후 특정색상 오차범위 안이면 흰색, 그외에는 검은색 등으로 색상을 단순화 시킬수가 있습니다.

    Gdip_GetPixel(pBitmap, x, y)
    {
    DllCall("gdiplus\GdipBitmapGetPixel", A_PtrSize ? "UPtr" : "UInt", pBitmap, "int", x, "int", y, "uint*", ARGB)
    return ARGB
    }

    Gdip_SetPixel(pBitmap, x, y, ARGB)
    {
    return DllCall("gdiplus\GdipBitmapSetPixel", A_PtrSize ? "UPtr" : "UInt", pBitmap, "int", x, "int", y, "int", ARGB)
    }
  • 힘들지말입 2018.02.02 06:37
    감사합니다
    혹시 화면에서 창이나 메시지박스가 표시되자마자 바로 화면에서 색단순화를 시킬수 있던데
    (단순화 되어 보이게화면에)
    Gdip로 가능하나요?
    어떻게 인식하는지 개념 이해가 잘안가서요


    감사합니다
    좋은 하루 시작하세요!
  • profile
    와이로 2018.02.02 18:47

    단순화된 이미지를 가지고 이미지서치를 하시려면 Gdip_ImageSearch()라는 별도 함수를 이용하셔야 합니다.

    1. 단순화가 필요한 윈도우를 비트맵으로 캡춰 - Gdip_BitmapFromHWND()
    2. 캡춰한 이미지의 픽셀값 비교후 단순화
    3. 단순화시킨 이미지를 대상으로 이미지 서치 - Gdip_ImageSearch()

    Gdip 픽셀값으로 전체 이미지를 변환하는 방식을 오래전에 한번 써보고 처리속도가 느려서 안써본지 오래라 아쉽게도 관련된 예제가 없네요. 현재는 개인적으로 튜닝한 오토핫키 프로그램에 관련기능을 별도 명령어로 추가해서 사용중이라서요.

  • lipos 2019.03.14 23:55
    좋은 정보 감사합니다 참고가 되네요

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 원클릭 블루스택 해상도 설정 방법 4 파랑상 2016.03.12 0/0
질문 gui 드롭다운리스트 질문드려요 6 쵸쵸 2016.03.05 0/0
질문 외치기님이 올려주신 푸쉬블엣을 오핫이용해서 사용중... 3 지니블렉션 2016.03.29 0/0
질문 루프에서 변수값 호출에 관한 질문입니다 ㅠ 2 화프 2016.04.04 0/0
질문 오토핫키는 생성자 같은거 없나요? 3 reavil 2016.03.12 0/0
질문 SendMessage 또는 PostMessage 로 Gui를 Disable이 가... 1 타치코마 2016.03.10 0/0
자유 [ 메이플 ] 매크로 사용 가능여부 1 알씨다이 2016.03.16 0/0
질문 postmessage에서 인자로 쓰이는 윈 타이틀 2 우리유미씨 2016.03.26 0/0
질문 USB 고유코드가져오는코드인데 문법좀 바꿔주세요. 3 cjh71 2016.03.11 0/0
질문 함수안에서 다른 함수를 호출할 수 있나요? 3 거룩한검 2016.03.13 0/0
질문 이미지를 계속 누르고 있게할 방법이 있나요? 2 난느려 2016.03.29 0/0
질문 이미지 비교 질문 2 풍운대사 2016.03.11 0/0
질문 숫자이미지를 ocr로 안되는데 혹 다른 방법 있을까용?? 2 오켕 2016.03.13 0/0
자유 블택2 비활성클릭 성공하신분 잇으신가요 .. 4 미천성 2016.03.30 0/0
질문 화면에 웹브라우져 여러개 띄우고 각각 다른 프록시를 ... 1 오켕 2016.03.29 0/0
질문 adb서치 질문 1 fnwj 2016.03.16 0/0
질문 비활성 문자입력&붙여넣기 질문드려요 1 띨빵큐라 2016.03.29 0/0
질문 Gdip문의 4 fnwj 2016.03.17 0/0
질문 이미지 서치 도움좀 부탁드립니다. 13 뎅뎅 2019.08.17 0/0
질문 불규칙적으로 움직이는 이미지 파일 가리는방법이 있을... 1 개멍멍멍 2016.03.20 0/0
Board Pagination Prev 1 ... 777879808182838485 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글