【教程】0x02 配置注入及按键响应——通过MYScrcpy学python系列

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进行管理,支持自动加载、存储。
  1. 在配置文件的[settings]表中注册
    • bool enabled YOLO检测开关(是的,后期要用到YOLO v11进行识别)
    • int detect_fps YOLO检测频率
[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()
  1. 创建 self.predict(self),用于YOLO11目标检测(将于下一章进行介绍)
def predict(self):
	...

4.运行 MYScrcpy,查看效果
控件

按键注册与回调事件

MYScrcpy同样支持键盘按键事件注入。例如注册键盘按键T,按下时进行YOLO检测

  1. 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

  1. 如果我们只希望按键响应一次(Down事件在按键按下时,按一定时间间隔不断发起回调),可以使用过滤器进行过滤。只需在函数上添加DPGExtension.CallbackActionFilter装饰器

按下键盘按键,会生成 n次 Down(频率为键盘刷新率)/ n次 Pressed(频率为GUI刷新率)/ 1次 Release 事件,此次只执行一次,则need_first_signalTrue

@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交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值