0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RV1126开发板实现简单的UI开发示例

广州灵眸科技有限公司 2025-04-18 16:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 方案简介

本方案为最简单的UI开发示例,已为用户初步构建一个基本的应用工程;准备好我司的easyeai-api链接调用;准备好UI的开发环境。其目的在于方便用户马上进行带有界面交互的产品开发,无须关心工程组建。

2. 快速上手

2.1 开发环境准备

如果您初次阅读此文档,请阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》,并按照其相关的操作,进行编译环境的部署

在PC端Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,具体如下所示。

cd ~/develop_environment ./run.sh

wKgZPGgB7g2AdudVAACbrHAYX20640.png

2.2 源码下载以及实例编译

在EASY-EAI编译环境下创建存放源码仓库的管理目录:

cd /opt mkdir EASY-EAI-Toolkit cd EASY-EAI-Toolkit

通过git工具,在管理目录内克隆远程仓库

git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-C-UiSolution.git

wKgZPGgCCDWAdAe7AACoqEPCFG0761.png

注:

* 此处可能会因网络原因造成卡顿,请耐心等待。

* 如果实在要在gitHub网页上下载,也要把整个仓库下载下来,不能单独下载本实例对应的目录。

进入到对应的例程目录执行编译操作,具体命令如下所示:

cd EASY-EAI-Toolkit-C-UiSolution/qSolu-QDemo/ ./build.sh

注:

* 由于依赖库部署在板卡上,因此交叉编译过程中必须保持adb连接。

wKgZO2gCCDWAbJn2AAOrfi1CftY014.pngwKgZPGgCCDWAePFRAAIup4LxALY702.png

2.3 方案部署

通过执行以下命令,将编译结果手动部署到板卡中

cp Release/qSolu-* /mnt/userdata/UiSolu

2.4 示例方案运行

通过按键Ctrl+Shift+T创建一个新窗口,执行adb shell命令,进入板卡运行环境。

adb shell

wKgZO2gCCDWAfU1yAACOVQLk9o8187.png

进入板卡后,定位到例程部署的位置:

cd /userdata/UiSolu

运行例程命令如下所示:

./qSolu-QDemo

2.5 运行效果

运行打印:

wKgZPGgCCDWAeKcDAAHzr6bVVRk441.png

液晶显示屏上会显示如下画面:

wKgZPGgCA_OAJ69AABzc9Nt3eSA378.png

点击“欢迎”按钮,可以显示/隐藏提示语。

2.6 开机启动

首先进入板卡环境,执行以下命令,在板卡上创建一个给本例程使用的应用目录:myapp

cd /userdata/apps/ mkdir myapp

wKgZO2gCCDWAex4AAAA1VO-PFiQ645.png

然后回到开发环境中,通过使用“2.3方案部署”类似的操作方法,把本例程所需要的全部文件,包含:编译结果,配置文件,模型等。部署到刚刚新建的myapp目录中。

最后在板卡上创建一个run.sh脚本来管控用户所有需要的应用即可,《入门指南/应用程序开机自启动》会详细描述run.sh脚本该如何编写。

3. QtCreator配置

3.1 运行qtcreator

在EASY-EAI编译环境中的任意位置,通过下方命令,后台打开qtcreator:

qtcreator &

wKgZPGgCCDaAA-t0AAA1KcFr9V8019.png

注:若虚拟机配置较低,打开qtcreator可能要等待10几秒。

3.2 打开Qt工程

wKgZO2f2NhmAKW6nAAM3uDcierM246.png

3.3 配置远程调试参数

wKgZPGgCCDaAKQwuAAIkGgcPMqU660.png

注:进行远程调试前,首先要用build.sh脚本把相关的资源拷贝到【开发板】相对应的目录上,否则会因缺少文件导致运行异常。

3.4 远程运行Qt应用

wKgZO2gCCDaAUxhZAAG3VBXX4rA547.png

3.5 调试打印输出&远程停止应用进程

