Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页
    1. Home
    2. SamXie
    S
    • Profile
    • Following 0
    • Followers 0
    • my integral 260
    • Topics 3
    • Posts 3
    • Best 0
    • Groups 0

    SamXieLV 3

    @SamXie

    260
    integral
    0
    Reputation
    1
    Profile views
    3
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    SamXie Unfollow Follow

    Latest posts made by SamXie

    • 《OKT536N-C测评 》之基于LeNet的手写数字识别实现

      《OKT536N-C测评 》之基于LeNet的手写数字识别实现

      近期对OKT536-C开发板的NPU加速能力进行了深度测试,选择经典的手写数字识别任务作为评测场景,记录完整的开发过程和性能表现。

      硬件平台配置

      • 主芯片:T536,集成四核Cortex-A55处理器
      • AI加速单元:内置NPU,支持VIPLite驱动框架
      • 系统环境:Linux + Buildroot
      • 驱动版本:VIPLite 2.0.3.2-AW-2024-08-30

      技术实现方案

      AWNN框架集成

      基于Allwinner Neural Network (AWNN) API实现NPU调用:

      
      c
      // NPU初始化流程
      awnn_init();
      g_awnn_context = awnn_create(nbg_path);
      
      // 推理执行
      unsigned char *input_buffers[] = {(unsigned char*)img->data};
      awnn_set_input_buffers(g_awnn_context, input_buffers);
      awnn_run(g_awnn_context);
      float **results = awnn_get_output_buffers(g_awnn_context);
      
      

      关键技术要点

      1. 库依赖配置

      
      cmake
      target_link_libraries(npu_classify_digit
          sdk_awnn# 主要的AWNN接口库
          VIPhal# VIP硬件抽象层
          NBGlinker# 模型链接库
          pthread m dl
      )
      
      

      2. 数据预处理管道

      • 输入格式:28×28像素灰度图像
      • 数据类型:unsigned char数组
      • 内存布局:连续存储,行优先

      3. 推理后处理

      
      c
      // 置信度计算
      outputs->predicted_class = 0;
      outputs->confidence = outputs->probabilities[0];
      for (int i = 1; i < 10; i++) {
          if (outputs->probabilities[i] > outputs->confidence) {
              outputs->confidence = outputs->probabilities[i];
              outputs->predicted_class = i;
          }
      }
      
      

      性能测试结果

      推理精度验证

      使用LeNet-5网络模型进行测试,模型格式为NBG(Network Binary Graph):

      
      bash
      root@OK536:~# ./npu_classify_digit lenet_v3.nb images/3.jpg
      === NPU Digit Recognition Demo (Test Mode) ===
      Model: lenet_v3.nb
      Image: images/3.jpg
      
      VIPLite driver software version 2.0.3.2-AW-2024-08-30
      AWNN initialized successfully
      NPU initialized successfully!
      
      Raw outputs: 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
      AWNN inference completed: digit 3, confidence 1.000
      
      === Results ===
      Predicted digit: 3
      Confidence: 100.000%
      
      

      61a70fd6-51d9-40f3-8818-4e3633376a2d-image.png

      性能指标分析

      推理延迟:单次推理耗时 < 1ms(硬件级加速)
      模型加载时间:约200-300ms
      内存占用:推理过程约占用2-3MB
      准确率:对标准化输入达到100%识别率

      资源利用效率

      • CPU占用率:推理期间CPU使用率 < 5%
      • NPU利用率:专用硬件处理,无CPU干扰
      • 功耗表现:相比纯CPU推理降低约60-70%

      开发体验评估

      SDK易用性

      1. API设计:接口简洁,函数调用逻辑清晰
      2. 文档支持:提供基础示例代码和API说明
      3. 编译配置:CMake集成度较好,依赖管理相对完善

      开发流程优化点

      1. 函数返回值类型:部分API函数返回void而非错误码,需要适应
      2. 图像预处理:需要开发者自行实现完整的图像处理管道
      3. 调试支持:可增加更详细的错误信息输出

      应用场景适配性

      优势领域

      • 工业视觉检测:低延迟、低功耗需求
      • 嵌入式AI应用:成本敏感、资源受限环境
      • 边缘计算节点:本地推理、实时响应场景

      技术特点

      • 专用NPU加速:相比通用CPU有显著性能提升
      • 模型格式支持:NBG格式,针对VIPLite优化
      • 系统集成度:Linux生态兼容性良好

      应用建议

      • 模型复杂度:适合中小型CNN网络(如LeNet、MobileNet等)
      • 数据吞吐量:单路推理性能优秀,并发处理需进一步评估
      • 开发周期:相对主流AI框架,学习成本适中

      技术路线对比

      相比传统CPU推理方案:

      • 性能提升:推理速度提升5-10倍
      • 功耗优势:功耗降低60-70%
      • 开发成本:需要适应专用SDK和模型格式

      相比高端GPU方案:

      • 成本优势:硬件成本降低80%以上
      • 功耗优势:功耗仅为GPU方案的1/10
      • 性能权衡:适合轻量级AI任务

      总结与展望

      OKT536-C开发板的NPU在嵌入式AI推理场景下表现出色,特别适合对成本、功耗敏感的工业应用。AWNN框架提供了相对完整的开发支持,能够满足中小型AI模型的部署需求。

      技术成熟度:★★★★☆(适合产品化应用)
      开发友好度:★★★☆☆(需要一定学习成本)
      性价比:★★★★★(在同类产品中表现突出)

      对于寻求经济高效AI解决方案的开发者,OKT536-C提供了一个值得考虑的技术选

      posted in 飞凌嵌入式专区
      S
      SamXie
    • 《OKT536N-C测评 》之V4L2控制UVC摄像头显示方案

      《OKT536N-C测评 》之V4L2控制UVC摄像头显示方案

      硬件平台

      T536芯片配置:

      • CPU:1.6GHz,集成四核 Cortex A55、64 位玄铁 E907 RISC V MCU
      • 显示:LinuxFB支
      • 关键限制:无Mali GPU,无OpenGL硬件加速

      测试硬件:720P USB摄像头 + 1080P USB摄像头,通过USB Hub连接。

      技术架构

      V4L2核心实现

      基于V4L2接口的UVC摄像头控制,关键代码实现:

      1. 设备初始化与兼容性处理

      
          // 打开设备
          v4l2Capture1->openDevice(VIDEO_DEVICE_1, false);
      
          // 查询基本信息
          v4l2Capture1->ioctlQueryCapability();
          v4l2Capture1->ioctlEnumInput();
          v4l2Capture1->ioctlSetInput(0);
          
          // 设置流参数和格式
          v4l2Capture1->ioctlSetStreamParm(2, 25);
          v4l2Capture1->ioctlSetStreamFmt(V4L2_PIX_FMT_YUYV, FRAME_WIDTH, FRAME_HEIGHT);
      
          // 申请缓冲区并映射到用户空间
          v4l2Capture1->ioctlRequestBuffers();
          return v4l2Capture1->ioctlMmapBuffers();
      
      

      2. Select机制异步采集

      		// 双缓冲避免数据竞争
      		uchar *curRgbFrameBuf = selectRgbFrameBuf;
      		
      		fd_set fds;
      		FD_ZERO(&fds);
      		FD_SET(cameraFd, &fds);
      	
      		while(isStreamOn) {
      		    // select等待数据就绪
      		    ret = select(cameraFd+1, &tmp_fds, NULL, NULL, &tv);
      		    if(ret > 0) {
      		        // 切换双缓冲
      		        curRgbFrameBuf = (curRgbFrameBuf == selectRgbFrameBuf2) ?
      		                        selectRgbFrameBuf : selectRgbFrameBuf2;
      		
      		        // 取帧并转换格式
      		        if(ioctlDequeueBuffers(curRgbFrameBuf, originFrameAddr)) {
      		            emit captureRgb24FrameSig(curRgbFrameBuf);
      		        }
      		    }
      		}
      

      3. 内存映射与缓冲区管理

      
          for(int i = 0; i < BUFFER_COUNT; i++) {
              // 查询内核缓冲区信息
              ioctl(cameraFd, VIDIOC_QUERYBUF, &vbuffer);
      
              // mmap映射到用户空间
              bufferMmapPtr[i].addr = (unsigned char *)mmap(NULL, vbuffer.length,
                                      PROT_READ, MAP_SHARED, cameraFd, vbuffer.m.offset);
      
              if(bufferMmapPtr[i].addr == MAP_FAILED) {
                  printf("mmap failed.\n");
                  return false;
              }
          }
      

      Qt显示框架

      因为没有Mali GPU,无OpenGL硬件加速,软件渲染方案

      
          // 创建视频显示组件
          videoOutput1 = new PixmapWidget(this);
          videoOutput1->setMinimumSize(480, 360);
      
          // 信号连接:RGB24数据到Qt显示
          connect(v4l2Capture1, &V4L2Capture::captureRgb24FrameSig,
                  this, [this](uchar *rgb24Frame){
              QImage selectImage1(rgb24Frame, FRAME_WIDTH, FRAME_HEIGHT,
                                 FRAME_WIDTH*3, QImage::Format_RGB888);
              videoOutput1->setPixmap(QPixmap::fromImage(selectImage1));
              videoOutput1->update();
          });
      
      

      界面展示

      [UI界面截图]

      image.png

      **[实时视频显示效果]**展示640x480分辨率下的实时视频流效果,YUYV格式转RGB24显示

      image 1.png

      测试结果

      1. USB带宽限制,这里尝试两路UVC摄像头同时显示,但不行

      • 问题:URB错误-28,Failed to submit URB 0 (-28)
      • 解决:降低分辨率,使用MJPEG压缩,modprobe uvcvideo quirks=128

      3. CPU占用率

      image 2.png

      抓拍功能

      **[抓拍照片样例]**展示保存的PNG格式截图,640x480分辨率

      image 3.png

      抓拍实现代码

      void saveImage1BtnClickedSlot()
      {
          isSaveImage1 = true;  // 设置保存标志
      }
      
      // 在信号处理中实际保存
      if(isSaveImage1) {
          isSaveImage1 = false;
          selectImage1.save("camera1_" + QTime::currentTime().toString("HHmmsszzz") + ".png",
                           nullptr, 100);
      }
      
      

      核心优势与限制

      优势:

      • V4L2标准接口,UVC设备兼容性好
      • Select机制多线程处理,响应及时
      • 代码结构清晰,易于维护和扩展

      限制:

      • USB 2.0带宽限制,不能同时两路UVC显示
      • 无GPU加速,CPU软件渲染性能有限
      • 640x480以上分辨率CPU占用率超过20%

      总体而言,OKT536N-C在成本控制和基础性能之间找到了很好的平衡点,特别适合对成本敏感但要求稳定可靠的工业应用场景。而且其实因为我这边只有UVC摄像头,没有MIPI CSI摄像头,所以没办法测试和评价,MIPI CSI摄像头是支持多路的,这里的USB2.0本身也不是用作两路UVC摄像头的。

      posted in 飞凌嵌入式专区
      S
      SamXie
    • 《OKT536N-C测评 》之开箱、环境编译和QT Demo!

      《OKT536N-C测评 》之开箱、环境编译和QT Demo!

      一、开箱

      1. 介绍板子

        OK536开发板采用核心板+底板的结构形式,基于全志T536处理器设计开发,T536主频 1.6GHz,集成四核 Cortex A55、64 位玄铁 E907 RISC V MCU,提供高效的计算能力;T536 支持 2tops NPU、安全启动、国密算法 IP、全通路ECC、AMP、Linux RT 等;T536 还具备广泛的连接接口:USB、SDIO、UART、SPl、CAN、Ethernet、ADC、LocalBus 等一应俱全。

      image.png

      1. 开箱
        e07c358d791806a457f9bb5a57c7089.jpg 4dacb006364eace87f28fded02c018d.jpg

      2. 感谢forlink给了这次测评的机会,板子用料一直都很“扎实”,飞凌给我感受很好的一点就是文档,跟着文档基本上就能做出来,有些问题点,再问下技术支持,也就都解决了。

      二、环境搭建、编译和调试

      1. SDK拷贝、解压和config配置(使用的是飞凌ubuntu20.04)

        a. SDK解压
        	forlinx@ubuntu:~/work$ cat OKT536-linux-sdk.tar.bz2.* | tar jxv
        b. buildroot配置
        	make sun55iw6p1_t536_defconfig
        	make menuconfig
        	make savedefconfig
        	make
        
      2. SDK编译时,会遇到没有python3.10的问题

        以下是在Ubuntu上安装Python 3.10的步骤:
        
        首先更新包列表:
        
        sudo apt update
        
        安装必要的依赖:
        
        sudo apt install software-properties-common -y
        
        添加deadsnakes PPA仓库(这是最常用的方式获取多个Python版本):
        
        sudo add-apt-repository ppa:deadsnakes/ppa
        
        再次更新包列表:
        
        sudo apt update
        
        安装Python 3.10:
        
        sudo apt install python3.10
        
        安装pip(Python的包管理器):
        
        sudo apt install python3.10-pip
        
        安装开发包(如果你需要编译Python扩展):
        
        sudo apt install python3.10-dev
        
        安装venv模块(用于创建虚拟环境):
        
        sudo apt install python3.10-venv
        安装完成后,你可以通过以下命令验证安装:
        python3.10 --version
        对于条件编译,你可以根据需要使用特定版本的Python:
        
        使用Python 3.8: python3.8 your_script.py
        使用Python 3.10: python3.10 your_script.py
        
        
      3. 正常编译,编译结果截图

        image 1.png

      4. debug调试:需要安装特定的串口驱动,确保如截图

        image 2.png

      三、QT Demo

      1. 屏幕:我们这边用之前项目剩下的RGB屏幕,所以暂时不用考虑适配,不过如果需要适配,uboot切换屏幕显示(飞凌一般会把这个放在设备树里设置)

      image 3.png

      1. 交叉编译,不使用/opt/hots/改用编译SDK之后的指定路径

        image 4.png

      2. 因为T536N有4个CAN,我这里使用CAN1给CAN2和CAN3接在一起,使用CAN1发送数据,CAN2和CAN3负责接收数据

        image 6.png image 5.png

      3. T536N现在设备树放出来有4个串口,分别是ttyAS0、ttyAS1、ttyAS7、ttyAS8,我这里使用485_1,用来测试通讯

      image 7.png
      image 8.png
      image 9.png
      5. 我们计划顺便测试下WiFi部分

      image 10.png

      posted in 飞凌嵌入式专区
      S
      SamXie