3. K230 AI Demo 概述#
本章针对K230提供了50多个覆盖多模态的AI Demo应用示例,并开放了源码,提供了使用文档;用户可以通过本章概览AI Demo的应用场景,并在k230开发板上体验;同时参考源码开发基于其他场景的应用demo。
3.1 概述#
K230 AI Demo集成了人脸、人体、手部、车牌、单词续写、语音、dms等模块,包含了分类、检测、分割、识别、跟踪、单目测距等多种功能,给客户提供如何使用K230开发AI相关应用的参考。
3.2 源码位置#
源码路径位于k230 sdk根目录下的src/reference/ai_poc
(k230_sdk/src/reference/ai_poc at main · kendryte/k230_sdk (github.com)或src/reference/ai_poc · kendryte/k230_sdk - 码云 - 开源中国 (gitee.com)),关于每个demo的介绍,请参考下表链接文档:
Demo 子目录 |
说明 |
github链接 |
gitee链接 |
备注 |
---|---|---|---|---|
anomaly_det |
异常检测 |
|||
bytetrack |
多目标跟踪 |
|||
crosswalk_detect |
人行横道检测 |
|||
dec_ai_enc |
h265解码器+AI+h265编码器 |
|||
demo_mix |
demo串烧合集 |
k230_sdk<=1.3 |
||
distraction_reminder |
分神提醒 |
|||
dms_system |
驾驶员监控系统 |
|||
dynamic_gesture |
动态手势识别 |
|||
eye_gaze |
注视估计 |
|||
face_alignment |
人脸对齐 |
|||
face_detection |
人脸检测 |
|||
face_emotion |
面部表情识别 |
|||
face_gender |
性别分类 |
|||
face_glasses |
是否佩戴眼镜分类 |
|||
face_landmark |
人脸密集关键点 |
|||
face_mask |
是否佩戴口罩分类 |
|||
face_mesh |
3D人脸网格 |
|||
face_parse |
人脸分割 |
|||
face_pose |
人脸姿态估计 |
|||
face_verification |
人脸身份验证 |
|||
falldown_detect |
跌倒检测 |
|||
finger_guessing |
猜拳游戏 |
|||
fitness |
动作计数 |
|||
head_detection |
人头检测 |
|||
helmet_detect |
安全帽检测 |
|||
kws |
关键词唤醒 |
|||
licence_det |
车牌检测 |
|||
licence_det_rec |
车牌识别 |
|||
llamac |
英文单词续写 |
|||
nanotracker |
单目标跟踪 |
|||
object_detect_yolov8n |
YOLOV8多目标检测 |
|||
ocr |
ocr检测+识别 |
|||
person_attr |
人体属性 |
|||
person_detect |
行人检测 |
|||
person_distance |
行人测距 |
|||
pose_detect |
人体关键点检测 |
|||
pphumanseg |
人像分割 |
|||
puzzle_game |
拼图游戏 |
|||
segment_yolov8n |
YOLOV8多目标分割 |
|||
self_learning |
自学习(度量学习分类) |
|||
smoke_detect |
吸烟检测 |
|||
space_resize |
手势隔空缩放 |
|||
sq_hand_det |
手掌检测 |
|||
sq_handkp_class |
手掌关键点手势分类 |
|||
sq_handkp_det |
手掌关键点检测 |
|||
sq_handkp_flower |
指尖区域花卉分类 |
|||
sq_handkp_ocr |
手指区域OCR识别 |
|||
sq_handreco |
手势识别 |
|||
traffic_light_detect |
交通信号灯检测 |
|||
translate_en_ch |
英翻中翻译 |
|||
tts_zh |
中文转语音 |
|||
vehicle_attr |
车辆属性识别 |
|||
virtual_keyboard |
隔空虚拟键盘 |
|||
yolop_lane_seg |
路面车道线分割 |
kmodel、image及相关依赖路径位于/mnt/src/big/kmodel/ai_poc
,目录结构如下:
.
│ # images目录下为demo推理的测试图片或测试数据
├── images
│ # kmodel目录下为demo所需的所有kmodel模型
├── kmodel
│ # utils目录下存放的是demo推理所用的工具文件
└── utils
3.3 编译及运行程序#
本章节基于kendryte/k230_sdk: Kendryte K230 SDK (github.com)或kendryte/k230_sdk - 码云 - 开源中国 (gitee.com)的最新版本源码实现。
3.3.1. 自编译镜像上板流程#
按照kendryte/k230_sdk: Kendryte K230 SDK (github.com)或kendryte/k230_sdk - 码云 - 开源中国 (gitee.com)构建docker容器,编译上板镜像;
# 下载docker编译镜像 docker pull ghcr.io/kendryte/k230_sdk # 可以使用以下命令确认docker镜像是否拉取成功 docker images | grep ghcr.io/kendryte/k230_sdk # 下载sdk源码 git clone https://github.com/kendryte/k230_sdk.git cd k230_sdk # 下载工具链Linux和RT-Smart toolchain, buildroot package, AI package等 make prepare_sourcecode # 创建docker容器,$(pwd):$(pwd)表示系统当前目录映射到docker容器内部的相同目录下,将系统下的工具链目录映射到docker容器内部的/opt/toolchain目录下 docker run -u root -it -v $(pwd):$(pwd) -v $(pwd)/toolchain:/opt/toolchain -w $(pwd) ghcr.io/kendryte/k230_sdk /bin/bash make CONF=k230_canmv_defconfig
请您耐心等待镜像编译成功后,在k230_sdk根目录/output/k230_canmv_defconfig/images中下载编译好的镜像,并将其烧录到SD卡中,烧录步骤参考镜像烧录:
k230_canmv_defconfig/images ├── big-core ├── little-core ├── sysimage-sdcard.img # SD卡启动镜像 └── sysimage-sdcard.img.gz # SD卡启动镜像压缩包
在docker内部进入k230_sdk根目录,执行下述命令,编译ai demo部分:
cd src/reference/ai_poc # 如果build_app.sh权限不足,执行chmod +x build_app.sh # 执行脚本前确保src/big/kmodel/ai_poc下已经有相应kmodel、images、utils ./build_app.sh
执行build_app.sh脚本后,会将kmodel、images、utils、shell、elf统一拷贝生成到k230_bin文件夹;
将整个文件夹拷贝到开发板,在大核上执行sh脚本即可运行相应AI demo;
注:
1.sharefs是大小核共用目录,通过对大小核各自/sharefs目录的访问,提供了大核访问小核文件系统的功能。在实际使用中,通常会将大核的可执行程序存放在/sharefs目录下,大核通过sharefs功能执行这些程序,方便大核上应用程序的开发和调试;参考:K230大小核通讯Sharefs使用简介。
2.为了保证系统空间,最后一个disk的空间大小可能不足以存放所有文件;您可以使用下述命令修改最后一个分区大小;参考:K230 SDK常见问题解答 问题9。
umount /sharefs/ parted -l /dev/mmcblk1 # 31.3GB大小请参考上一条命令输出的 Disk /dev/mmcblk1 parted -a minimal /dev/mmcblk1 resizepart 4 31.3GB mkfs.ext2 /dev/mmcblk1p4 mount /dev/mmcblk1p4 /sharefs
分区结束后,重启开发板,在小核sharefs下新建目录test_demo,选择读卡器拷贝或者scp拷贝,因传输较慢不推荐使用tftp拷贝;
若您只关注某一个demo,请首先将utils中的所有文件拷贝到开发板/sharefs/test_demo目录下,参照对应demo的shell脚本中使用的文件拷贝elf、kmodel、测试图片;文件准备好后可以在开发板上运行;
3.4.2. 免编译镜像上板流程#
选择嘉楠开发者社区->资料下载->K230->Images提供的镜像烧录,k230_sdk版本和nncase版本对应关系请点击链接查看:
K230 SDK nncase版本对应关系 — K230 文档 (canaan-creative.com)
镜像烧录请参考镜像烧录。
按照kendryte/k230_sdk: Kendryte K230 SDK (github.com)或kendryte/k230_sdk - 码云 - 开源中国 (gitee.com)构建docker容器;
# 下载docker编译镜像 docker pull ghcr.io/kendryte/k230_sdk # 可以使用以下命令确认docker镜像是否拉取成功 docker images | grep ghcr.io/kendryte/k230_sdk # 下载sdk源码 git clone https://github.com/kendryte/k230_sdk.git cd k230_sdk # 下载工具链Linux和RT-Smart toolchain, buildroot package, AI package等 make prepare_sourcecode # 创建docker容器,$(pwd):$(pwd)表示系统当前目录映射到docker容器内部的相同目录下,将系统下的工具链目录映射到docker容器内部的/opt/toolchain目录下 docker run -u root -it -v $(pwd):$(pwd) -v $(pwd)/toolchain:/opt/toolchain -w $(pwd) ghcr.io/kendryte/k230_sdk /bin/bash make mpp make CONF=k230_canmv_defconfig prepare_memory;
mpp编译相对于镜像编译耗时要少很多;
在docker内部进入k230_sdk根目录,执行下述命令,编译ai demo部分:
cd src/reference/ai_poc # 如果build_app.sh权限不足,执行chmod +x build_app.sh # 执行脚本前确保src/big/kmodel/ai_poc下已经有相应kmodel、images、utils ./build_app.sh
执行build_app.sh脚本后,会将kmodel、images、utils、shell、elf统一拷贝生成到k230_bin文件夹;
将整个文件夹拷贝到开发板,在大核上执行sh脚本即可运行相应AI demo;
注:
1.sharefs是大小核共用目录,通过对大小核各自/sharefs目录的访问,提供了大核访问小核文件系统的功能。在实际使用中,通常会将大核的可执行程序存放在/sharefs目录下,大核通过sharefs功能执行这些程序,方便大核上应用程序的开发和调试;参考:K230大小核通讯Sharefs使用简介。
2.为了保证系统空间,最后一个disk的空间大小可能不足以存放所有文件;您可以使用下述命令修改最后一个分区大小;参考:K230 SDK常见问题解答 问题9。
umount /sharefs/ parted -l /dev/mmcblk1 # 31.3GB大小请参考上一条命令输出的 Disk /dev/mmcblk1 parted -a minimal /dev/mmcblk1 resizepart 4 31.3GB mkfs.ext2 /dev/mmcblk1p4 mount /dev/mmcblk1p4 /sharefs
分区结束后,重启开发板,在小核sharefs下新建目录test_demo,选择读卡器拷贝或者scp拷贝,因传输较慢不推荐使用tftp拷贝;
若您只关注某一个demo,请首先将utils中的所有文件拷贝到开发板/sharefs/test_demo目录下,参照对应demo的shell脚本中使用的文件拷贝elf、kmodel、测试图片;文件准备好后可以在开发板上运行;
3.4. Demo效果集锦#
demo效果如下图所示,感兴趣的可以动手实践将demo跑起来。