在玩游戏的过程中截屏,并记录手指操作。例如每100毫秒采集一次数据,每条记录包括屏幕截图、手指操作状态。我们希望训练好的AI能预测下一刻的手指操作状态,然后将预测的操作反映到游戏中。
安卓手机,暂不考虑ios。
可以通过手机录屏的方式,先将游戏过程录制成视频文件,后面再从视频文件中获取截图。一般手机都自带录屏功能。还可以从电脑上录屏,例如scrcpy(https://github.com/Genymobile/scrcpy)。一般是录不了声音的,不过我们只用截图,所以也不用录声音。
安卓上自带的工具getevent可以获取到各种输入事件,其中就包括屏幕的触摸事件。在电脑上可以用adb命令(不熟悉adb命令的话请自行搜索)调用它。
$ adb shell getevent -lp
// 输出差不多这样子
add device 6: /dev/input/event1
name: "hisi_gpio_key"
events:
KEY (0001): KEY_VOLUMEDOWN KEY_VOLUMEUP
input props:
add device 7: /dev/input/event6
name: "huawei,ts_kit"
events:
KEY (0001): KEY_F1 BTN_TOOL_FINGER BTN_TOUCH
ABS (0003): ABS_MT_TOUCH_MAJOR : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
ABS_MT_TOUCH_MINOR : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
ABS_MT_WIDTH_MAJOR : value 0, min 0, max 100, fuzz 0, flat 0, resolution 0
ABS_MT_WIDTH_MINOR : value 0, min 0, max 100, fuzz 0, flat 0, resolution 0
ABS_MT_ORIENTATION : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
ABS_MT_POSITION_X : value 0, min 0, max 1080, fuzz 0, flat 0, resolution 0
ABS_MT_POSITION_Y : value 0, min 0, max 1920, fuzz 0, flat 0, resolution 0
ABS_MT_TRACKING_ID : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
ABS_MT_PRESSURE : value 0, min 0, max 1080, fuzz 0, flat 0, resolution 0
“adb shell getevent -lp”可以列出所有输入设备,设备ID类似于“/dev/input/event...”。找到events中有ABS_MT开头的那个设备,它就是触摸屏啦。记录下设备ID,接着我们来获取触摸屏的事件。
$ adb shell getevent -l /dev/input/event6
// 输出差不多这样子
// type, code, value
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_PRESSURE 00000076
EV_ABS ABS_MT_POSITION_X 00000249
EV_ABS ABS_MT_POSITION_Y 00000508
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_KEY BTN_TOUCH DOWN
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_PRESSURE 00000063
EV_ABS ABS_MT_POSITION_X 00000249
EV_ABS ABS_MT_POSITION_Y 00000508
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
可以搜索多点触控协议了解上面输出的含义,例如这篇https://tinylab-1.gitbook.io/linux-doc/zh-cn/input/multi-touch-protocol
更多记录触屏操作的代码可以参考https://github.com/Cartucho/android-touch-record-replay
由于我们是分别录制的屏幕和触屏操作,后面处理数据的时候需要将截图和同一时刻的操作同步,所以在记录原始数据的时候尽可能带着时间戳。
更新时间:2024-08-21
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号