Python 을 사용 하여 점프 자동 점프 기능 을 실현 합 니 다.

1.   OpenCV:템 플 릿 일치 。    점프 센터 위치 획득
2.   OpenCV:테두리 검출 。    다음 사각형 중심 위치 획득

Python+ADB+OpenCv,'점프'자동 화 를 실현 합 니 다.
/ 01 / ADB
ADB 도 구 는 Android Debug Bridge(안 드 로 이 드 디 버 깅 브리지)tools 입 니 다.
ADB 는 컴퓨터 를 통 해 시 뮬 레이 터 나 실제 장치 와 상호작용 하 는 명령 행 창 입 니 다.
기 존 F 군 이 접촉 한 Appium 과 비슷 하 다.
ADB 의 설 치 는 매우 간단 하 다.즉,설치 패 키 지 를 압축 을 풀 고 경 로 를 시스템 의 환경 변수 에 추가 하면 된다.
그리고 Python 의 os 모듈 을 사용 하여 ADB 명령 을 수행 합 니 다.

def get_screenshot():
 #        
 os.system('adb shell /system/bin/screencap -p /sdcard/screencap.png')
 #                   
 os.system('adb pull /sdcard/screencap.png screencap.png')


def jump(distance):
 #       ,   1.35
 press_time = int(distance * 1.35)

 #              ,      
 #       (0-9),     (0-90)
 rand = random.randint(0, 9) * 10
 # adb    ,       ((320-410),(410-500))     press_time  
 cmd = ('adb shell input swipe %i %i %i %i ' + str(press_time)) % (320 + rand, 410 + rand, 320 + rand, 410 + rand)
 #   adb  
 print(cmd)
 #   adb  
 os.system(cmd)
이번에 언급 된 ADB 명령 은 세 개 뿐 많 지 않다.
하나의 캡 처,하나의 푸 시 휴대 전 화 를 컴퓨터 에 캡 처 하고 마지막 으로 모 의 장 으로 휴대 전화 화면 을 누른다.
/02/점프 실현
게임 종료 화면 부터 확인 해 봐.
게임 프로그램 을 끝내 야 할 지 여 부 를 판단 하 다.

#          
temp_end = cv2.imread('end.jpg', 0)
def game_over(img):
 """     ,           """
 #             "    "     ,     
 res_end = cv2.matchTemplate(img, temp_end, cv2.TM_CCOEFF_NORMED)
 if cv2.minMaxLoc(res_end)[1] > 0.95:
 print('Game over!')
 return True
템 플 릿 일치 원리 도 는 다음 과 같다.

돌아 오 는 최대 행렬 값 이 0.95 보다 크 면 원본 이미지 에 한 판 더 하 는 글자 가 나 올 것 이 라 고 생각 합 니 다.
게임 이 끝나 면 프로그램 도 끝난다.
작은 바둑 의 템 플 릿 일치 코드 는 다음 과 같다.
주로 점프 바둑 의 위치,즉'점프 점프'의 기점 위치 파 라미 터 를 얻는다.

#          
temple = cv2.imread('temple.png', 0)
#              
th, tw = temple.shape[:2]
def get_start(img):
 """     ,            (   ) """
 #           ,1      ,-1       ,0         
 result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)
 #     minMaxLoc,                (val),       (loc)
 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
 #             
 return max_loc[0] + 47, max_loc[1] + 208
결 과 는 다음 과 같다.

다음은 OpenCV 의 가장자리 검 사 를 통 해'점프'의 종점 위 치 를 가 져 옵 니 다.

def get_end(img):
 """     ,            (  ) """
 #     
 img_rgb = cv2.GaussianBlur(img, (5, 5), 0)
 #     
 canny_img = cv2.Canny(img_rgb, 1, 10)
 #             
 H, W = canny_img.shape

 #         
 y_top = np.nonzero([max(row) for row in canny_img[400:]])[0][0] + 400
 #         
 x_top = int(np.mean(np.nonzero(canny_img[y_top])))

 #      ,    
 y_bottom = y_top + 80
 for row in range(y_bottom, H):
 if canny_img[row, x_top] != 0:
  y_bottom = row
  break

 #         
 x_center, y_center = x_top, (y_top + y_bottom) // 2
 return x_center, y_center
테두리 검출 원리 도 는 다음 과 같다.

마지막 이 메 인 프로그램 이 야.

#           
for i in range(10000):
 #                    
 get_screenshot()
 #       
 img = cv2.imread('screencap.png', 0)

 #     
 if game_over(img):
 break

 #         
 x_start, y_start = get_start(img)
 #         
 x_end, y_end = get_end(img)

 #          ,   
 cv2.circle(img, (x_start, y_start), 10, 255, -1)
 #          ,   
 img_end = cv2.circle(img, (x_end, y_end), 10, 255, -1)
 #     
 cv2.imwrite('end.png', img_end)

 #             ,      
 distance = (x_start - x_end) ** 2 + (y_start - y_end) ** 2
 distance = distance ** 0.5

 #               
 jump(distance)
 time.sleep(1.3)
다음은'점프'자동 점프 영상 을 살 펴 보 겠 습 니 다.
가볍게 득점 을 느슨하게 하 는 것 은 문제 가 없다.
/03/총괄
관련 도구 와 코드 가 이미 네트워크 디스크 에 업로드 되 었 으 며,공중 번 호 는'점프'라 고 대답 하면 얻 을 수 있 습 니 다.
ADB 도 구 를 설치 한 후 데이터 라인 을 통 해 안 드 로 이 드 폰 과 컴퓨터 를 연결 합 니 다.
마지막 으로 코드 를 실행 하면 직접 테스트 하 는 것 이 유효 합 니 다.
물론 코드 는 최적화 되 어야 합 니 다.다음 과 같 습 니 다~

한편 으로 는 점수 가 높 지 않 고,다른 한편 으로 는 부정행위 가 검출 된다.
총결산
위 에서 말씀 드 린 것 은 파 이 썬 을 사용 하여 점프 자동 점프 기능 을 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기