naver / guitar

76 stars 18 forks source link

좌표문의드립니다. #377

Closed jinso84 closed 6 years ago

jinso84 commented 6 years ago

해당 위치에 특정값이 들어오면 함수를 호출하게 스크립트를 구현중입니다. 위치 좌표관련 내용을 찾아보니 x,y,가로, 세로 값을 나타내는 것 같은데 구현방식이 잘 이해가지 않습니다. 부분작업대상. Q&a 에 관련 내용은 다 찾아봤구요. 일단 제가 구현했던 방식은. 특정 이미지로 마우스를 이동한다. "$GUITAR_최근X좌표 | + 10, $GUITAR_최근Y좌표 | - 50, $GUITAR_최근X좌표 | + 100, $GUITAR_최근Y좌표 | + 50" 로 이동한다. 였는데... 마우스가 이동하지도 않을뿐더러, 해당 위치에 0인값을 찾아서 비교를 해야하는데 어떤식으로 해야할지 이해가 가지 않습니다. 비교해야할 대상은 총 11개. 0인값과 비교를 해야하는 상황입니다. 지원부탁드립니다.

추가로
1) x좌표가 동일하고y칸이 다른 바로 아래칸의 이미지를 캡쳐해보면, x좌표가 동일해야하나, 캡쳐한 좌표는 미묘하게 3-4정도 다르게 나옵니다.

2) 이미지 비교를 위해 같은 이미지 하나를 이미지1/ 이미지2 이렇게 변수를 지정하고 변수화시켜 "$대상1= Target1" 설정한다. "$대상2= Daesang" 설정한다.

"$대상1 = $대상2" 같으면 "Email"를 클릭한다. 라고 스크립트를 짜봤는데 정상적으로 인식하지 못합니다. 이미지는 동일하고 좌표는 약간 다르게 저장이 되긴했습니다만... 구해야 하는게 이미지랑 좌표화된 이미지 두건이라,, 이미지 비교도 어떻게 풀면 좋을지 문의드립니다.

ssmmhh commented 6 years ago

"이동" 명령은 좌표를 기반으로 하지 않습니다. 때문에 반드시 "이동" 명령은 대상을 이미지로 지정하셔야 합니다. 이미지를 기준으로 기반으로 약간 다른 위치로 마우스를 이동하고자 한다면 템플릿 예제 처럼 $GUITAR_AdjustXPos를 이용하여 클릭할 좌표값을 변경한뒤 해당 "이동" 명령을 쓰시면 됩니다.


$GUITAR_AdjustXPos=50 설정하고 국어사전질문이미지를 클릭한다.

추가 문의하신 1번의 경우 이미지를 포함해서 좀더 자세한 설명을 해주셔야 할것 같습니다. 글내용만으로는 이해가 되지 않습니다. 스크립트 내용과 화면이미지를 같이 보내 주세요.

추가 문의하신 2번의 경우 "같으면" 명령은 이미지 기반이 아닌 값 (숫자나, text) 기반이기 잘못 사용한 예 입니다.

테스트가 진행중인 상태에서 실시간으로 이미지를 캡쳐하고 해당 이미지가 현재 화면에 있는지를 라이브로 확인하려면 "41.캡쳐이미지검색.txt" 샘플 예제를 참고하세요.

jinso84 commented 6 years ago

음 ..약간 다른의미인데, 저는 캡쳐가 아니라,이미지대 이미지로 비교를 원하는겁니다. 눈으로 보기에 같은 이미지를 이름만 다르게 2개로 따로 지정한후, 이미지1=이미지2 이 같은지 비교를 하고 싶은건데요. 이미지1,이미지2는 내용물은 같고 이름만 다르게 지정한것이므로, 스크립트상에서 같다고 나와야 하는데도 불구하고, 각각을 다른이미지로 인식하더라구요. 한건을 부분캡쳐해봐도 동일합니다.(상대좌표를 이용해서 부분캡쳐 사용후, 이미지 비교 ->상대좌표의 이미지는 변수로 지정이 불가능한가요?)

이미지 비교가 부분캡쳐한후에만 가능한지, 가능하다면 부분캡쳐한후, 해당 항목을 변수에 지정해놓고, 기존에 저장되어있는 다른이미지랑 비교하려면 어떤식으로 스크립트를 짜야하는지 문의드립니다. 이미지 비교가 안되는건 아니지요? 비교하려는 목적은 항상변하는 값과, 고정적인 정상값 두건을 비교하려고 하는것입니다.

