Python演绎的精彩故事(二)

RF-DETR实战解析:NAS搜索下的实时目标检测与部署指南 实时目标检测在边缘设备和智能硬件中至关重要,传统YOLO依赖锚点和NMS,速度与精度难以兼得。神经架构搜索(NAS)自动探索最优网络结构,突破手工设计瓶颈。RF-DETR结合NAS与DETR端到端特性,实现高精度实时推理。本文分析其架构搜索原理,并分享ONNX导出、NPU部署、INT8量化、延迟优化及常见坑位,帮助开发者落地应用。从DETR到RF-DETR,架构变革如何重塑检测边界,部署链路中的算子兼容与精度调优,以及从轻量Base到大规模多模态模型的延伸,都在这里给出实践视角的完整解读。 阅读详情

书接上回。在展示了App最顶层的代码后,我们去看看各模块如何编程。

为了能看懂各模块的代码,首先需要铺垫一下Softchip架构的基本概念和设计规范。

1、任意模块不持有其他模块的实例,自然不再显式使用句柄调用任何方法。

   这意味着模块之间不存在编码期和编译期的耦合。

2、每个模块在形式上只与Machine之间存在接口,该接口以API和Event两种形态存在。

   API将直接映射到函数入口地址,使用者可直接调用,运行期性能高。主要用于Utility性质的方法和需要高性能的场合。

   Event也是同步调用,但运行期性低于API。它的关键作用是在逻辑上切割冗长的调用链。在传统套路中,一个模块在完成自己的处理后,往往还要辛苦地触发其他模块的相关后续动作,这在逻辑上相当于惦记着“别人的事儿”。Event的引入相当于将原来长长的调用链在时间上切分为一个一个的阶段状态。每个模块只需要告诉Machine“X的事情Y完了”,Machine会自动查找谁需要在“X的事情Y完了”之后继续。Machine寻找后续操作的依据就是目标模块在自己的接口中所做的事件监听声明。

3、模块接口由自行声明,包括:

   3-1) outAPI  : 自己需要调用的API名称列表。

   3-2) inAPI   : 自己可以提供其他模块调用的API名称列表(附带对应的函数入口地址)。

   3-3) inEvent : 自己要监听的事件名称列表(附带对应的事件处理函数入口地址)。

   3-4) outEvent: 自己是否要发送事件。

   基于各模块声明,Machine自动将各模块“插入”,完成运行期API的绑定和event的分发。

4、概括来说,各模块基本只需要关心“自己的事情”:

   4-1) 我提供什么API?

   4-2) 我需要调用什么API?

   4-3) 我监听并处理什么事件?

   4-4) 我产生什么事件?

   反过来讲,模块不需要关心“别人的事情”:

   4-5) 谁使用我的API?

   4-6) 谁提供API给我用?

   4-7) 我监听的事件是谁产生的?(我干活之前是谁在干?)

   4-8) 我产生的事件谁处理?(我干完了谁来继续?)
   
举个简单的例子,在TextChat的设计中,LoginWindow登录成功后,不需要显式通知ChatWindow,因为那是ChatWindow的事情。LoginWindow只需要告诉Machine“LoginWindow登录成功了”。Machine会自动找到ChatWindow出来干活,因为ChatWindow之前已经告诉过Machine,如果“LiginWindow登录成功了”,请通知我。

OK,有了上面的铺垫,下面的代码就比较容易看懂了,基本套路是:

1、每个模块都继承Chip类。

2、实现_DefineInterface()方法以完成接口声明。

3、实现_PowerOn()方法以接收Machine发出的"上电"通知。

除此以外,每个模块就完全自由了,爱怎么玩就怎么玩吧。

新版的模块关系参照下图。



from Softchip import Chip
class Controller(Chip):            
    def __init__(self, chipID):
        Chip.__init__(self, chipID)

    def _DefineInterface(self):
        outAPIList = [
            u'connect_server',
            u'disconnect_server',
        ]

        inAPIList = [
            (u'api_start_work', self.__apiStartWork),
        ]

        inEventList = [
            (u'evt_logout_done', self.__evtOnLogoutDone),
        ]

        self.__interface = {
            Chip.TYPE_INT_API  : inAPIList,
            Chip.TYPE_OUT_API  : outAPIList,
            Chip.TYPE_OUT_EVENT: None,
        }

        return self.__interface

    def _PowerOn(self):
        self._eHandler = self.__interface[CHIP.TYPE_OUT_EVENT]

        apiMap = self._DefineInterface[CHIP.TYPE_OUT_API]
        self.__apiConnect    = apiMap[u'connect_server']
        self.__apiDisconnect = apiMap[u'disconnect_server']

    def __apiStartWork(self, serverHost, serverPort):
        succeeded = self.__apiConnect(serverHost, serverPort)

        if not succeeded:
            self._eHandler(u'evt_connect_failed')
        return

        self._eHandler(u'evt_connect_succeeded')

    def __evtOnLogoutDone(self):
        self.__apiDisconnect()