wKgZPGgCCDaAaQ4-AAHgmDnxHYM904.png

3.6 修改应用编译输出位置

wKgZO2gCCDaAJMuYAAIWXaD8-4Y755.png

注:任何修改*.pro或者*.pri的操作,都要clean掉Makefile后,再重新编译。

4. 代码解析

方案主逻辑代码位于:

EASY-EAI-Toolkit-C-UiSolution/qSolu-QDemo/QSrcCode/ui/main.cpp。代码实现主要通过调用我司的easyeai-api库快速构建一个Qt应用,代码主体分为Qt主线程和抓图显示子线程。

4.1 组件库组成

本开发示例,需要使用到easyeai-api库的以下组件,如下所示。

wKgZO2gCCDaAOAeFAAA2NT7MKS4794.png

模组信息如下所示。

组件头文件以及库路径描述
系统操作组件easyeai-api/common_api/system_opt提供线程操作函数
摄像头组件easyeai-api/peripheral_api/camera提供摄像头操作函数
显示屏组件easyeai-api/peripheral_api/display提供显示屏操作函数

本工程由qSolu-QDemo.pro与各子模块*.pro进行组织。其中,这些组件属于api子模块,具体通过qSolu-QDemo/QSrcCode/apiWrapper/api.pri编译进工程,具体请看后续章节。

4.2 逻辑框图

项目的整体逻辑框图如下所示。

wKgZO2f2NmWAF3nTAAC7LD32mao509.png

4.3 Qt线程

Qt线程处理的业务有:

  • 创建抓图显示线程;
  • 创建Qt应用;

本处附上主要的逻辑功能代码,其他辅助的、校验型的代码先忽略。

// 1.创建抓图显示线程 pthread_t pid; if(0 != CreateNormalThread(displayCamera, NULL ,&pid)){ return a.exec(); } // 2.创建Qt应用 mainWidget w; w.show();

4.4 抓图显示子线程

抓图显示子线程主要完成以下操作:

  • 初始化摄像头
  • 预设:开启UI图层
  • 初始化显示屏
  • 抓图,送显

组件初始化操作如下,本处调用RGB摄像头。

// 1.打开摄像头 ret = rgbcamera_init(CAMERA_WIDTH, CAMERA_HEIGHT, 90); pbuf = NULL; pbuf = (char *)malloc(IMAGE_SIZE);

初始化显示屏,如下所示。

// 2.显示初始化 disp_preset_uiLayer(SYS_TRUE); //注意,若要使用UI,需要先把UI图层使能,否则无法正常显示。 ret = disp_init(SCREEN_WIDTH, SCREEN_HEIGHT);

抓取图像。

// 3.(取流 + 显示)循环 ret = rgbcamera_getframe(pbuf); disp_commit(pbuf, IMAGE_SIZE);

5. 开发指南

5.1 示例文件&目录结构

UiSolution git仓库仅会放置两个解决方案。

一是最简洁的UI调用方案,用户可以基于此方案,快速进行需要带界面交互的产品开发。

二是带调度框架的UI应用方案,该方案为类人脸门禁机的产品级解决方案,其特点是模块之间的耦合度低,用户可以快速拓展自定义的业务模块,以及快速更换UI皮肤。

5.1.1 UiSolution git仓库目录介绍。

UiSolution工程构成如下所示,由功能组件easyeai-api和各个解决方案构成。

wKgZPGgCCDaAfTugAACdDge0ZzM309.png

功能组件的描述如下所示,easyeai-api是经过高度封装的易用性组件接口,便于用户直接调用板卡资源。

功能组件目录组件子目录描述
功能组件easyeai-apialgorithm_api算法组件
common_api通用组件
media_api多媒体组件
netProtocol_api网络协议组件
peripheral_api外设硬件组件

解决方案的描述如下所示,单个“qSolu-”开头的目录即为一个解决方案案例,代码内调用“EASY EAI-API”来满足某一实际应用场景的需求。