그리고 답변주신대로, 이동명령이 좌표를 기반으로 하지 않는다면, 최초 어떤 이미지를 선택하려고 할때 좌표만으로는 해당 이미지를 찾기 어렵다는 말씀을 하시는건지요? 좌표만으로 찾기 어렵다면, 어떤 이미지를 클릭하고, 그 이미지 주변의 바운더리를 설정하고 해당 항목에 대한 값들중 찾으려는 이미지가 있는지 찾는 건 가능한지 문의드립니다. 사실 이미지가 아니라 값을 기준으로 찾고 싶은건데,,,그게 불가능하다고 하셔서 재문의드립니다. (백분율 좌표및 절대좌표로 클릭할수 있는거 아닌가요? ex)상대 및 절대 위치를 직접 지정하여 클릭하는 예제)

그리고 댓글에 적어놓으신 http://dev.naver.com/projects/guitar/tip/70655 이런 링크는 어떻게 들어갈수 있나요 링크 클릭시 https://developers.naver.com/main/ 로만 들어가고 가입해도 찾을수가 없습니다.

ssmmhh commented 6 years ago
  1. GUITAR에서 이미지 파일과 이미지 파일을 서로 비교하는 기능은 제공하지 않습니다. "확인" 명령은 이미지와 테스트 대상을 비교하는 명령입니다. "같으면" 기능은 Text를 비교하는 기능입니다. 원하시는 이미지 파일 비교하는 기능이 필요하다면 GUITAR에서 별도의 외부 프로그램을 실행하거나 해서 결과값을 얻어 사용하셔야 할것 같습니다. https://www.google.co.kr/search?source=hp&q=file+compare+command+line&oq=file+compare+command+line&gs_l=psy-ab.3..0i19k1l2j0i5i30i19k1l2.722.722.0.1006.1.1.0.0.0.0.118.118.0j1.1.0....0...1..64.psy-ab..0.1.117....0.9z-jed4OK8M

혹은 캡쳐한 이미지를 이미지 뷰어로 열고, 해당 이미지 뷰어를 "테스트대상" 으로 지정해서 해당 원하는 이미지가 있는지 보셔도 될것 같습니다.


$임시이미지=임시확인용이미지 설정한다. "450,280,490,330,|$임시이미지|" 부분캡쳐 한다. "$파일열기=Shellexecute('|$GUITAR_ReportPath|\capture|$임시이미지|.png')" 계산

  1. 이미 답변 드린것 같이 캡쳐된 이미지를 테스트 스크립트에서 재활용하는 방법은 "41.캡쳐이미지검색.txt" 샘플 예제를 참고하세요.

  2. "그리고 답변주신대로, 이동명령이 좌표를 기반으로 하지 않는다면, 최초 어떤 이미지를 선택하려고 할때 좌표만으로는 해당 이미지를 찾기 어렵다는 말씀을 하시는건지요?" 질문에서 "선택"이란 용어가 클릭을 의미하는것인지요? "이동 명령에서는 선택이나 클릭이 의미가 없습니다. 단순 마우스 포인터만 이동하는것이기 때문입니다. "이동" 명령에서 사용되는 최종 좌표는 내부적으로 GUITAR가 이미지 검색시 찾은 좌표로 이동하게 되며, 해당 좌표를 나중에 스크립트에서 재활용하기 위해서는 . "$GUITAR_RecentXPos" 및 . "$GUITAR_RecentYPos" 시스템 변수를 활용하시면 됩니다.

  3. 특정 영역을 지정해서 해당 영역에서만 원하는 이미지가 있는지 확인하려면 "부분대상작업" 명령을 같이 사용하시면 됩니다. (사용자 메뉴얼을 참고하세요)

  4. 테스트 대상을 기준으로 절대좌표나, 전체영역을 100분율 해서 클릭할수 있습니다. 예) "20%,80%" 위치탭 한다. "50,20" 위치탭 한다. (자세한 내용은 사용자 메뉴얼을 참고하세요) 이러한 명령들은 사실 모바일 대상으로 스와이프나, 스크롤, 또는 패닝을 위해 제공되는 명령입니다. 이런것들을 단순 클릭에도 사용할수 있으나, 클릭하는 곳에 내가 원하는 이미지나 대상이 맞는지 사전에 확인해야만 클릭하는것이 의미가 있습니다. 만약 100,100 을 클릭하라고 스크립트에 되어 있다면 테스트 시점에 100,100에 무엇이 있는지를 알지 못하는 상태에서 그저 클릭만 하도록 한다면, 예기치 않은 작동으로 이어질수 있습니다. 그렇기 때문에 항상 원하는 위치에 무엇이 있는지를 우선 알아야 하기 때문에 절대좌표를 사용하는것 보다는 이미지를 대상으로 클릭하거나, 이동명령을 하는것을 권장해 드리는것 입니다.

  5. http://dev.naver.com/* 는 예전 github를 사용하기 전에 사용하던 개발자 포탈 사이트 이며, 현재 모든글은 그대로 github로 이전되어 왔습니다. 현재 해당 사이트를 종료된 상태 입니다. 이전시 게시물 링크까지는 복원되지 않았기 때문에 해당 링크로는 원하시는 게시물로 접근이 어렵습니다. 대신 "검색" 기능으로 검색해 보시면 대부분 원하는 글이 있는 것을 쉽게 찾아 보실수 있습니다.

