本教程是继对应视频课程的补充部分,主要介绍一个真实的Demo是怎样按照开发范式进行开发的。
准备工作
硬件环境:
96boards开发板一块,并且配置好网络,能够正常使用SSH访问
一台电脑,与96boards处于局域网可连接状态,用于连接96boards开发板
软件环境:
下载需要的部署包和web展示端
运行步骤
解压xppcp_smart.tar.gz

其中,Hackathon.zip是web展示端,运行在你的PC上;xppcp_smart是运行在96boards上的部署包。
接下来进入xppcp_smart文件夹:

其中,configs是所有的配置文件,imgs是用于测试的图片,lib是所有的依赖库,pre_env.sh是环境初始化的脚本。shennong是可执行程序。
接下来:
然后到本地PC上,解压Hackathon.zip

之后命令行会出现一个http的链接,浏览器访问此链接即可看到Demo的效果。
代码模块介绍
我们只介绍xppcp_smart部分的代码模块,前端的部分不作介绍。
代码组织
首先,我们来看一下代码的组织结构:

其中模型的集成是使用fasterrcnn.h类实现的,shennongplugin.h是Demo框架的统一接口。之所以叫做shennong,是因为这是一个水果检测的Demo。接下来,我们看看接口的代码。
再看代码之前,我们再复习一遍整个模型集成的整体框架:

其中软件层是下面这样的:

其中fasterrcnn.h就是底层SDK框架那一层,shennongplugin.h就是应用框架那一层。
底层SDK框架
我们可以大致看一下fasterrcnn.h的接口设计:

可以看出来,底层会调用BPU_predict这个预测库,整体的处理流程大概分为了预测RunSingleFrame和后处理GetFrameOutput/GetRects/GetMask,分别用于取出预测库输出,取出水果的检测框,和取出水果的边缘。
注意,在这里大家不需要关心具体的代码实现,后面会有专门的课程进行讲解。
应用层框架
我们再来大致看一下应用框架shennongplugin.h的接口:

可以看出,这个框架主要起到消息的封装和转发作用,在不同的plugin之间进行消息分发和处理。
注意,在这里大家不需要关心具体的代码实现,后面会有专门的课程进行讲解。
打包发布
最后,我们来看一下打包发布。
如果拿到了Demo的部署包,进入xppcp_smart文件夹,可以看到下面这个文件结构:

其中,configs是所有的配置文件,imgs是用于测试的图片,lib是所有的依赖库,models里面是模型文件,pre_env.sh是环境初始化的脚本,run.sh是启动脚本,shennong是可执行程序。
像这样,将Demo打包成这样的带有所有资源依赖和启动脚本的过程,就叫做打包发布。为的是在任意一台开发板上都能跑起来这个程序。

