示例项目
AI 视觉
从 AIC 生成应用并部署到相机
AI 应用生成
- 打开浏览器,登录到AI Creator。点击【项目中心】进入项目列表。找到已经训练完成的【芯片分割】项目(AICreator模型如何训练请参考AICreator用户使用说明文档),点击【进入项目】可查看模型详情。如下图所示:

注: 由于模型是在 x86 平台下训练的,如果希望在智能相机或边缘端运行,还需要对模型进行优化。AICreator 内置了 AIMO 模型优化功能,支持一键优化和高级优化。针对运行模型的设备芯片型号,一键优化预设了一系列参数,用户只需选择运行模型的设备芯片型号即可。我们实验使用的智能相机芯片型号为 QCS8550,并推荐将模型转换为 QNN 格式以进行运行。
- 点击左侧【 模型优化 】标签,在优化发布界面,点击【一键优化】,选择 QNN 格式和 QCS8550 芯片型号,即可完成模型优化。

- 点击左侧【部署】标签,点击【生成智能相机应用】,填写应用ID、应用版本、应用名称等应用信息,并选择图片数据后点击确定,即可生成AI应用。
💡注意
第二代智能相机默认是Linux系统,需选择 智能相机(Linux)


AI应用部署到相机
- 在节点管理页面,点击【集成节点】-【IP集成】按钮,在弹出的表单中,"节点类型"选项全部勾选,并输入节点名称和智能相机的IP地址。 输入完成后,点击确定。

- 智能相机集成成功后,返回项目的应用生成界面,选择上一小节中生成的智能相机应用并点击【部署】,然后选择已集成的智能相机节点,点击【开始部署】
- 点击后将会跳转到【部署记录界面】,当【部署状态】为成功后,表示该应用已部署完成。

- 返回智能相机界面查看应用列表,已新增一条数据,即表示部署成功。运行即可查看推理效果。

- 点击列表中的【启动/停止应用】按钮,即可运行应用示例。
本地构建相机应用
除了通过 AIC 部署应用到相机之外,还可以自己构建相机应用,构建方法如下。
生成示例应用(含示例源码)
为了帮助开发者快速学习上手,AidLux 系统默认提供 appc 的命令行工具,可以直接生成基于 SmartVision SDK 的示例应用。
示例代码分为 C++ 和 Python 两种语言版本。
appc 使用说明
进入 AidLux 命令行终端,输入 `appc -h` 即可获取使用帮助。
(1)创建项目
可通过命令:appc init 外加指定参数来创建不同的项目类型。
具体操作信息可通过 appc init --help 命令来获取更多帮助。
(2)打包项目
当开发完成之后,可通过命令 appc package 来打包具体项目。
命令格式:appc package -p <项目路径>Camera 上执行以下命令:
##### 在本地目录生成C++的示例代码
aidlux@aidlux:~$ appc init -t "cpp" -n demoApp
aidlux@aidlux:~$ cd demoApp##### 在本地目录生成python的示例代码
aidlux@aidlux:~$ appc init -t "py" -n demoApp
aidlux@aidlux:~$ cd demoApp应用源码说明
文件结构如下:
├── README.md
├── config #配置文件
│ ├── camera.config #相机参数配置文件(需要补上相机参数配置的说明)
│ ├── algorithm.config #算法参数配置文件(需要补上算法参数配置的说明)
│ ├── model.config #模型相关配置文件
├── imgs #静态图片目录
├── lib #三方库目录
├── manager.sh #应用启动脚本
├── model #模型文件目录
│ ├── Segment_V41_0
│ │ └── det_bestModelIoU_xxx_int8.serialized.bin #模型文件
│ ├── det.txt
│ └── modelInfo.json #模型配置文件
├── release.txt #应用说明文件
├── src #应用主程序目录
│ ├── CMakeLists.txt #cmake编译文件
│ ├── main.cpp #应用主代码
│ ├── main.hpp #应用主代码头文件
│ └── model.cpp #模型加载主代码
├── svapp #可执行程序文件├── config #配置文件
│ ├── camera.config #相机参数配置文件(需要补上相机参数配置的说明)
│ ├── algorithm.config #算法参数配置文件(需要补上算法参数配置的说明)
│ ├── model.config #模型相关配置文件
├── lib #三方库目录
├── manager.sh #应用启动脚本
├── model #模型文件目录
│ ├── Segment_V41_0
│ │ └── det_bestModelIoU_xxx_int8.serialized.bin #模型文件
│ ├── det.txt
│ └── modelInfo.json #模型配置文件
├── release.txt #应用说明文件
├── svapp.py #应用主代码源码编译并打包部署到相机
C++ 示例
1. 确认相机cmake编译环境
执行 cmake 判断是否安装 cmake 命令。
##### 未安装cmake
aidlux@aidlux:~$ cmake
bash: cmake: command not found如果没有安装,执行以下命令安装 cmake。
aidlux@aidlux:~$ sudo apt-get update
aidlux@aidlux:~$ sudo apt-get install cmake安装完成后,执行 cmake 命令出现帮助信息即为安装成功,如图所示:

