3. K230 AI Demo 概述 #

本章针对K230提供了50多个覆盖多模态的AI Demo应用示例,并开放了源码,提供了使用文档;用户可以通过本章概览AI Demo的应用场景,并在k230开发板上体验;同时参考源码开发基于其他场景的应用demo。

:对于K230D芯片,一些demo受到内存限制无法运行。

3.1 概述#

K230 AI Demo集成了人脸、人体、手部、车牌、单词续写、语音、dms等模块,包含了分类、检测、分割、识别、跟踪、单目测距等多种功能,给客户提供如何使用K230开发AI相关应用的参考。

3.2 Demo列表#

源码路径位于k230 sdk根目录下的src/reference/ai_pock230_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链接

K230

K230D

备注

anomaly_det

异常检测

anomaly_det

anomaly_det

bytetrack

多目标跟踪

bytetrack

bytetrack

crosswalk_detect

人行横道检测

crosswalk_detect

crosswalk_detect

dec_ai_enc

h265解码器+AI+h265编码器

dec_ai_enc

dec_ai_enc

demo_mix

demo串烧合集

demo_mix

demo_mix

k230_sdk<=1.3

distraction_reminder

分神提醒

distraction_reminder

distraction_reminder

dms_system

驾驶员监控系统

dms_system

dms_system

dynamic_gesture

动态手势识别

dynamic_gesture

dynamic_gesture

eye_gaze

注视估计

eye_gaze

eye_gaze

face_alignment

人脸对齐

face_alignment

face_alignment

face_detection

人脸检测

face_detection

face_detection

face_emotion

面部表情识别

face_emotion

face_emotion

face_gender

性别分类

face_gender

face_gender

face_glasses

是否佩戴眼镜分类

face_glasses

face_glasses

face_landmark

人脸密集关键点

face_landmark

face_landmark

face_mask

是否佩戴口罩分类

face_mask

face_mask

face_mesh

3D人脸网格

face_mesh

face_mesh

face_parse

人脸分割

face_parse

face_parse

face_pose

人脸姿态估计

face_pose

face_pose

face_verification

人脸身份验证

face_verification

face_verification

falldown_detect

跌倒检测

falldown_detect

falldown_detect

finger_guessing

猜拳游戏

finger_guessing

finger_guessing

fitness

动作计数

fitness

fitness

head_detection

人头检测

head_detection

head_detection

helmet_detect

安全帽检测

helmet_detect

helmet_detect

kws

关键词唤醒

kws

kws

licence_det

车牌检测

licence_det

licence_det

licence_det_rec

车牌识别

licence_det_rec

licence_det_rec

llamac

英文单词续写

llamac

llamac

仅Linux运行,RT-Smart不支持

nanotracker

单目标跟踪

nanotracker

nanotracker

object_detect_yolov8n

YOLOV8多目标检测

object_detect_yolov8n

object_detect_yolov8n

ocr

ocr检测+识别

ocr

ocr

person_attr

人体属性

person_attr

person_attr

person_detect

人体检测

person_detect

person_detect

person_distance

行人测距

person_distance

person_distance

pose_detect

人体关键点检测

pose_detect

pose_detect

pphumanseg

人像分割

pphumanseg

pphumanseg

puzzle_game

拼图游戏

puzzle_game

puzzle_game

segment_yolov8n

YOLOV8多目标分割

segment_yolov8n

segment_yolov8n

self_learning

自学习(度量学习分类)

self_learning

self_learning

smoke_detect

吸烟检测

smoke_detect

smoke_detect

space_resize

手势隔空缩放

space_resize

space_resize

sq_hand_det

手掌检测

sq_hand_det

sq_hand_det

sq_handkp_class

手掌关键点手势分类

sq_handkp_class

sq_handkp_class

sq_handkp_det

手掌关键点检测

sq_handkp_det

sq_handkp_det

sq_handkp_flower

指尖区域花卉分类

sq_handkp_flower

sq_handkp_flower

sq_handkp_ocr

手指区域OCR识别

sq_handkp_ocr

sq_handkp_ocr

sq_handreco

手势识别

