0x02 配置注入及按键响应
前言
MYScrcpy Github / Gitee
从 1.6.4 版本开始,为童鞋们提供了一个开放的插件开发环境。
上一章介绍了DPGExtension类、方法及如何创建一个控制面板、显示面板,添加按钮及绘制提示信息。本章介绍如何进行配置注入及按键响应。
注意
插件用于功能测试及教学目的,切勿违法违规使用!
我们开始吧
配置注入
MYScrcpy支持通过extension.toml
配置文件定义值,并将值及对应值类型自动注册至KVManager进行统一管理。
目前DPG支持的source值类型如下:
- str
- int
- float
- bool
定义这些类型的值可以通过DPG Value进行管理,通过source
绑定至DPG对应GUI控件。其他类型值将由MYScrcpy的ValueManager进行管理,支持自动加载、存储。
- 在配置文件的
[settings]
表中注册- bool
enabled
YOLO检测开关(是的,后期要用到YOLO v11进行识别) - int
detect_fps
YOLO检测频率
- bool
[settings]
enabled = false
detect_fps = 1 # detect 1 time per sec
2.使用dpg_extension.VDDragInt控件进行值管理
# 引入控件
from myscrcpy.gui.dpg.dpg_extension import DPGExtension, VDCheckBox, VDDragInt
# 在 draw()函数中创建VDCheckBox, VDDragInt控件,该控件包含一个dpg对应控件,同时自动绑定至注册值,自动加载/保存该值
...
def draw(self):
...
with dpg.group(parent=self.tag_pad):
# 创建按钮
# 同时改写按钮功能为YOLO检测
dpg.add_button(label='手动检测', callback=self.predict)
# 创建控件并绘制
self.vdi_enabled = VDCheckBox(self, 'enabled').draw()
self.vdi_fps = VDDragInt(self, 'detect_fps', min_value=1, max_value=5).draw()
- 创建 self.predict(self),用于YOLO11目标检测(将于下一章进行介绍)
def predict(self):
...
4.运行 MYScrcpy,查看效果
按键注册与回调事件
MYScrcpy同样支持键盘按键事件注入。例如注册键盘按键T
,按下时进行YOLO检测
- 在
extension.toml
中进行配置
[keys.detect]
space = 1
uk_name = "KB_T"
desc = "Detect Once"
MYScrcpy在Ctrl模式下(
F12
切换键盘模式)提供0/1/2/3 共4个按键空间,使用F11
切换空间,0为proxy预留空间。此处space
指定为1,将按键注册至1号按键空间
uk_name
为按键统一名称,查看myscrcpy.utils.keys.UnifiedKeys, KB_T为按键T的name
2.通过以上配置,现在按键T的按下(DOWN)、释放(RELEASE)、持续按压(PRESSED)事件已经被注册并监听,一旦事件发生,则会调用实例对应事件响应函数。现在重写该函数实现相应功能。
def callback_key_detect(self, acp: ActionCallbackParam):
"""
按键回调处理函数
callback_key_ 为固定函数名称前缀,detect对应配置文件注册的keys.detect
:param acp:
:return:
"""
函数入参ActionCallbackParam包含了事件的各类信息,具体可以查看
myscrcpy.gui.dpg.dpg_extension_cls.ActionCallbackParam
类
- 如果我们只希望按键响应一次(Down事件在按键按下时,按一定时间间隔不断发起回调),可以使用过滤器进行过滤。只需在函数上添加DPGExtension.CallbackActionFilter装饰器
按下键盘按键,会生成 n次 Down(频率为键盘刷新率)/ n次 Pressed(频率为GUI刷新率)/ 1次 Release 事件,此次只执行一次,则
need_first_signal
置True
@DPGExtension.CallbackActionFilter(Action.DOWN, need_first_signal=True)
def callback_key_detect(self, acp: ActionCallbackParam):
...
4.编写函数功能,运行MYScrcpy 查看按键响应效果
@DPGExtension.CallbackActionFilter(Action.DOWN, need_first_signal=True)
def callback_key_detect(self, acp: ActionCallbackParam):
"""
按键回调处理函数
callback_key_ 为固定函数名称,detect对应配置文件注册的keys.detect
:param acp:
:return:
"""
# 进行YOLO检测
self.predict()
# 窗口底部日志栏显示日志
self.show_message(f"YOLO Detect!")
按T
键,可以看到进行了牌检测,并在底部日志栏输出了日志
总结
本章讲解了配置注入及按键响应,下一章,我们将简要介绍YOLO V11 训练与实现方法。敬请期待。
有任何问题欢迎留言或加Q群579618095交流。