目录
基于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()