파이썬으로 스마트 폰 게임 자동화 ~ FGO 자동화 편 ~
개요
파이썬을 사용한 이미지 처리를 사용하여 스마트 폰 게임을 자동화합니다.
PC를 초기화했으므로 다시 설정합니다.
마지막 기사
htps : // 이 m/m_타니_주 ly/있어 ms/6691bc590693c3cf65cb
해설 동영상
나중에 동작 확인 동영상을 업로드하고 싶습니다.
동영상을 올렸습니다.
코드 소개
스마트 폰에서 이미지를 얻은 다음 템플릿 매칭하여 결과를 시각화 한 프로그램입니다.
def _click_image3_vis(temp_path):
###############################################################
# 画像取得
#
# テンプレート画像の読み込み
temp = cv2.imread(temp_path)
#
# スマホのキャプチャ画像
img = capture_screen_2(device_id)
#
# デバッグ用に一応保存
cv2.imwrite('_screen.png', img)
###############################################################
# デバッグ用
#
# img = cv2.imread('_screen.png')
# temp_path = r'img\fgo\arts.png'
# temp = cv2.imread(temp_path)
# cv2.imwrite('_screen.png', img)
result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
# 最も類似度が高い位置を取得する。
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)
# print(f"max value: {maxVal}, position: {maxLoc}, temp_path: {temp_path}")
# print("max value:{:6.3f}, position:{:<10}, temp_path:{}".format(maxVal, maxLoc, temp_path))
print("max value:{:6.3f}, position:{:>16}, temp_path:{}".format(maxVal, "{}".format(maxLoc), temp_path))
###############################################################
# 確認用描画セクション
#
# 読み込んだ画像の高さと幅を取得
kenel_size = 201
height = img.shape[0]
width = img.shape[1]
#
# =============================================================
# show resized base image
resized_img = cv2.resize(img,(int(width/2), int(height/2)))
cv2.imshow("image", resized_img)
cv2.moveWindow("image", 0, 0)
#
# =============================================================
# show heat map & roi
#
# create heat map
#
# 0.5 以下は無視
result[result<0.5] = 0
# 3 channel heat_map
heat_map = np.zeros((img.shape[0], img.shape[1], 3))
# result to heatmap
heat_map[0:-temp.shape[0]+1, 0:-temp.shape[1]+1, 2] = result
# heatmap GaussianBlur
heat_map_blur = cv2.GaussianBlur(heat_map,(kenel_size, kenel_size),0)
result2 = heat_map[:, :, 2]
#
# create gray image
resized_img_gray = resized_img.copy()
img_gray = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY) # RGB2〜 でなく BGR2〜 を指定
for i in range(3):
resized_img_gray[:, :, i] = img_gray
# temp image show
cv2.imshow("temp", temp)
cv2.moveWindow("temp", int(resized_img.shape[1]), 0)
# resized heat_map
resized_heat_map = cv2.resize(heat_map_blur,(int(width/2), int(height/2))) * 255
# resized heat_map
xheat = (resized_heat_map *255 * 0.6 + resized_img_gray * 0.4)/255
# detect peak
coordinates = peak_local_max(resized_heat_map[:, :, 2], min_distance=2)
# draw rectangle
color_ = np.array([102, 51, 255])/255 # RGB -> GBR
for p in coordinates:
cv2.rectangle(xheat, (p[1]+int(temp.shape[1]/2), p[0]+int(temp.shape[0]/2)), (p[1], p[0]), color_, thickness=1)
# show heat map
cv2.imshow("heat", xheat)
cv2.moveWindow("heat", 0, int(resized_img.shape[0] + 50))
k = cv2.waitKey(1)
결론
이번에는 adb 명령과 이미지 처리를 결합한 코드를 소개했습니다.
이것으로 자동 주회하는 프로그램을 할 수 있습니다.
향후는 다른 게임에의 대응이나 전략 알고리즘의 개발을 해 나갈 예정입니다.
다음 번
"파이썬으로 스마트 폰 게임 자동화 ~ 파이널 판타지 브레이브 엑스 비어스 (FFBE) 자동화 편 ~"
htps : // 이 m / m_타니_주 ly / 있고 ms / df81
Reference
이 문제에 관하여(파이썬으로 스마트 폰 게임 자동화 ~ FGO 자동화 편 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m_tani_july/items/98bddff824cecbf8a395
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def _click_image3_vis(temp_path):
###############################################################
# 画像取得
#
# テンプレート画像の読み込み
temp = cv2.imread(temp_path)
#
# スマホのキャプチャ画像
img = capture_screen_2(device_id)
#
# デバッグ用に一応保存
cv2.imwrite('_screen.png', img)
###############################################################
# デバッグ用
#
# img = cv2.imread('_screen.png')
# temp_path = r'img\fgo\arts.png'
# temp = cv2.imread(temp_path)
# cv2.imwrite('_screen.png', img)
result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
# 最も類似度が高い位置を取得する。
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)
# print(f"max value: {maxVal}, position: {maxLoc}, temp_path: {temp_path}")
# print("max value:{:6.3f}, position:{:<10}, temp_path:{}".format(maxVal, maxLoc, temp_path))
print("max value:{:6.3f}, position:{:>16}, temp_path:{}".format(maxVal, "{}".format(maxLoc), temp_path))
###############################################################
# 確認用描画セクション
#
# 読み込んだ画像の高さと幅を取得
kenel_size = 201
height = img.shape[0]
width = img.shape[1]
#
# =============================================================
# show resized base image
resized_img = cv2.resize(img,(int(width/2), int(height/2)))
cv2.imshow("image", resized_img)
cv2.moveWindow("image", 0, 0)
#
# =============================================================
# show heat map & roi
#
# create heat map
#
# 0.5 以下は無視
result[result<0.5] = 0
# 3 channel heat_map
heat_map = np.zeros((img.shape[0], img.shape[1], 3))
# result to heatmap
heat_map[0:-temp.shape[0]+1, 0:-temp.shape[1]+1, 2] = result
# heatmap GaussianBlur
heat_map_blur = cv2.GaussianBlur(heat_map,(kenel_size, kenel_size),0)
result2 = heat_map[:, :, 2]
#
# create gray image
resized_img_gray = resized_img.copy()
img_gray = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY) # RGB2〜 でなく BGR2〜 を指定
for i in range(3):
resized_img_gray[:, :, i] = img_gray
# temp image show
cv2.imshow("temp", temp)
cv2.moveWindow("temp", int(resized_img.shape[1]), 0)
# resized heat_map
resized_heat_map = cv2.resize(heat_map_blur,(int(width/2), int(height/2))) * 255
# resized heat_map
xheat = (resized_heat_map *255 * 0.6 + resized_img_gray * 0.4)/255
# detect peak
coordinates = peak_local_max(resized_heat_map[:, :, 2], min_distance=2)
# draw rectangle
color_ = np.array([102, 51, 255])/255 # RGB -> GBR
for p in coordinates:
cv2.rectangle(xheat, (p[1]+int(temp.shape[1]/2), p[0]+int(temp.shape[0]/2)), (p[1], p[0]), color_, thickness=1)
# show heat map
cv2.imshow("heat", xheat)
cv2.moveWindow("heat", 0, int(resized_img.shape[0] + 50))
k = cv2.waitKey(1)
이번에는 adb 명령과 이미지 처리를 결합한 코드를 소개했습니다.
이것으로 자동 주회하는 프로그램을 할 수 있습니다.
향후는 다른 게임에의 대응이나 전략 알고리즘의 개발을 해 나갈 예정입니다.
다음 번
"파이썬으로 스마트 폰 게임 자동화 ~ 파이널 판타지 브레이브 엑스 비어스 (FFBE) 자동화 편 ~"
htps : // 이 m / m_타니_주 ly / 있고 ms / df81
Reference
이 문제에 관하여(파이썬으로 스마트 폰 게임 자동화 ~ FGO 자동화 편 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m_tani_july/items/98bddff824cecbf8a395텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)