jinso84 commented 6 years ago

친절한 답변 감사드립니다... 결국 이방법 저방법하다 잘 안되서 최종적으로 범위 구간을 잡아서 특정 이미지가 있으면 메일보낸다. 로 결정했는데요. Search_title을 확인한다. -> 이미지 기준 "|$GUITAR_RecentXPos| + 253,|$GUITAR_RecentYPos| + -45,|$GUITAR_RecentXPos| + 318,|$GUITAR_RecentYPos| + 69" 부분대상작업으로 "No1" 확인한다. "No1" 있으면 "CP_Mail(D)"를 실행한다 이렇게 스크립트를 잡았는데, 부분대상작업부분에서 자꾸 이미지찾기 오류가 뜹니다.

"|$GUITAR_RecentXPos| + 253,|$GUITAR_RecentYPos| + -45,|$GUITAR_RecentXPos| + 318,|$GUITAR_RecentYPos| + 69" 이부분은 캡쳐기능을 사용한 상대좌표로, 구간을 드래그해서 잡은 좌표입니다. (No1은 찾아야 하는 이미지) 어떤부분이 잘못된것인지 다시 문의드립니다. 다시한번 답변에 감사드립니다.

ssmmhh commented 6 years ago

"|$GUITAR_RecentXPos| + 253,|$GUITAR_RecentYPos| + -45,|$GUITAR_RecentXPos| + 318,|$GUITAR_RecentYPos| + 69" 부분대상작업으로 "No1" 확인한다. "No1" 있으면 "CP_Mail(D)"를 실행한다

-->

"|$GUITAR_RecentXPos| + 253,|$GUITAR_RecentYPos| + -45,|$GUITAR_RecentXPos| + 318,|$GUITAR_RecentYPos| + 69" 부분대상작업으로 "No1" 있으면 "CP_Mail(D)"를 실행한다

jinso84 commented 6 years ago

부분작업대상에서 찾는 이미지는 부분작업 대상 좌표 구간안에 있는 이미지여야만 하나요? 예를 들어 부분작업대상이(100,150,150,200)일경우 그 안에 xy좌표가 있는 이미지여야만 받을수 있나요? 좌표없는 이미지를 놓고, 해당 이미지가 부분작업대상구간안에 있는 이미지랑 동일할경우를 찾을수 있는 방법은 없는지요? 예를 들어 작업구간은 (100,150,150,200) 찾는 이미지 실제좌표는(200,300) 인경우 기타에서는 해당 이미지를 찾을수 없는건가요? 시각적으로는 동일한 이미지로 구현은 될 예정입니다만...

ssmmhh commented 6 years ago

"부분작업대상에서 찾는 이미지는 부분작업 대상 좌표 구간안에 있는 이미지여야만 하나요?" -> 네, 당연히 해당 영역안에서만 찾게 됩니다. (이미지 파일명 좌표는 의미 없는것임으로 혼동하지 마시기 바랍니다. 하단 답변참고)

혹시 이미지 캡쳐시에 파일에 자동으로 붙는 ,Y 좌표값을 얘기하시는것인지요? 해당 값은 이미지를 빨리 찾기 위한 참조값일뿐 실제 이미지를 찾는 구역과는 상관없습니다. 예를 들어 캡쳐는 10,10 부근에서 했지만, 다음 화면에는 100,100에 있다면 자동으로 그곳에서 찾게 됩니다. 캡쳐 시점에 파일명에 붙는 좌표값은 그냥 참고 값이라고만 생각하시면 됩니다.

"좌표없는 이미지를 놓고, 해당 이미지가 부분작업대상구간안에 있는 이미지랑 동일할경우를 찾을수 있는 방법은 없는지요?" -> 이미지 파일명에 붙는 좌표는 대상을 찾는데 아무런 영향을 주지 않습니다. (위설명과 같음) 이미지가 동일하고 부분대상영역안에만 있다면 잘 찾습니다.

"작업구간은 (100,150,150,200) 찾는 이미지 실제좌표는(200,300) 인경우" -> 당연히 찾지 못합니다. 실제 찾을수 없는 영역을 작게 지정하셨기 때문에 실제 200,300에 존재하는 이미지는 찾지 못합니다. 부분대상 영역을 실제 찾고자 하는 부분까지 늘려 주셔야 합니다.