功能工程目录描述
解决方案qSolu-QDemo最简单的UI交互方案
qSolu-facialGate类人脸识别门禁机解决方案

5.1.2 解决方案最基本的目录构成。

每个解决方案就是一个独立的项目,项目内包含部分如下所示,项目使用qmake构建自动编译部署。

wKgZO2gCCDaAUhuLAAC2-AJqh9Q906.png

具体介绍如下所示。

组成部分描述
build.sh编译脚本,用于管理生成可执行文件后的部署准备工作,用户可自定义shell命令。
qSolu-QDemo.pro工程管理文件,用于组织整个工程结构,指导qmake生成Makefile。
resource.qrc工程管理文件,用于组织管理贴图资源,样式表资源等。
api.pri工程管理文件,用于组织管理“对easyeai-api再封装的子模块”相关源码。
common.pri工程管理文件,用于组织管理“第三方子模块”相关源码。
ui.pri工程管理文件,用于组织管理“UI界面效果”相关源码。
QResource用于存放贴图资源,样式表资源等。
QSrcCode用于存放工程源代码。

5.2 *.pro和*.pri文件解析

5.2.1 *.pro文件

第一部分为输出配置,如下所示:

wKgZPGgCCDaAbydPAAAWpouPW1c981.png

配置信息如下所示。

配置项描述
TARGET输出文件名称
TEMPLATE输出文件类型,app为可执行文件,lib为库文件

第二部分为全局编译选项配置,如下所示:

wKgZO2gCCDaACtDTAAA-4TzWU2M148.png

配置信息如下所示。

配置项描述
LIBS全局链接库,通常是本Ubuntu系统提供的库
QMAKE_CXXFLAGS全局C++编译参数,可传入一些宏或者C++编译配置

第三部分为加载自定义子模块,如下所示:

wKgZPGgCCDeAdHrPAAAeLrZXN14497.png

第四部分为加载资源管理,如下所示:

wKgZPGgCCDeAKrpOAAAZv1RCaP4223.png

第五部分为指定文件输出目录,如下所示:

wKgZO2gCCDeAM110AAAav9Nq7jU349.png

5.2.2 api.pri文件

本工程文件是对我司的功能组件库的管理,若用户有“对我司的功能组件库进行再封装”的需求,则可通过本文件来管理。(针对当前方案进行:配置EASYEAIAPI头文件目录、库文件目录以及配置库链接参数):

wKgZPGgCCDeALp0LAAEteTjFl34300.png

配置信息如下所示。

配置项描述
INCLUDEPATH向工程指定头文件的查找路径
LIBS指定对应的easyeai-api库文件以及其依赖的编译参数
SOURCES向工程添加需要编译的源文件
HEADERS向工程添加需要编译的头文件

5.2.3 common.pri文件

本工程文件是第三方的库的配置(针对当前方案进行:配置第三方头文件目录、库文件目录、配置第三方库链接参数以及配置源码目录):

wKgZPGgCCDeASwo0AABDc_c66mM056.png

配置信息如下所示。

配置项描述
INCLUDEPATH向工程指定头文件的查找路径
SOURCES向工程添加需要编译的源文件
HEADERS向工程添加需要编译的头文件

5.2.4 ui.pri文件:

本工程文件是交互界面相关的源码文件配置,内容如下所示:

wKgZO2gCCDeATblwAABOt_iahEw840.png

配置项如下所示。

配置项描述
SOURCES向工程添加需要编译的源文件
HEADERS向工程添加需要编译的头文件
FORMS向工程添加Qt设计师产生的界面文件

5.3 build.sh编译脚本:

5.3.1 路径定位部分

第一部分用于提取目录用于编译操作,内容如下所示:(进入build.sh脚本所在目录,并且提取当前目录绝对路径,提取当前目录名称)

wKgZO2f2NzuAboIjAAArNYW9H20597.png

5.3.2 编译参数部分

