当前位置: 首页 > ai >正文

基于亚博K210开发板——物体分类测试

开发板

亚博K210开发板
在这里插入图片描述

实验目的

本次测试主要学习 K210 如何物体分类,然后通过 LCD 显示屏实时显示当前物体的分类名称。本节采用百度出的 PaddlePaddle 平台开发。

实验元件

OV2640 摄像头/OV9655 摄像头/GC2145 摄像头、LCD 显示屏
在这里插入图片描述

硬件连接

K210 开发板出厂默认已经安装好摄像头和显示器,只需要使用 type-C 数据线连接 K210 开发板与电脑即可。

实验原理

Kendryte K210 具备机器视觉能力,是零门槛机器视觉嵌入式解决方案。它可以在低功耗情况下进行卷积神经网络计算。相关介绍请看前面所述。

  • 百度大脑 AI Studio 是针对 AI 开发者的在线一体化开发平台。 该平台集成了 AI 教程, 深度学习样例工程, 各领域典数据集,强大的云端算力资源及存储资源, 从而解决开发者在 AI 学习过程中的一系列难题, 例如样例代码难以直接应用, 高质量的数据集不易获得,以及本地环境难以使用大体量数据集进行模型训练等等.
  • 百度 AI Studio 平台已经为使用者预置了 Python 语言环境, 以及百度PaddlePaddle 深度学习开发框架.
  • 同时该平台还提供了 PaddlePi-K210 开发套件官方项目,开发者只需要复制相应的项目,重新训练,即可获取模型。您也可以修改成自己的数据集,进行训练, 以适配您的应用场景。
    AI Studio 基本使用可以参考百度 AI 官网。
    这是官方其他用户的:
    https://aistudio.baidu.com/projectdetail/59854

亚博测试通过的项目:
https://aistudio.baidu.com/aistudio/projectdetail/403452?shared=1
在这里插入图片描述

  • 点击上图网址的“运行一下”。会弹出登录,大家自行注册百度账号或者 github账号登录。
  • 登录完成可以选择 fork 到自己项目中,或者直接运行,点击启动环境,可以选择 CPU 或者 GPU 版本,GPU
    是需要算力卡的,一般每天会有 12 个小时使用,一般不追加速度直接选择 CPU 即可。如下图:
    在这里插入图片描述
  • 启动环境需要一段时间,启动完成会提示环境启动成功,点击进入即可。
    为了简单起见,在此训练一个花的五分类模型。
1、fork 过来的项目已经带有 flower_photos.zip 数据集作为训练数据。
2、数据存储在 data/data2815/ 目录下,以压缩包的形式存在。
3、开发者只需要按顺序执行 cell 的代码,就能生成 paddle 模型,为了能在亚
博 K210 开发板上运行,cell8 开始是模型转换相关代码。
4、执行模型转换的相关代码后会在左边的根目录产生 mobilenet.kmodel 模型。
模型生成完成后,需要把模型运行到亚博 K210 开发板上。
5、下载 kmodel 到本机电脑上等待后续开发板调用。

在这里插入图片描述

实验步骤

  1. 代码流程
    系统内部初始化部分:
系统时钟初始化
串口初始化
硬件引脚初始化
IO 电压设置
系统中断初始化
Flash 初始化

外部硬件初始化

Lcd 初始化
Ov2640 初始化

物体分类初始化

在这里插入代码片

物体分类业务逻辑层

等待摄像头采集完成
传入摄像头采集的图像到 KPU 运行模型
等待 KPU 处理完成
获取 KPU 最终处理的结果
把 KPU 处理的结果带入区域层计算最终标记分类结果
  1. 核心代码如下