class CommunicationManager(Chip):
    def __init__(self, chipID):
        Chip.__init__(self, chipID)

    def _DefineInterface(self):
        inAPIList = [
            (u'connect_server',    self.__Connect     ),
            (u'disconnect_server', self.__DisConnect  ),
            (u'log_in',            self.__Login       ),
            (u'log_out',           self.__Logout      ),
            (u'invite_friend',     self.__InviteFriend),
            (u'send_message',      self.__SendMessage ),
        ]

        self.__interface = {
            Chip.TYPE_IN_API   : inAPIList,
            Chip.TYPE_OUT_EVENT: None,
        }

        return self.__interface

    def _PowerOn(self):
        self._eHandler = self.__interface[Chip.TYPE_OUT_EVENT]

    def __Connect(serverHost, serverPort):
        pass

    def __DisConnect(serverHost, serverPort):
        pass

    def __Login(username, password):
        pass

    def __Logout():
        pass

    def __InviteFriend(friendName):
        ...
        self.__MessageReceiveThread()
        ...

    def __SendMessage(message):
        pass

    def __MessageReceiveThread():
        while(True):
        ...
        message = xxx
        self._eHandler(u'evt_message_arrived', message)
        ...

class LoginWindow(Chip):
    def __init__(self, chipID):
        Chip.__init__(self, chipID)

    def _DefineInterface(self):
        outAPIList = [
            u'log_in',
            u'log_out',
        ]

        inEventList = [
            (u'evt_connect_succeeded', self.__evtOnConnectSucceeded),
            (u'evt_chat_closed',       self.__evtOnChatClosed      ),
        ]

        self.__interface = {
            Chip.TYPE_OUT_API  : outAPIList,
            Chip.TYPE_INT_EVENT: inEventList,
            Chip.TYPE_OUT_EVENT: None,
        }

        return self.__interface

    def _PowerOn(self):
        self._eHandler = self.__interface[CHIP.TYPE_OUT_EVENT]

        apiMap = self._DefineInterface[CHIP.TYPE_OUT_API]
        self.__apiLogin  = apiMap[u'log_in']
        self.__apiLogout = apiMap[u'log_out']

    def __evtOnConnectSucceeded(self):
        self.Show()

    def __evtOnChatClosed(self):
        self.__apiLogout()

        self._eHandler(u'evt_logout_done')

    def __OnLoginButtonPressed(self):
        username = xxx.GetValue()
        password = xxx.GetValue()
        succeeded = self.__apiLogin(username, password)

        if not succeeded:
            self._eHandler(u'evt_login_failed')
            return

        self._eHandler(u'evt_login_succeeded')
        self.Hide()


class ChatWindow(Chip):
    def __init__(self, chipID):
        Chip.__init__(self, chipID)

    def _DefineInterface(self):
        outAPIList = [
            u'invite_friend',
            u'send_message',
            u'log_out',
            u'disconnect_server',
        ]

        inEventList = [
            (u'evt_login_succeeded', self.__evtOnLoginSucceeded ),
            (u'evt_message_arrived', self.__evtOnMessageReceived),
        ]

        self.__interface = {
            Chip.TYPE_OUT_API  : outAPIList,
            Chip.TYPE_IN_API   : inEventList,
            Chip.TYPE_OUT_EVENT: None,
        }

        return self.__interface

    def _PowerOn(self):
        self._eHandler = self.__interface[CHIP.TYPE_OUT_EVENT]

        apiMap = self._DefineInterface[CHIP.TYPE_OUT_API]
        self.__apiInvite     = apiMap[u'invite_friend']
        self.__apiSendMsg    = apiMap[u'send_message']
        self.__apiLogout     = apiMap[u'log_out']
        self.__apiDisconnect = apiMap[u'disconnect_server']

    def __evtOnLoginSucceeded(self):
        self.Show()

    def __evtOnMessageReceived(self, message):
        xxx.ShowText(message)

    def __OnInviteButtonPressed(self):
        friendName = xxx.GetValue()

        succeeded = self.__apiInvite(friendName, self.__OnMessageReceived)
        if not succeeded:
            self._eHandler(u'evt_invite_failed')
            return

        self._eHandler(u'evt_invite_succeeded')

    def __OnSendButtonPressed(self):
        message = xxx.GetValue()

        self.__apiSendMsg(message)

    def __OnWindowClosing(self):
        self._eHandle(u'evt_chat_closed')




