首页 > 其他分享 >RV1126中AI例程解析

RV1126中AI例程解析

时间:2024-07-21 15:28:12浏览次数:13  
标签:初始化 函数 RGA 例程 RV1126 ret MPI AI RK

本次以基于rockx组件的ssd目标检测为例

官方提供的例程中有2个C++文件及2个头文件

其中:atk_ssd_object_recognize.cpp是一个使用 Rockchip 嵌入式平台进行图像处理的示例程序。整体功能是初始化视频输入、进行图像处理(RGA),然后将结果输出到显示终端。以下是代码的详细解释:

引入头文件

#include "atk_ssd_object_recognize.h" 

引入自定义的头文件,该文件可能包含与目标检测相关的功能声明。

主函数

int main(int argc, char *argv[]) 

主入口函数,接受命令行参数。

变量初始化

RK_CHAR *pDeviceName_01 = "rkispp_scale0"; RK_CHAR *pDeviceName_02 = "rkispp_scale1";
 RK_CHAR *pcDevNode = "/dev/dri/card0"; char *iq_file_dir = "/etc/iqfiles"; RK_S32 
s32CamId = 0; RK_U32 u32BufCnt = 3; RK_U32 fps = 20; int ret;
  • pDeviceName_01: 指定视频输入设备。
  • pDeviceName_02: 另一个视频输入设备(没被使用)。
  • pcDevNode: 图形输出设备节点。
  • iq_file_dir: 图像处理相关的文件路径。
  • s32CamId: 摄像头ID。
  • u32BufCnt: 缓冲区数量。
  • fps: 帧率。
  • ret: 用于存储函数返回值的变量。

打印初始化信息

printf("\n###############################################\n"); printf("VI CameraIdx: %d\npDeviceName: %s\nResolution: %dx%d\n\n", s32CamId,pDeviceName_01,video_width,video_height); 

打印当前设置的摄像头索引、设备名称和分辨率。

ISP 初始化