int main()
{/* Set CPU and dvp clk */sysctl_pll_set_freq(SYSCTL_PLL0, 800000000UL);sysctl_pll_set_freq(SYSCTL_PLL1, 400000000UL);sysctl_pll_set_freq(SYSCTL_PLL2, 45158400UL);sysctl_clock_enable(SYSCTL_CLOCK_AI);//uarths_init();plic_init();io_set_power();io_init();/* LCD init */printf("LCD init\n");lcd_init();lcd_set_direction(DIR_YX_LRUD);lcd_clear(BLACK);lcd_draw_picture_half(0, 0, 320, 240, logo);lcd_draw_string(70, 40, "Hello Yahboom!", RED);lcd_draw_string(70, 60, "5flower classification demo!", BLUE);sleep(1);/* DVP init */printf("DVP init\n");dvp_init(8);dvp_sccb_set_clk_rate(1000000);//为了兼容GC2145不能太高的速率dvp_set_xclk_rate(24000000);dvp_enable_burst();dvp_set_output_enable(0, 1);dvp_set_output_enable(1, 1);dvp_set_image_format(DVP_CFG_RGB_FORMAT);dvp_set_image_size(320, 240);int OV_type;OV_type=OVxxxx_read_id();/* 初始化摄像头 */if(OV_type == OV_9655){ov9655_init();}   else if(OV_type == OV_2640) {ov2640_init();}else //读取gc2145摄像头{uint16_t device_id;gc2145_read_id(&device_id);printf("device_id:0x%04x\n", device_id);if(device_id != GC2145_ID){printf("Camera failure\n");return 0;//打不开摄像头,结束}printf("This is the GC2145 camera\n");gc2145_init();//初始化}kpu_image.pixel = 3;kpu_image.width = 320;kpu_image.height = 240;image_init(&kpu_image);display_image.pixel = 2; //2->3 LIUSENdisplay_image.width = 320;display_image.height = 240;image_init(&display_image);crop_image.pixel = 3;crop_image.width = 224;crop_image.height = 224;image_init(&crop_image);//存放AI图像的地址,供AI模块进行算法处理(红色、绿色、蓝色/分量地址)dvp_set_ai_addr((uint32_t)kpu_image.addr, (uint32_t)(kpu_image.addr + 320 * 240), (uint32_t)(kpu_image.addr + 320 * 240 * 2));//设置采集图像在内存中的存放地址,可以用来显示dvp_set_display_addr((uint32_t)display_image.addr);//图像开始采集中断| 图像结束采集中断dvp_config_interrupt(DVP_CFG_START_INT_ENABLE | DVP_CFG_FINISH_INT_ENABLE, 0);//禁用自动接收图像模式dvp_disable_auto();/* DVP interrupt config */printf("DVP interrupt config\n");plic_set_priority(IRQN_DVP_INTERRUPT, 1);               //设置中断优先级plic_irq_register(IRQN_DVP_INTERRUPT, dvp_irq, NULL);   //注册外部中断函数plic_irq_enable(IRQN_DVP_INTERRUPT);                    //使能外部中断/* init model *///加载 kmodel,需要与 nncase 配合使用if (kpu_load_kmodel(&task1, model_data) != 0){printf("Cannot load kmodel.\n");exit(-1);}sysctl_enable_irq();/* system start */printf("System start\n");while (1){g_dvp_finish_flag = 0;dvp_clear_interrupt(DVP_STS_FRAME_START | DVP_STS_FRAME_FINISH);dvp_config_interrupt(DVP_CFG_START_INT_ENABLE | DVP_CFG_FINISH_INT_ENABLE, 1);while (g_dvp_finish_flag == 0);image_crop(&kpu_image, &crop_image, 48, 8);g_ai_done_flag = 0;if (kpu_run_kmodel(&task1, crop_image.addr, DMAC_CHANNEL5, ai_done, NULL) != 0){printf("Cannot run kmodel.\n");exit(-1);}while (!g_ai_done_flag);float *features;size_t output_size;// 获取 KPU 最终处理的结果  KPU任务句柄  结果的索引值  结果  大小(字节)kpu_get_output(&task1, 0, &features, &output_size);size_t cls = argmax(features, 5);const char *text = NULL;switch (cls){case 0:text = "daisy";break;case 1:text = "dandelion";break;case 2:text = "roses";break;case 3:text = "sunflowers";break;case 4:text = "tulip";break;}/* display pic*/if (features[cls] > PROB_THRESH)ram_draw_string(display_image.addr, 150, 20, text, RED);lcd_draw_picture(0, 0, 320, 240, (uint32_t *)display_image.addr);}}
  1. 编译调试,烧录运行
    进入自己项目 build目录,运行以下命令编译。
cmake .. -DPROJ=watchdog -G "MinGW Makefiles"
make
  1. 代码烧录方法
    打开 kflash 将 object_detection.bin 文件烧录到 K210 开发板上。
    如果想把代码和模型文件分开烧录,需要修改代码
#define  LOAD_KMODEL_FROM_FLASH  0

改为

#define  LOAD_KMODEL_FROM_FLASH  1

然后重新生成 bin 文件,这个时候我们需要把模型文件和 bin 文件打包成一个kfpkg 文件在烧录

实验现象

LCD 显示器先显示图片 logo 和文字,一秒后打开摄像头采集的画面,并且实时检测 20 种物体并标记位置和显示识别的结果。

实验总结

  • 物体分类使用的是百度人工智能 paddlepaddle 的平台。
  • 基于 paddlepaddle 平台可以比较轻松实现物体分类的功能。
http://www.xdnf.cn/news/9538.html

相关文章:

  • 【设计模式】责任链
  • PostgreSQL 内置扩展列表
  • HTML应用指南:利用GET请求获取全国罗森门店位置信息
  • 8000字回顾所有的HTML标签~
  • BSS / OSS 是什么
  • DBus总线详解
  • 华为OD机试真题——数字加减游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • uni-app 提供的页面跳转方法详细解释及其区别
  • 麒麟v10,arm64架构,编译安装Qt5.12.8
  • IEEE PRMVAI 2025 WS 26:计算机视觉前沿 Workshop 来袭!
  • 第十一章 管理Linux软件包和进程
  • 阅读笔记——理解什么是LLM大语言模型
  • 解决 NestJS 中热重载与实体类自动导入不能兼容的问题
  • 使用nvm use切换版本号,报exit status 5
  • spring4第3课-ioc控制反转-详解依赖注入的4种方式
  • 独立站引流新策略:AB站投放法助力突破瓶颈
  • JavaScript 中,require 和 import
  • zabbix6.x 监控mysql数据库
  • 【深度剖析】义齿定制行业数字化转型模式创新研究(上篇:行业概况)
  • Vulnhub_Zico2_wp
  • LNMP 架构部署
  • 《基于AIGC的智能化多栈开发新模式》研究报告重磅发布! ——AI重塑软件工程,多栈开发引领未来
  • 腾讯混元开源语音数字人模型 HunyuanVideo-Avatar:开启数字人 “能说会唱” 新时代
  • 上海AI Lab 提出ULTRAIF方法,通过两阶段过程合成高质量指令遵循数据集,代码与数据集完全开源!
  • 基于GA遗传优化的FIR滤波器幅频相频均衡补偿算法matlab仿真
  • 网页前端开发(基础进阶1)
  • KONG根据请求参数限流
  • 线代第四章线性方程组第四节:方程组解的结构
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • DeepSeek实战:构建智能问答系统的完整指南