2. 编译源代码
Camera 上执行:
##### 进入示例应用目录
aidlux@aidlux:~$ cd ~/demoApp
##### 执行编译命令
aidlux@aidlux:~/demoApp$ cd src/
aidlux@aidlux:~/demoApp/src$ mkdir build
aidlux@aidlux:~/demoApp/src$ cd build/
aidlux@aidlux:~/demoApp/src/build$ cmake ..
aidlux@aidlux:~/demoApp/src/build$ make编译完成后,会在应用根目录下生成可执行文件 svapp

3. 应用打包并部署
Camera 上执行:
##### 执行应用打包命令
aidlux@aidlux:~$ appc package -p ~/demoApp打包完成后,会在应用目录下生成可直接部署的应用包:

至此,整个应用打包完成,接下来进行应用部署流程,可以将应用部署在本相机直接预览效果,也可以将应用部署到其他的相机设备上
场景 1:若需要将应用部署到本相机设备上:
Camera 上执行: (1) 执行 sve 应用安装命令
# 执行sve应用安装命令
aidlux@aidlux:~$ appc install ~/demoApp.zip💡注意:
若安装过程提示应用已存在,可以通过加入 "-f" 参数进行强制覆盖安装:
appc install -f ~/demoApp.zip
(2) 重启智能相机应用运行框架
💡注意:
需要重启相机应用运行框架服务后,智能相机应用列表才能重新加载,并展示解压后的应用
##### 进入智能相机应用框架目录
cd /opt/aidlux/cpf/aid-sve/
##### 重启相机应用运行框架
sudo ./manager.sh restart(3) 打开相机管理网页,进入【任务管理】,查看部署的应用.
若应用列表中显示出示例应用,则表示已经部署成功
场景 2:若需要将应用部署到其他相机上,需要先将应用包拷贝到 PC 上
PC上执行: (1) 将应用包拷贝到 PC 本地
# 将相机上打包后的应用包拷贝到 PC 本地
scp aidlux@[camera IP]:/home/aidlux/demoApp.zip ./(2) 打开其他相机管理网页,进入【任务管理】,点击【导入应用包】,选择 PC 上的应用包

导入后,若应用列表中显示出示例应用,则表示已经部署成功

从 SVS 生成应用并部署到相机
Updating ...
多媒体
QT 开发指南
QT5开发环境
1. 确认相机qmake编译环境
执行 qmake 判断是否安装 qmake 命令。
##### 未安装qmake
aidlux@aidlux:~$ qmake
bash: qmake: command not found如果没有安装,执行以下命令安装 qmake。
aidlux@aidlux:~$ sudo apt-get update
aidlux@aidlux:~$ sudo apt install qt5-qmake安装完成后,执行 qmake 命令出现帮助信息即为安装成功,如图所示:

2. 安装qt核心模块
安装必要的核心模块
sudo apt update
sudo apt install qtbase5-dev💡注意:
如果需要使用QT框架的其他模块,请自行安装
3. 编译源代码
示例代码:
main.cpp
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.show();
return a.exec();
}test.pro
QT += core gui widgets
SOURCES += \
main.cpp \编译程序:
##### 进入示例应用目录
aidlux@aidlux:~$ cd ~/test
##### 执行编译命令
aidlux@aidlux:~/test/$ mkdir build
aidlux@aidlux:~/test/$ cd build/
aidlux@aidlux:~/test/build$ qmake ..
aidlux@aidlux:~/test/build$ make编译完成后,会在应用build目录下生成可执行文件 test

运行程序:
使用HDMI直连相机后,运行程序,将显示出示例的QT桌面应用窗口
##### 运行示例应用
aidlux@aidlux:~/test/build$ ./test💡注意:
QT桌面应用 必须在由HDMI直连相机下的Linux桌面进行显示
桌面开发环境差异
aidlux桌面
对GPU有着更好的支持,因此推荐使用Smart Vision SDK的FD方案接口
需要程序自行在循环内部,通过获取零拷贝的相机视频流套接字,得到更高的渲染性能
##### 打开相机
int start_camera(int8_t idx)
##### 获取视频流套接字
int get_fd_with_meta_extern(int idx, AidluxSocketfdInfo &out_meta)
##### 关闭相机
int8_t close_camera(int8_t idx)xfce4桌面
本身对GPU的兼容性较差,因此推荐使用Smart Vision SDK的共享内存方案接口
无需自行控制调用频率, 通过回调函数直接获取到YUV图片数据
##### 无参形式使用默认配置 打开相机
int start_camera_without_parameter(GetImageCB cb, int8_t preview, int8_t idx)
##### 启动图像捕获
void start_camera_capture(int idx)
##### YUV格式图像数据转BGR格式
bool yuv_to_bgr_thumbnail(cv::Mat &destMat, int srcSliceHeight, int srcYPlaneStride, int planeOffset, void *memdata, int idx)
##### 停止图像捕获
void stop_camera_capture(int idx)
##### 关闭相机
int8_t close_camera(int8_t idx)机器人或场景示例
待补充。