Skip to main content

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_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链接备注
anomaly_det异常检测anomaly_detanomaly_det
bytetrack多目标跟踪bytetrackbytetrack
crosswalk_detect人行横道检测crosswalk_detectcrosswalk_detect
dec_ai_ench265解码器+AI+h265编码器dec_ai_encdec_ai_enc
demo_mixdemo串烧合集demo_mixdemo_mix
distraction_reminder分神提醒distraction_reminderdistraction_reminder
dms_system驾驶员监控系统dms_systemdms_system
dynamic_gesture动态手势识别dynamic_gesturedynamic_gesture
eye_gaze注视估计eye_gazeeye_gaze
face_alignment人脸对齐face_alignmentface_alignment
face_detection人脸检测face_detectionface_detection
face_emotion面部表情识别face_emotionface_emotion
face_gender性别分类face_genderface_gender
face_glasses是否佩戴眼镜分类face_glassesface_glasses
face_landmark人脸密集关键点face_landmarkface_landmark
face_mask是否佩戴口罩分类face_maskface_mask
face_mesh3D人脸网格face_meshface_mesh
face_parse人脸分割face_parseface_parse
face_pose人脸姿态估计face_poseface_pose
face_verification人脸身份验证face_verificationface_verification
falldown_detect跌倒检测falldown_detectfalldown_detect
finger_guessing猜拳游戏finger_guessingfinger_guessing
fitness动作计数fitnessfitness
head_detection人头检测head_detectionhead_detection
helmet_detect安全帽检测helmet_detecthelmet_detect
kws关键词唤醒kwskws
licence_det车牌检测licence_detlicence_det
licence_det_rec车牌识别licence_det_reclicence_det_rec
llamac英文单词续写llamacllamac
nanotracker单目标跟踪nanotrackernanotracker
object_detect_yolov8nYOLOV8多目标检测object_detect_yolov8nobject_detect_yolov8n
ocrocr检测+识别ocrocr
person_attr人体属性person_attrperson_attr
person_detect行人检测person_detectperson_detect
person_distance行人测距person_distanceperson_distance
pose_detect人体关键点检测pose_detectpose_detect
pphumanseg人像分割pphumansegpphumanseg
puzzle_game拼图游戏puzzle_gamepuzzle_game
segment_yolov8nYOLOV8多目标分割segment_yolov8nsegment_yolov8n
self_learning自学习(度量学习分类)self_learningself_learning
smoke_detect吸烟检测smoke_detectsmoke_detect
space_resize手势隔空缩放space_resizespace_resize
sq_hand_det手掌检测sq_hand_detsq_hand_det
sq_handkp_class手掌关键点手势分类sq_handkp_classsq_handkp_class
sq_handkp_det手掌关键点检测sq_handkp_detsq_handkp_det
sq_handkp_flower指尖区域花卉分类sq_handkp_flowersq_handkp_flower
sq_handkp_ocr手指区域OCR识别sq_handkp_ocrsq_handkp_ocr
sq_handreco手势识别sq_handrecosq_handreco
traffic_light_detect交通信号灯检测traffic_light_detecttraffic_light_detect
translate_en_ch英翻中翻译translate_en_chtranslate_en_ch
tts_zh中文转语音tts_zhtts_zh
vehicle_attr车辆属性识别vehicle_attrvehicle_attr
virtual_keyboard隔空虚拟键盘virtual_keyboardvirtual_keyboard
yolop_lane_seg路面车道线分割yolop_lane_segyolop_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、测试图片;文件准备好后可以在开发板上运行;

@You

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

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

3.4. Demo效果集锦

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

ai demo运行效果