android-auto-play-opencv


Nameandroid-auto-play-opencv JSON
Version 1.0.9 PyPI version JSON
download
home_pagehttps://github.com/noitaro/android-auto-play-opencv
SummaryOperate Android using OpenCV.
upload_time2024-07-14 05:37:11
maintainerNone
docs_urlNone
authornoita
requires_pythonNone
licenseMIT
keywords android auto play opencv
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # android-auto-play-opencv

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



Android を操作する時に [Android Debug Bridge (adb)](https://developer.android.com/studio/command-line/adb "Android Debug Bridge (adb)  |  Android Developers") を使うので、マウスカーソルが奪われません。



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



## Readme

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



## Installation

+ ライブラリのインストール

```

pip install android-auto-play-opencv

```



+ このライブラリを使うには、[Android SDK Platform-Tools](https://developer.android.com/studio/releases/platform-tools "SDK Platform Tools release notes  |  Android Developers") に含まれる ```adb.exe``` が必要です。



## How to use

```python

# 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()

```



### 完成品

* [ウマ娘自動リセマラ周回](https://github.com/noitaro/python-umamusume)



## Reference



### start

アプリを起動する。

```python

# FGOを起動する.

aapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')

```



### end

アプリを終了する。

```python

# FGOを終了する.

aapo.end('com.aniplex.fategrandorder')

```



### sleep

処理を待機させる。

```python

# 5秒待機.

aapo.sleep(5)

```



### screencap

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

```python

# 画面キャプチャ

aapo.screencap()

```



### chkImg

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

```python

if aapo.chkImg('./template/stage_clear.png'):

    # あった時の処理.

    pass

```



### chkImg2

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

```python

# 古龍の心臓 が見つかったら位置を戻す。

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にすると、複数の結果を返してくれます。

```Python

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`](#screencap) で取得したスクリーンショットに、テンプレート画像があればタップします。タップ結果を返してくれます。

```python

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

```



### touchPos

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

```python

# X=750、Y=400 の位置をタップする.

aapo.touchPos(750, 400)

```

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

```python

# X=750、Y=400 の位置を5秒間タップする.

aapo.longTouchPos(750, 400, 5000)

```



### swipeTouchPos

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

```python

# X=750、Y=800 から、X=750、Y=400 まで、1秒かけてスワイプする.

aapo.swipeTouchPos(750, 800, 750, 400, 1000)

```



### inputtext

文字を入力します。

```python

# abc を入力する.

aapo.inputtext('abc')

```



### inputkeyevent

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

```python

# ホームキーを押す.

aapo.inputkeyevent(3)

# バックキーを押す.

aapo.inputkeyevent(4)

```



### inputkeyevent

[`screencap`](#screencap) で取得したスクリーンショットを保存します。

```python

# キャプチャ画像を保存

aapo.imgSave('screenshot.png')



# 現在の日時でキャプチャ画像を保存

aapo.imgSave('img/screenshot_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png')

# ↑をする場合「import datetime」をファイルの先頭に書くこと。

```



### デバイス選択

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

```python

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()

```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/noitaro/android-auto-play-opencv",
    "name": "android-auto-play-opencv",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "android auto play opencv",
    "author": "noita",
    "author_email": "noitalog.tokyo@gmail.com",
    "download_url": null,
    "platform": null,
    "description": "# android-auto-play-opencv\r\n\r\nOpenCV \u306e\u753b\u50cf\u8a8d\u8b58\u3092\u4f7f\u3063\u3066\u3001Android \u3092\u81ea\u52d5\u64cd\u4f5c\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\r\n\r\n\r\n\r\nAndroid \u3092\u64cd\u4f5c\u3059\u308b\u6642\u306b [Android Debug Bridge (adb)](https://developer.android.com/studio/command-line/adb \"Android Debug Bridge (adb) \u00a0|\u00a0 Android Developers\") \u3092\u4f7f\u3046\u306e\u3067\u3001\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u596a\u308f\u308c\u307e\u305b\u3093\u3002\r\n\r\n\r\n\r\nNoxPlayer \u3092\u64cd\u4f5c\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\u3002\r\n\r\n\r\n\r\n## Readme\r\n\r\nhttps://noitaro.github.io/android-auto-play-opencv/\r\n\r\n\r\n\r\n## Installation\r\n\r\n+ \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n\r\n```\r\n\r\npip install android-auto-play-opencv\r\n\r\n```\r\n\r\n\r\n\r\n+ \u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3046\u306b\u306f\u3001[Android SDK Platform-Tools](https://developer.android.com/studio/releases/platform-tools \"SDK Platform Tools release notes  |  Android Developers\") \u306b\u542b\u307e\u308c\u308b ```adb.exe``` \u304c\u5fc5\u8981\u3067\u3059\u3002\r\n\r\n\r\n\r\n## How to use\r\n\r\n```python\r\n\r\n# This Python file uses the following encoding: utf-8\r\n\r\n\r\n\r\n# pip install android-auto-play-opencv\r\n\r\nimport android_auto_play_opencv as am\r\n\r\n\r\n\r\nadbpath = '..\\\\platform-tools\\\\'\r\n\r\n\r\n\r\ndef main():\r\n\r\n\r\n\r\n    aapo = am.AapoManager(adbpath)\r\n\r\n    \r\n\r\n    while True:\r\n\r\n    \r\n\r\n        # \u753b\u9762\u30ad\u30e3\u30d7\u30c1\u30e3\r\n\r\n        aapo.screencap()\r\n\r\n        \r\n\r\n        # \u65e9\u9001\u308a\u30dc\u30bf\u30f3\u306f\u5e38\u306b\u30bf\u30c3\u30d7\r\n\r\n        if aapo.touchImg('./umamusume/hayaokuri.png'):\r\n\r\n            # \u30bf\u30c3\u30d7\u51fa\u6765\u305f\u3089\u5f85\u6a5f\r\n\r\n            aapo.sleep(1)\r\n\r\n    \r\n\r\n        # Google Play\u30c0\u30a4\u30a2\u30ed\u30b0\u304c\u51fa\u305f\u3089\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u306e\u4f4d\u7f6e\u3092\u30bf\u30c3\u30d7\r\n\r\n        elif aapo.chkImg('./umamusume/google-play.png'):\r\n\r\n            aapo.touchPos(135, 630)\r\n\r\n            aapo.sleep(1)\r\n\r\n\r\n\r\nif __name__ == '__main__':\r\n\r\n    main()\r\n\r\n```\r\n\r\n\r\n\r\n### \u5b8c\u6210\u54c1\r\n\r\n* [\u30a6\u30de\u5a18\u81ea\u52d5\u30ea\u30bb\u30de\u30e9\u5468\u56de](https://github.com/noitaro/python-umamusume)\r\n\r\n\r\n\r\n## Reference\r\n\r\n\r\n\r\n### start\r\n\r\n\u30a2\u30d7\u30ea\u3092\u8d77\u52d5\u3059\u308b\u3002\r\n\r\n```python\r\n\r\n# FGO\u3092\u8d77\u52d5\u3059\u308b.\r\n\r\naapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')\r\n\r\n```\r\n\r\n\r\n\r\n### end\r\n\r\n\u30a2\u30d7\u30ea\u3092\u7d42\u4e86\u3059\u308b\u3002\r\n\r\n```python\r\n\r\n# FGO\u3092\u7d42\u4e86\u3059\u308b.\r\n\r\naapo.end('com.aniplex.fategrandorder')\r\n\r\n```\r\n\r\n\r\n\r\n### sleep\r\n\r\n\u51e6\u7406\u3092\u5f85\u6a5f\u3055\u305b\u308b\u3002\r\n\r\n```python\r\n\r\n# 5\u79d2\u5f85\u6a5f.\r\n\r\naapo.sleep(5)\r\n\r\n```\r\n\r\n\r\n\r\n### screencap\r\n\r\nAndroid \u306e\u753b\u9762\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u3002\r\n\r\n```python\r\n\r\n# \u753b\u9762\u30ad\u30e3\u30d7\u30c1\u30e3\r\n\r\naapo.screencap()\r\n\r\n```\r\n\r\n\r\n\r\n### chkImg\r\n\r\n[`screencap`](#screencap) \u3067\u53d6\u5f97\u3057\u305f\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u753b\u50cf\u304c\u3042\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30bf\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002\r\n\r\n```python\r\n\r\nif aapo.chkImg('./template/stage_clear.png'):\r\n\r\n    # \u3042\u3063\u305f\u6642\u306e\u51e6\u7406.\r\n\r\n    pass\r\n\r\n```\r\n\r\n\r\n\r\n### chkImg2\r\n\r\n[`screencap`](#screencap) \u3067\u53d6\u5f97\u3057\u305f\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u753b\u50cf\u304c\u3042\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30bf\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002\u898b\u3064\u3051\u305f\u5ea7\u6a19\u3082\u8fd4\u3057\u3066\u304f\u308c\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# \u53e4\u9f8d\u306e\u5fc3\u81d3 \u304c\u898b\u3064\u304b\u3063\u305f\u3089\u4f4d\u7f6e\u3092\u623b\u3059\u3002\r\n\r\nresult, x, y = aapo.chkImg2('./template/koryunosinzo.png')\r\n\r\nprint('result=' + str(result) + ', x=' + str(x) + ', y=' + str(y))\r\n\r\n\r\n\r\nif result:\r\n\r\n    # \u898b\u3064\u304b\u3063\u305f\u4f4d\u7f6e\u304b\u3089\u6307\u5b9a\u30d4\u30af\u30bb\u30eb\u30ba\u30e9\u3057\u3066\u30ed\u30f3\u30b0\u30bf\u30c3\u30d7(5\u79d2)\r\n\r\n    aapo.longTouchPos(x+50, y+50, 5000)\r\n\r\n```\r\n\r\n\u5f15\u6570_multi\u3092True\u306b\u3059\u308b\u3068\u3001\u8907\u6570\u306e\u7d50\u679c\u3092\u8fd4\u3057\u3066\u304f\u308c\u307e\u3059\u3002\r\n\r\n```Python\r\n\r\nret, poss = aapo.chkImg2('tenpure.png',_multi = True)\r\n\r\nif ret:\r\n\r\n    for i in range(len(poss)):\r\n\r\n        pos = poss[i]\r\n\r\n        print(f'X={pos[0]}, Y={pos[1]}')\r\n\r\n        pass\r\n\r\n    pass\r\n\r\n```\r\n\r\n### touchImg\r\n\r\n[`screencap`](#screencap) \u3067\u53d6\u5f97\u3057\u305f\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u753b\u50cf\u304c\u3042\u308c\u3070\u30bf\u30c3\u30d7\u3057\u307e\u3059\u3002\u30bf\u30c3\u30d7\u7d50\u679c\u3092\u8fd4\u3057\u3066\u304f\u308c\u307e\u3059\u3002\r\n\r\n```python\r\n\r\naapo.touchImg('./template/stage_clear.png')\r\n\r\n```\r\n\r\n\r\n\r\n### touchPos\r\n\r\n\u6307\u5b9a\u4f4d\u7f6e\u3092\u30bf\u30c3\u30d7\u3057\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# X=750\u3001Y=400 \u306e\u4f4d\u7f6e\u3092\u30bf\u30c3\u30d7\u3059\u308b.\r\n\r\naapo.touchPos(750, 400)\r\n\r\n```\r\n\r\n\u7b2c3\u5f15\u6570\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u30ed\u30f3\u30b0\u30bf\u30c3\u30d7\u3057\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# X=750\u3001Y=400 \u306e\u4f4d\u7f6e\u30925\u79d2\u9593\u30bf\u30c3\u30d7\u3059\u308b.\r\n\r\naapo.longTouchPos(750, 400, 5000)\r\n\r\n```\r\n\r\n\r\n\r\n### swipeTouchPos\r\n\r\n\u6307\u5b9a\u4f4d\u7f6e\u3092\u30b9\u30ef\u30a4\u30d7\u3057\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# X=750\u3001Y=800 \u304b\u3089\u3001X=750\u3001Y=400 \u307e\u3067\u30011\u79d2\u304b\u3051\u3066\u30b9\u30ef\u30a4\u30d7\u3059\u308b.\r\n\r\naapo.swipeTouchPos(750, 800, 750, 400, 1000)\r\n\r\n```\r\n\r\n\r\n\r\n### inputtext\r\n\r\n\u6587\u5b57\u3092\u5165\u529b\u3057\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# abc \u3092\u5165\u529b\u3059\u308b.\r\n\r\naapo.inputtext('abc')\r\n\r\n```\r\n\r\n\r\n\r\n### inputkeyevent\r\n\r\nHOME\u30ad\u30fc\u3084\u30d0\u30c3\u30af\u30ad\u30fc\u3092\u9001\u308a\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# \u30db\u30fc\u30e0\u30ad\u30fc\u3092\u62bc\u3059.\r\n\r\naapo.inputkeyevent(3)\r\n\r\n# \u30d0\u30c3\u30af\u30ad\u30fc\u3092\u62bc\u3059.\r\n\r\naapo.inputkeyevent(4)\r\n\r\n```\r\n\r\n\r\n\r\n### inputkeyevent\r\n\r\n[`screencap`](#screencap) \u3067\u53d6\u5f97\u3057\u305f\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002\r\n\r\n```python\r\n\r\n# \u30ad\u30e3\u30d7\u30c1\u30e3\u753b\u50cf\u3092\u4fdd\u5b58\r\n\r\naapo.imgSave('screenshot.png')\r\n\r\n\r\n\r\n# \u73fe\u5728\u306e\u65e5\u6642\u3067\u30ad\u30e3\u30d7\u30c1\u30e3\u753b\u50cf\u3092\u4fdd\u5b58\r\n\r\naapo.imgSave('img/screenshot_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png')\r\n\r\n# \u2191\u3092\u3059\u308b\u5834\u5408\u300cimport datetime\u300d\u3092\u30d5\u30a1\u30a4\u30eb\u306e\u5148\u982d\u306b\u66f8\u304f\u3053\u3068\u3002\r\n\r\n```\r\n\r\n\r\n\r\n### \u30c7\u30d0\u30a4\u30b9\u9078\u629e\r\n\r\n\u8907\u6570\u306e\u7aef\u672b\u3067\u540c\u6642\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002\r\n\r\n```python\r\n\r\nimport inquirer  # pip install inquirer\r\n\r\naapo = am.AapoManager('C:\\\\Program Files\\\\Nox\\\\bin\\\\')\r\n\r\ndevicesselect = [\r\n\r\n    inquirer.List(\r\n\r\n        \"device\",\r\n\r\n        message=\"\u30c7\u30d0\u30a4\u30b9\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\u3002\",\r\n\r\n        choices=aapo.adbl.devices\r\n\r\n    )\r\n\r\n]\r\n\r\nselected = inquirer.prompt(devicesselect)\r\n\r\naapo.adbl.setdevice(selected['device'])\r\n\r\naapo.screencap()\r\n\r\n```\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Operate Android using OpenCV.",
    "version": "1.0.9",
    "project_urls": {
        "Homepage": "https://github.com/noitaro/android-auto-play-opencv"
    },
    "split_keywords": [
        "android",
        "auto",
        "play",
        "opencv"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b3b6dc4f17ceec98a64678920e49229727d34d4ee9f0c5b2a58601584c2e765c",
                "md5": "dc7eacb9462d0773dd5ce4184bc90b7f",
                "sha256": "3fc9717abfaa64ed5ed7f316cc4f46765402ecc3e66cf5aaa660ee2c5f28de2b"
            },
            "downloads": -1,
            "filename": "android_auto_play_opencv-1.0.9-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dc7eacb9462d0773dd5ce4184bc90b7f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 8572,
            "upload_time": "2024-07-14T05:37:11",
            "upload_time_iso_8601": "2024-07-14T05:37:11.439142Z",
            "url": "https://files.pythonhosted.org/packages/b3/b6/dc4f17ceec98a64678920e49229727d34d4ee9f0c5b2a58601584c2e765c/android_auto_play_opencv-1.0.9-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-14 05:37:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "noitaro",
    "github_project": "android-auto-play-opencv",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "android-auto-play-opencv"
}
        
Elapsed time: 0.29820s