第二部分清除操作,清除目录为Release,内容如下所示:(执行build.sh脚本时,带入了参数“clear”,则清空编译输出;带入了参数“all”,则重新编译)

wKgZPGgCCDeAAhN5AAA4lCwTIaM052.png

5.3.3 编译操作

第三部分,编译直接调用qmake,内容如下所示:(重新编译,并生成部署目录)

wKgZO2gCCDeAF5v0AAA3dtRxJm8780.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    26

    文章

    6402

    浏览量

    120529
  • ui
    ui
    +关注

    关注

    0

    文章

    211

    浏览量

    22457
  • rv1126
    +关注

    关注

    0

    文章

    118

    浏览量

    4430
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RV1126开发板数据手册

    本产品是基于瑞芯微 RV1126 媒体处理芯片开发的 IPC 开发板,分为核心板和底板, 且 RV1126RV1109 是 pin
    发表于 08-28 11:09 22次下载

    RV1126 实现简单UI开发示例

    RV1126实现简单UI开发实例
    的头像 发表于 04-09 16:08 1233次阅读
    <b class='flag-5'>RV1126</b> <b class='flag-5'>实现</b><b class='flag-5'>简单</b>的<b class='flag-5'>UI</b><b class='flag-5'>开发</b><b class='flag-5'>示例</b>

    基于RV1126开发板实现二维码识别方案

    RV1126实现二维码识别方案
    的头像 发表于 04-11 14:48 857次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>二维码识别方案

    RV1126 实现人脸检测方案

    基于RV1126开发板实现人脸检测方案,充分体现了电子方面的实践经验和目标检测技术。
    的头像 发表于 04-14 09:25 1036次阅读
    <b class='flag-5'>RV1126</b> <b class='flag-5'>实现</b>人脸检测方案

    基于RV1126开发板的按键测试方法与例程

    RV1126开发板的按键测试方法与例程详细描述
    的头像 发表于 04-15 17:03 1206次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>的按键测试方法与例程

    基于RV1126开发板实现人员检测方案

    RV1126开发板实现人员检测:在图像中找出人。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像,算法代码负责人员检测功能。
    的头像 发表于 04-18 17:14 220次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人员检测方案

    基于RV1126开发板实现人脸识别方案

    RV1126开发板实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,按键监听负责修改数据库
    的头像 发表于 04-18 16:55 83次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人脸识别方案

    基于RV1126开发板实现驾驶员行为检测方案

    RV1126开发板实现驾驶员行为检测:通过图像识别出这几种行为:打电话、抽烟、疲劳驾驶。
    的头像 发表于 04-18 17:47 354次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>驾驶员行为检测方案

    基于RV1126开发板实现安全帽检测方案

    RV1126开发板实现安全帽检测:在图像中找出人头/安全帽。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像,算法代码负责安全帽检测功能。
    的头像 发表于 04-21 09:20 1002次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>安全帽检测方案

    基于RV1126开发板实现人脸检测方案

    RV1126开发板实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 10:21 99次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人脸检测方案

    基于RV1126开发板实现人脸识别方案

    RV1126开发板实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,按键监听
    的头像 发表于 04-21 10:24 107次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人脸识别方案

    基于RV1126开发板实现人脸检测方案

    RV1126开发板实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 14:00 13次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人脸检测方案

    基于RV1126开发板实现多路网络摄像头取流方案

    RV1126实现多路网络摄像头取流方案
    的头像 发表于 04-21 14:39 49次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>多路网络摄像头取流方案

    基于RV1126开发板实现网络摄像头方案

    RV1126开发板实现开发实例,抓取摄像头数据、图像送入编码器进行编码压缩、以及把压缩后的数据通过RTSP协议发送出去的简单核心
    的头像 发表于 04-21 14:56 2229次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>网络摄像头方案

    基于RV1126开发板实现人脸检测方案

    RV1126开发板实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 17:59 1199次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板实现</b>人脸检测方案