if (iq_file_dir) { #ifdef RKAIQ // 初始化ISP #endif } 

如果 IQ 文件目录存在,执行 ISP(图像信号处理)模块的初始化和运行。

视频输入通道配置

RK_MPI_VI_SetChnAttr(s32CamId, 0, &vi_chn_attr_01); ret |= RK_MPI_VI_EnableChn(s32CamId, 0); 

设置并启用视频输入通道,配置参数包括视频节点名、缓冲区数量、分辨率和像素格式等。

RGA(图像重数组件)初始化

RGA_ATTR_S stRgaAttr_01; ret = RK_MPI_RGA_CreateChn(0, &stRgaAttr_01); 

初始化 RGA,并设置输入输出图像的相关参数,例如旋转角度、分辨率和图像类型。

视频输出通道配置

ret = RK_MPI_VO_CreateChn(0, &stVoAttr); 

创建视频输出通道,并设置输出设备、图像类型及其显示区域等。

通道绑定

ret = RK_MPI_SYS_Bind(&stSrcChn, &stDestChn); 

将视频输入通道 (VI) 绑定到 RGA 通道,实现数据流的传输。

创建线程

pthread_create(&rkmedia_rknn_tidp, NULL, rkmedia_rknn_thread, NULL); 

创建一个新的线程来处理其他任务,这里具体的处理逻辑在 rkmedia_rknn_thread 函数中实现。

主循环

while (!quit) { usleep(500000); } 

保持主程序运行,直到 quit 变量被设置为非零值,程序才会退出。

资源释放

ret = RK_MPI_SYS_UnBind(&stSrcChn, &stDestChn); RK_MPI_VO_DestroyChn(0); RK_MPI_RGA_DestroyChn(0); RK_MPI_VI_DisableChn(s32CamId, 0); 

在程序结束时,解除通道绑定并销毁所有相关的通道,释放资源。

返回值

return 0; 

程序正常结束时返回0。

整段代码主要实现了从摄像头抓取图像,并通过 RGA 进行处理,再输出到显示设备的过程。它涉及到多个硬件模块的初始化、配置和管理,以及内存的管理和线程的使用,适合用于实时视频处理等应用。

ssd.cc文件是一个目标检测算法的后处理部分,主要是针对 SSD(Single Shot MultiBox Detector)模型的实现。代码中包含了文件的读取、框的解码、筛选有效结果、非极大值抑制(NMS)和最终结果的输出等功能。以下是代码的详细分析和各个组件的含义:

主要结构和函数

完整性总结

  1. 包含的头文件:

    • stdio.h: 标准输入输出库,提供文件和标准输入输出功能。
    • stdlib.h: 标准库,提供内存分配和其他功能。
    • math.h: 数学库,提供数学函数(如 exp 和 log)。
    • string.h: 字符串操作函数。
    • sys/time.h: 提供获取系统时间的功能。
    • "ssd.h": 假定是 SSD 模型相关的自定义头文件。
  2. 常量定义:

    • BOX_PRIORS_TXT_PATH 和 LABEL_NALE_TXT_PATH 是存储箱体先验和标签名称的文件路径。
    • MIN_SCORE 和 NMS_THRESHOLD 分别是最低置信度和非极大值抑制的阈值。
  3. 全局变量:

    • labels[NUM_CLASS]: 存储类别标签。
    • box_priors[4][NUM_RESULTS]: 存储框的先验信息。
  4. 获取当前时间:

    • getCurrentTimeUs(): 获取当前时间(以微秒为单位),用于时间测量。
  5. 读取文件的函数:

    • readLine: 从文件中读取一行,并动态分配内存以保存它。
    • readLines: 读取文件中的多行,返回读取的行数。
    • loadLabelName: 从指定文件加载类名并存储到 labels 数组。
    • loadBoxPriors: 从指定文件加载框的先验数据。
  6. 计算重叠度的函数:

    • CalculateOverlap: 计算两个边界框之间的 IoU(Intersection over Union)
  7. 激活函数:
    • unexpit(float x): 反向 Sigmoid 函数,用于将模型输出值转化为原始值。

相关文章

  • 最新SparkAi创作系统,ChatGPT系统源码,AI绘画/AI视频生成/AI智能体一站式AIGC系统
    一、人工智能人工智能技术正在迅速发展,AI语言模型、AI绘画、AI视频在多个领域都有广泛的应用。它们不仅在科技创新方面表现出色,还在艺术创作、内容生产和商业应用中展现出巨大的潜力。AI语言模型可以用于自动化内容生成、智能客服、文本翻译等方面,大大提升了工作效率和用户体......
  • Datawhale AI夏令营学习笔记 (3)
        在上一篇DatawhaleAI夏令营学习笔记(2)-CSDN博客中我们尝试使用了机器学习的方法进行回归预测。本篇,我们分为两个方面来探索。一方面,我们将继续使用机器学习的方法,在原有的数据上做更多特征工程,在预测上我们使用更多的算法模型。另一方面,我们尝试使用深度学习的方......
  • AI工具开发者的新盟友与新机遇
      随着生成式人工智能(AIGC)在软件开发领域的应用日益广泛,开发者的工作方式正在发生深刻变化。从代码生成、错误检测到自动化测试,AI工具正在成为开发者的得力助手,但也引发了关于开发者职业前景和技能需求变化的讨论。那么,AI究竟是在帮助开发者还是取代他们呢?  一、AI工具为开......
  • 记录 OpenWrt 执行 opkg update 命令报错 Failed to download,但是换源无效且源用浏览
    记录OpenWrt执行opkgupdate命令报错Failedtodownload,但是换源无效且源用浏览器可访问的解决方案解决方法首先给出解决方法:)网络-->接口-->WAN-->编辑-->高级设置取消勾选“自动获取DNS服务器”-->在使用自定义的DNS服务器一栏中添加并输入可用的DNS地址。......
  • 分享6个AI一键生成PPT的工具【国内最新】
    一、引言PPT(PowerPoint演示文稿)在商业演示、教育授课以及各种演讲中扮演着关键角色。然而,制作一份既吸引人又能有效传递信息的PPT并不是一件容易的事。幸运的是,随着人工智能技术的发展,现在有一些免费的AI工具可以帮助你轻松地一键生成PPT,让整个设计过程变得更加简单和有趣......
  • 猫头虎推荐2024最新AI副业大全 :50个AI项目任你选
    猫头虎......
  • 最新探探龙AI智能群控打金脚本
    1.引言在线游戏平台通过提供多样化的游戏内容,满足了用户在休闲娱乐方面的需求。探探龙平台通过引入自动化脚本技术,进一步提升了用户的游戏体验和收益。本文介绍的自动化脚本系统,旨在通过技术手段辅助用户在游戏中获取更多的金豆,进而兑换京东卡等奖励。2.系统功能2.1脚本......
  • 最新探探龙AI智能群控打金脚本
    1.引言在线游戏平台通过提供多样化的游戏内容,满足了用户在休闲娱乐方面的需求。探探龙平台通过引入自动化脚本技术,进一步提升了用户的游戏体验和收益。本文介绍的自动化脚本系统,旨在通过技术手段辅助用户在游戏中获取更多的金豆,进而兑换京东卡等奖励。2.系统功能2.1脚本......
  • AI跟踪报道第48期-新加坡内哥谈技术-本周AI新闻:Open AI 和 Mistral的小型模型
       每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https:......
  • 探索AI驱动的未来:Open API如何赋能企业数字化转型
    在当今这个数据为王、智能引领的时代,人工智能(AI)已不再是遥远的概念,而是深深融入到各行各业,成为推动企业数字化转型的重要引擎。随着技术的不断成熟与开放,OpenAPI(开放应用程序接口)作为一种连接技术与业务的桥梁,正以前所未有的方式赋能企业,加速其智能化进程。本文将深入探讨Open......