在本系列的下一篇,我们将简要分析一下Softchip框架的意义。

逆向爬虫-筑基篇-第一层-叁-列表简介-006 在这三国与代码交织的奇妙世界里,英杰们以列表为载体,在向往、社交与探索中不断前行,演绎着属于他们的传奇故事,亦如我们在编程与历史的长河中,不断探索、尝试,书写着独属于自己的精彩篇章。  阅读详情

相关推荐

SQL Server邂逅Python:1+1>2的数据科学魔法盛宴

亲爱的读者们,欢迎来到数据科学的奇幻世界,在这个世界里,数据不再是冰冷的数字,而是有生命的精灵,等待着被挖掘、理解并讲述它们的故事。今天,我们要讲的是SQL Server与Python之间的浪漫故事——两个看似不同的灵魂,如何在数据科学的舞台上共舞,演绎出一场精彩绝伦的数据分析秀。在这一幕,我们不仅展示数据,还解读数据,告诉读者每个步骤的意义,以及我们如何从数据中得出结论。最后,我们用一张精美的图表作为这场数据奇缘的见证,它不仅是对数据的总结,也是对Python与SQL Server完美合作的庆祝。

java专栏 500

Python编程---函数(第四阶段)

函数

Andy的博客 464

【全开源】教育培训微信小程序源码(FastAdmin+ThinkPHP+Unipp)

教育培训微信小程序源码以其便捷性、互动性、安全性等优势,成为了教育培训行业的新宠。随着移动互联网技术的不断发展,教育培训微信小程序源码将继续引领未来学习趋势,为学员提供更加优质、高效的学习体验。同时,教育培训机构也应积极拥抱小程序技术,利用源码打造具有自身特色的学习平台,提升品牌影响力和市场竞争力。

2401_84414018的博客 2102

老和尚讲故事

嘻嘻,老和尚又被打断了,快来看看吧! 可以在const int MAX=()中的括号中填上任何数字欧!

Merry2004的博客 968

【obj To 3DTiles 进阶实战】 从零配置地理坐标系与扩展属性元数据

本文详细解析了如何将OBJ模型转换为3DTiles格式,重点介绍了地理坐标系配置与属性元数据扩展的实战技巧。通过obj23dtiles工具,开发者可以精准定位模型经纬高坐标,并添加结构化属性表,实现城市规划模型在数字孪生平台的高效应用。

weixin_27215337的博客 367

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释:RTCM响应消息1020为GLONASS星历信息,暂不介绍,前公司暂未研发RTCM消息类型版本的DR/RTK模块,DR/RTK模块仅NMEA消息类型使用注释:公司使用的多信号语句类型为MSM4&MSM7,也应该是运用最广泛的语句类型,例如本人之前在公司开发的工具全是基于MSM7语句类型来进行的。

qxj2422640226的博客 2092

3D游戏引擎学习三(游戏引擎核心类Game)

