Skip to content

noitaro/android-auto-play-opencv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 

Repository files navigation

android-auto-play-opencv

OpenCV の画像認識を使って、Android を自動操作するライブラリです。

Android を操作する時に Android Debug Bridge (adb) を使うので、マウスカーソルが奪われません。

NoxPlayer を操作することも出来ます。

Readme

https://noitaro.github.io/android-auto-play-opencv/

Installation

  • ライブラリのインストール
pip install android-auto-play-opencv

How to use

# This Python file uses the following encoding: utf-8

# pip install android-auto-play-opencv
import android_auto_play_opencv as am

adbpath = '..\\platform-tools\\'

def main():

    aapo = am.AapoManager(adbpath)
    
    while True:
    
        # 画面キャプチャ
        aapo.screencap()
        
        # 早送りボタンは常にタップ
        if aapo.touchImg('./umamusume/hayaokuri.png'):
            # タップ出来たら待機
            aapo.sleep(1)
    
        # Google Playダイアログが出たら、キャンセルの位置をタップ
        elif aapo.chkImg('./umamusume/google-play.png'):
            aapo.touchPos(135, 630)
            aapo.sleep(1)

if __name__ == '__main__':
    main()

完成品

Reference

start

アプリを起動する。

# FGOを起動する.
aapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')

end

アプリを終了する。

# FGOを終了する.
aapo.end('com.aniplex.fategrandorder')

sleep

処理を待機させる。

# 5秒待機.
aapo.sleep(5)

screencap

Android の画面をキャプチャする。

# 画面キャプチャ
aapo.screencap()

chkImg

screencap で取得したスクリーンショットに、テンプレート画像があるか確認します。タップはしません。

if aapo.chkImg('./template/stage_clear.png'):
    # あった時の処理.
    pass

chkImg2

screencap で取得したスクリーンショットに、テンプレート画像があるか確認します。タップはしません。見つけた座標も返してくれます。

# 古龍の心臓 が見つかったら位置を戻す。
result, x, y = aapo.chkImg2('./template/koryunosinzo.png')
print('result=' + str(result) + ', x=' + str(x) + ', y=' + str(y))

if result:
    # 見つかった位置から指定ピクセルズラしてロングタップ(5秒)
    aapo.longTouchPos(x+50, y+50, 5000)

引数_multiをTrueにすると、複数の結果を返してくれます。

ret, poss = aapo.chkImg2('tenpure.png',_multi = True)
if ret:
    for i in range(len(poss)):
        pos = poss[i]
        print(f'X={pos[0]}, Y={pos[1]}')
        pass
    pass

touchImg

screencap で取得したスクリーンショットに、テンプレート画像があればタップします。タップ結果を返してくれます。

aapo.touchImg('./template/stage_clear.png')

touchPos

指定位置をタップします。

# X=750、Y=400 の位置をタップする.
aapo.touchPos(750, 400)

第3引数を指定すると、ロングタップします。

# X=750、Y=400 の位置を5秒間タップする.
aapo.longTouchPos(750, 400, 5000)

swipeTouchPos

指定位置をスワイプします。

# X=750、Y=800 から、X=750、Y=400 まで、1秒かけてスワイプする.
aapo.swipeTouchPos(750, 800, 750, 400, 1000)

inputtext

文字を入力します。

# abc を入力する.
aapo.inputtext('abc')

inputkeyevent

HOMEキーやバックキーを送ります。

# ホームキーを押す.
aapo.inputkeyevent(3)
# バックキーを押す.
aapo.inputkeyevent(4)

inputkeyevent

screencap で取得したスクリーンショットを保存します。

# キャプチャ画像を保存
aapo.imgSave('screenshot.png')

# 現在の日時でキャプチャ画像を保存
aapo.imgSave('img/screenshot_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png')
# ↑をする場合「import datetime」をファイルの先頭に書くこと。

デバイス選択

複数の端末で同時実行できます。

import inquirer  # pip install inquirer
aapo = am.AapoManager('C:\\Program Files\\Nox\\bin\\')
devicesselect = [
    inquirer.List(
        "device",
        message="デバイスを選択して下さい。",
        choices=aapo.adbl.devices
    )
]
selected = inquirer.prompt(devicesselect)
aapo.adbl.setdevice(selected['device'])
aapo.screencap()