sq_handreco

sq_handreco

traffic_light_detect

交通信号灯检测

traffic_light_detect

traffic_light_detect

translate_en_ch

英翻中翻译

translate_en_ch

translate_en_ch

tts_zh

中文转语音

tts_zh

tts_zh

vehicle_attr

车辆属性识别

vehicle_attr

vehicle_attr

virtual_keyboard

隔空虚拟键盘

virtual_keyboard

virtual_keyboard

yolop_lane_seg

路面车道线分割

yolop_lane_seg

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)的最新版本源码实现。

  • 按照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
    # (1)如果选择自行编译Linux+RT-Smart双系统镜像,执行下述命令
    make CONF=k230_canmv_defconfig
    
    # (2)如果选择使用开发者社区下载的Linux+RT-Smart双系统镜像,请务必在k230_sdk根目录下执行如下命令以指定开发板类型
    make CONF=k230_canmv_defconfig prepare_memory
    
    # (3)如果选择自行编译纯RT-Smart系统镜像,执行下述命令,开发者社区暂未开放纯RT-Smart镜像下载
    make CONF=k230_canmv_only_rtt_defconfig
    
  • 请您耐心等待镜像编译成功,make mpp过程相比完整镜像编译过程耗时较少。

    对于Linux+RT-Smart双系统编译,在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卡启动镜像压缩包
    

    对于RT-Smart单系统编译,在k230_sdk根目录/output/k230_canmv_only_rtt_defconfig/images中下载编译好的镜像,并将其烧录到SD卡中,烧录步骤参考镜像烧录

    k230_canmv_only_rtt_defconfig/images
     ├── big-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
    # 如果您想编译某一个demo,请使用“build_app.sh demo子目录名称”命令,比如:
    ./build_app.sh face_detection
    
  • 执行build_app.sh脚本后,不同demo的编译生成产物在k230_bin目录下的子目录中;

  • 将对应demo文件夹拷贝到开发板,在大核上执行sh脚本即可运行相应AI demo;

    注:

    1. 对于Linux+RT-Smart双系统,sharefs是大小核共用目录,通过对大小核各自/sharefs目录的访问,提供了大核访问小核文件系统的功能。在实际使用中,通常会将大核的可执行程序存放在/sharefs目录下,大核通过sharefs功能执行这些程序,方便大核上应用程序的开发和调试;参考:K230大小核通讯Sharefs使用简介

    2. 对于Linux+RT-Smart双系统,为了保证系统空间,最后一个disk的空间大小可能不足以存放所有文件;您可以使用下述命令修改最后一个分区大小;参考:K230 SDK常见问题解答 问题9。分区结束后,重启开发板,在小核sharefs下新建目录test_demo,选择读卡器拷贝或者scp拷贝,因传输较慢不推荐使用tftp拷贝;

    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
    
    1. 对于Linux+RT-Smart双系统,您可以选择从嘉楠开发者社区->资料下载->K230->Images下载镜像烧录,k230_sdk版本和nncase版本对应关系请点击链接查看:K230 SDK nncase版本对应关系 — K230 文档 (canaan-creative.com) 。镜像烧录请参考镜像烧录。开发者社区仅提供了Linux+RT-Smart双系统镜像,纯RT-Smart镜像需要您按照上述步骤自行编译;

    2. 对于RT-Smart单系统,拷贝文件时PC识别的根目录对应大核端的/sdcard目录,拷贝的文件请前往大核目录下/sdcard下寻找;

@You

AI Demo章节旨在展示K230在AI领域的强大性能和广泛应用场景。虽然我们提供了相关源代码供用户参考,但这些源码多是基于特定Demo场景的实现。

对于希望深入了解K230人工智能开发流程的用户,建议学习快速入门K230_AI推理流程深入解析AI开发流程。在这两章中,我们详细讲解了K230的多媒体应用、AI推理流程以及基于K230的人工智能开发流程,从代码层面全面解析了K230的AI开发知识。

3.4. Demo效果集锦#

demo效果如下图所示,感兴趣的可以动手实践将demo跑起来。

ai demo运行效果