分析Game.h文件 /* * ===================================================================================== * * Filename: Game.h * * Description: 定义游戏的基础类,游戏初始化、启动、消息循环、渲染、触摸处理等方法 * *

fly_net_cn的专栏 1270

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 108

Python演绎的精彩故事(一)

Python演绎的精彩故事。利用Python打造美丽框架。第一篇,引子。

bluesmic的专栏 1263

脑电分析:为什么大脑信号会“变同步”?——事件相关同步化与去同步化 (ERS/ERD) 全景解析

脑电分析中的事件相关同步化(ERS)和去同步化(ERD)是研究大脑动态节律的重要方法,反映特定任务下脑电频段能量的变化。ERD表示神经元活动分散(功率下降),提示脑区活跃处理信息;ERS则反映神经元同步(功率增强),常与静息状态相关。本文详解了ERS/ERD的生理机制、计算流程(包括基线校正和功率谱分析),并提供了Python实现示例,展示如何通过Welch法和STFT进行时频分析,生成ERD/ERS热力图。该技术广泛应用于运动想象脑机接口、癫痫检测等领域,为理解大脑功能状态提供了量化工具。

qq_32516809的博客 1396

CATIA二次开发一一一装配体与零件之间的坐标转换

输入参数:Product(产品实例对象)、iPointToTransfor(待转换坐标点CATMathPoint)核心逻辑:通过产品对象的绝对位置变换矩阵,计算逆向变换实现坐标系转换。输出参数:Point(转换后的局部坐标点CATMathPoint)

工业软件开发 1129

Python演绎的精彩故事(三)

Python演绎的精彩故事。Python设计美丽框架。第三篇,解析Softchip的意义。

bluesmic的专栏 1086

Windows环境下Ollama的本地部署方案

本文主要介绍了Windows环境下Ollama的本地部署方案,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. Windows环境安装 3. API调用示例代码

herosunly的博客 11万+

Python刘诗诗

我用Python绘制了一个刘诗诗!

AIGC 3万+

gem5-gpu教程01 部署(实测可跑通)

这将GPGPU-Sim更新为与gem5-gpu兼容的最新版本。此版本是已知可用于gem5 gpu的最新版本。

qq_20388971的博客 1404

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

动手模拟PN结:用Python可视化电子与空穴的‘爱情故事’(附代码)

本文通过Python代码生动演示了PN结的形成过程,揭示了P型半导体与N型半导体接触时电子与空穴的相互作用机制。借助NumPy和Matplotlib,读者可以直观观察耗尽层建立、内电场形成等微观现象,深入理解半导体物理的核心原理。附完整代码实现,适合电子工程和物理爱好者实践学习。

weixin_30700099的博客 382

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

一份可以带你飞的python书单推荐+pythonPDF书籍资料免费送给你!

1、《Python与神经网络实战》 以TensorFlow为工具,助你成为神经网络高手,深度学习专家。 来自北大数学系的《Python与机器学习》作者带你进入人工智能的神奇世界。 很丰富:包括10种算法,13个常用的真实样例 很实战:全书有25个完整实验,9539行代码 很扎实:通过822个公式,让你理解神经网络的来龙去脉 很创新:作者原创的软剪枝技术,能应用于各种神经网络模型 2...

1022

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python, C ++开发农村红白喜事操作指南APP

{"name": "初终", "days_after": 0, "description": "老人去世后的初步处理"},{"name": "报丧", "days_after": 1, "description": "通知亲友"},{"name": "守灵", "days_after": 3, "description": "家人守灵"},{"name": "吊唁", "days_after": 4, "description": "亲友吊唁"},", 联系方式: 138****1234";

2501_90802096的博客 783

python dataframe截取一列数前三位字符_某校新传院的Python作业(一) | 三个女孩的奇幻之旅...

数据猿所在某校新闻传播学院,很早就在本科开设网络新媒体、计算广告学、数据新闻等课程,这学期的研究生课程开设了两门python课程,供不同方向学生学习。前不久清华的“雷课堂”编程课程作业火爆全网,数据猿就蹭个热点展示一下文科专业的python课程作业吧。数据猿想把两门课的作业(随堂测验)进行整合。今天,先带来其中一门课的随堂测验。随堂测验要求:请用python完成三个字符串的“旅行”。这三...

weixin_39588209的博客 1246

【粉丝福利社】AI时代硬核竞争力:这个数学书单传疯了

【数学与AI学习书单推荐】精选8本优质书籍,涵盖数学通识到AI应用:从《改变世界的数学》《天才引导的历程》等通识读物,到《图解计算机科学数学基础》《机器学习的数学基础》等实用教材,帮助读者建立数学思维并掌握AI核心技术。书单包含哈佛概率论公开课、线性代数优化等经典内容,每本均附购买链接,适合不同层次学习者提升数学能力,应对AI时代的挑战。

愚公智库 8万+

MikroORM 命名策略(Naming Strategy)完全指南:表名、列名与数据库映射的定制之道

在 MikroORM 中,实体(Entity)属性与数据库表、列之间的名称映射规则完全由**命名策略(Naming Strategy)**决定。无论你是使用默认的 snake_case 表名列名、MongoDB 的 kebab-case 集合名,还是希望完全保留实体与属性的原始命名,都需要理解命名策略的工作原理与定制方式。本文将结合仓库源码(`packages/core/src/naming-st

gitblog_00619的博客 173

60本大佬们推荐的行业新书,送给可爱的你们!|Python、AI、编程 |

联合几个公众号给大家争取了60本计算机行业非常经典的书籍,还等什么呢?赶紧看看有哪些书,参与进行吧!1.怎么送书本次送书由 6 个大佬一起给大家送上60 本技术书籍,包...

机器学习算法与Python学习 486

从极坐标到玫瑰图:用Python解锁数据可视化的艺术之美

本文探讨了如何利用Python的matplotlib库在极坐标系中创建精美的玫瑰图,实现数据可视化的艺术表达。通过详细的代码示例和参数解析,展示了极坐标在展示周期性数据和增强视觉冲击力方面的独特优势,帮助读者掌握从基础到高级的极坐标绘图技巧。

sql99的博客 190
上一篇: Python演绎的精彩故事(一)
下一篇: Python演绎的精彩故事(三)
bluesmic
博客等级 码龄20年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值