基于minicap实时推送手机屏幕,用Flask自建手机游戏强化学习训练环境。

禁止转载,侵权必究!Update 2022.07.27

前言

前面的教程中我们已经学习了强化学习玩游戏;也学习了怎么用flutter录制Android屏幕。做训练需要有对应的强化学习模拟环境。之前我们都是用别人搭建好的环境,比如:gym、PyGame-Learning-Environment。本章要教大家开发自己的手机游戏强化学习环境。

minicap

1.插上手机并开启开发者模式,打开相关权限。(具体细节请百度Android手机调试相关教程)

2.执行以下命令获取手机芯片型号和Android版本号:

(base) ouyangMBP:~ ouyang$ adb shell getprop ro.product.cpu.abi
arm64-v8a
(base) ouyangMBP:~ ouyang$ adb shell getprop ro.build.version.sdk
26  #Android O Android8.0

3. 找到对应手机的minicap预编译库并下载

注意:sdk level>= 16 push minicamp, 否则push minicap-nopie

把两个预编译文件adb push到手机中:

(base) ouyangMBP:~ ouyang$ adb push /Users/ouyang/Documents/华为云手机/努比亚z17的minicap/minicap /data/local/tmp
(base) ouyangMBP:~ ouyang$ adb push /Users/ouyang/Documents/华为云手机/努比亚z17的minicap/minicap.so /data/local/tmp
/Users/ouyang/Documents/华为云手?...shed. 7.1 MB/s (68736 bytes in 0.009s)

4.给minicap提权并检查安装情况

(base) ouyangMBP:~ ouyang$ adb shell chmod 777 /data/local/tmp/minicap
/data/local/tmp/minicap.so

获取手机分辨率:

(base) ouyangMBP:~ ouyang$ adb shell wm size
Physical size: 1080x1920

检查是否安装好:


(base) ouyangMBP:~ ouyang$ adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1080x1920@1080x1920/0 -t

命令最后显示OK,表示安装好了。

5. 启动minicap的socket

adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 1080x1920@1080x1920/0

跟上面命令相同,仅仅少了一个“-t”参数。

6. PC端启动端口转发

把Android手机的1717端口映射到电脑的本机1717端口。

adb forward tcp:1717 localabstract:minicap

7.测试

下载minicap的git项目。cd到example目录。执行以下命令

npm install ws
npm install express
node app.js

打开浏览器,输入:http://localhost:9002/,可以看到手机的实时屏幕了。

使用Flask

官网的例子是用Node.JS作为后台,因为强化学习需要Python开发,所以这里我们需要替换Node.JS的后台为Flask后台,以便我们编码。幸运的是github上已经有我们需要的项目了:

git clone https://github.com/ZS140/Minicap_flask.git
pip install flask_socketio

看到控制台如下输出,打开浏览器http://127.0.0.1:8090/查看效果

[Running] python -u "/Users/ouyang/app/GitHub/Minicap_flask/MinicapByFlask/MinicapByFlask.py"
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
 * Serving Flask app "MinicapByFlask" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:8090/ (Press CTRL+C to quit)
 * Restarting with stat
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
 * Debugger is active!
 * Debugger PIN: 294-652-924

附录

Flask入门

进入conda环境,pip install flask, 编写下面页面测试:

from flask import Flask
from flask import render_template

app =  Flask(__name__, template_folder='static/templates/')

@app.route('/')
@app.route('/index')
def home():
    a = 'Alex'
    return render_template('index.html', a = a, )


if __name__ == '__main__':
    app.run()