jinso84 commented 6 years ago

답변 너무 감사드립니다. 이미지 캡쳐시 붙는 좌표값이 참조값이라면 해당 이미지의 구역이 어딘지는 어떤방식으로 찾을수 있나요? 저는 이미지에 붙는 좌표가 실제 좌표라고 생각하고 구간을 지정하고 있었는데요. 이미지랑 구간의 실제 값을 찾으려면 어떤방식으로 진행해야하는지요? 전 캡쳐시 보이는 좌표로만 생각을 했었는데;;; 상대좌표의 경우도 찍은 이미지에서 시작되는거 아니었나요? 참조값과 실제값의 개념이 헷갈립니다.ㅠㅠ

ssmmhh commented 6 years ago

일반적으로 테스트 시 실제 이미지가 절대좌표가 얼마인지를 알 필요는 없습니다. 테스트 할때 마다 달라질수 있고, UI변경에 따라 달라질수 있기 때문에 상대좌표로 GUITAR가 찾아 주는 위치를 그대로 쓰면 됩니다. 절대 좌표를 사용하게 되면 전혀 의도하지 않게 스크립트가 작동됩니다. 제대로 된 결과를 원하신다면 현재 화면에 표시된 특정 이미지 기준으로 상대적으로 좌표를 지정해서 원하는 작업을 하시면 됩니다.

미지를 클릭하는게, 아니고, 특정 영역을 지정해서 해당 부분에서만 찾고자 하거나, 찾은 이미지의 중앙이 아닌 옆을 클릭하는등 특별한 경우가 있을수 있는데, 이런 경우에는 "최근 사용(찾은)한 이미지" 기준으로 상태값 만큼 크기(좌표)를 지정해서 사용하실수 있습니다. 이러한 경우에 상대좌표를 사용하시면 됩니다.

상대좌표에 대한 개념과 스크립트에서 사용하는 방법은 "5.1.6 상대좌표" 사용자 메뉴얼에 자세히 나와 있습니다. "6.1.6 부분캡쳐 (AreaCapture)" 부분도 참고해서 보시기 바랍니다.

아래와 같이 최근 사용한 이미지의 좌표값은 시스템 변수로 읽어와 사용하실수 있습니다.

----->

네이버로고를 확인한다. "$GUITAR_RecentXYPos" 로그쓰기 한다.

다음로고를 확인한다. "$GUITAR_RecentYPos" 로그쓰기 한다. "$GUITAR_RecentXPos" 로그쓰기 한다.

jinso84 commented 6 years ago

답변감사드립니다. 상대좌표개념은 이해갔으나, 아직도 풀리지 않는 부분이 존재합니다. 특정이미지를 확인한다. (변수정보: GUITAR_RecentXPos=579. $GUITAR_RecentYPos=294) "|$GUITAR_RecentXPos| + 254 ,|$GUITAR_RecentYPos| + -95 ,|$GUITAR_RecentXPos| + 319,|$GUITAR_RecentYPos| + 95" 부분캡쳐한다. (부분캡쳐기능을 사용해 찾으려고 하는 범위의 좌표를 설정함) 좌표확인후 "|$GUITAR_RecentXPos| + 254 ,|$GUITAR_RecentYPos| + -95 ,|$GUITAR_RecentXPos| + 319,|$GUITAR_RecentYPos| + 95" 부분대상작업으로 "gom_투명" 있으면 $정상여부=False 설정한다. 로 해당 범위내에있는 이미지를 캡쳐해서 gom_투명이라는 이름으로 지정했는데 못찾음. (실제 해당 범위구간은 좌표정보 X1=833, Y1=199, X2=898, Y2=389 가 되고, 저장된 이미지는 gom투명[836.369.064.020] 으로 지정되어있네요.

부분대상이나 범위구간하지 않고 해당이미지를 확인한다. 기능은 잘 동작되는데요. 범위안에 있는 대상을 캡쳐했을때 왜 해당이미지를 왜 못찾는것인지 궁금합니다.

레포트는 아래와 같이 나와있습니다. 범위안에 분명히 들어가는것 같은데요. 변수정보 : $GUITAR_RecentXPos=579. $GUITAR_RecentYPos=294. $GUITAR_RecentXPos=579. $GUITAR_RecentYPos=294 좌표정보 X1=833, Y1=199, X2=898, Y2=389 대상 찾기 : gom_투명 조건 : 불만족 이게 풀리면 테스트 끝인데.ㅠㅠ 지원 부탁드립니다.

ssmmhh commented 6 years ago

스트립트 내용만으로는 조언을 드리기 어려울것 같습니다. 문제가 발생한 화면과 실제 사용한 스크립트+이미지를 보내 주시면 확인해서 알려 드리겠습니다.