Python 을 사용 하여 점프 자동 점프 기능 을 실현 합 니 다.
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 도 구 를 설치 한 후 데이터 라인 을 통 해 안 드 로 이 드 폰 과 컴퓨터 를 연결 합 니 다.
마지막 으로 코드 를 실행 하면 직접 테스트 하 는 것 이 유효 합 니 다.
물론 코드 는 최적화 되 어야 합 니 다.다음 과 같 습 니 다~
한편 으로 는 점수 가 높 지 않 고,다른 한편 으로 는 부정행위 가 검출 된다.
총결산
위 에서 말씀 드 린 것 은 파 이 썬 을 사용 하여 점프 자동 점프 기능 을 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.