RISC-V技术论坛
直播中

jf_07365693

2年用户 380经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[经验]

【BPI-CanMV-K230D-Zero开发板体验】介绍、系统安装、工程测试

board_show

【BPI-CanMV-K230D-Zero开发板体验】介绍、系统安装、工程测试

本文介绍了香蕉派 CanMV K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试。

介绍

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计。

该开发板由嘉楠科技香蕉派开源社区联合设计研发,搭载了勘智 K230D 芯片。

banana_pi_bpi-canmv-k230d-zero.jpg

K230D 芯片拥有双核玄铁 C908 RISC-V CPU,集成自主研发的第三代 KPU,内置 128MB LPDDR4 内存,提供了高性能的本地推理运算支持。

Canmv K230D Zero 的设计旨在支持各种 DIY 项目、物联网设备和嵌入式系统,具有丰富的开发资源和小巧的设计尺寸。可广泛应用于编程学习、边缘 AI 音视频产品创新、性能评估等领域。

K230D

BPI-CanMV-K230D Zero 开发板采用嘉楠科技 Kendryte® 系列 AIoT 芯片的新一代 SoC 芯片 K230D;

该芯片采用全新的多异构单元加速计算架构,集成了 2 个 RISC-V 高能效计算核心,内置新一代 KPU(Knowledge Process Unit)智能计算单元,具备多精度 AI 算力,广泛支持通用的AI计算框架,部分典型网络的利用率超过了70% ;

该芯片同时具备丰富多样的外设接口,以及 2D、2.5D 等多个标量、向量、图形等专用硬件加速单元,可以对多种图像、视频、音频、AI等多样化计算任务进行全流程计算加速,具备低延迟、高性能、低功耗、快速启动、高安全性等多项特性。

详见:Datasheet - k230_docs .

SDK

K230 SDK 是面向 K230 开发板的软件开发包,包含了基于Linux & RT-smart 双核异构系统开发需要用到的源代码,工具链和其他相关资源。

K230 SDK 需要在 Linux 环境下编译,推荐使用 Ubuntu Liunx 20.04

详见:kendryte/k230_sdk: Kendryte K230 SDK .

特点

  • 嘉楠科技 K230D RISC-V 芯片
  • 128 RAM 内存
  • 双 Camera 摄像头
  • MIPI DSI 显示屏接口
  • 板载 WiFi 模块
  • 40-Pin GPIO 引脚
  • ADC audio语音接口

硬件接口

board_pinout.jpg

详见:香蕉派 BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计 | BananaPi Docs .

原理图

包括主控、电源、外设和摄像头等部分。

主控

SCH_K230D.jpg

电源

SCH_Power.jpg

外设

SCH_Peripheral.jpg

摄像头

SCH_Video.jpg

开箱

包括外包装、开发板外观、摄像头模块等。

Package

package.jpg

Top view

top_view.jpg

Bottom view

bottom_view.jpg

Camera

camera.jpg

详见顶部视频。

系统安装

包括 SDK 编译以及系统镜像烧录等流程。

编译 SDK

进入 Linux 系统,下载 K230 SDK 源码并编译

git clone https://github.com/kendryte/k230_sdk
cd k230_sdk
make prepare_sourcecode

make prepare_sourcecode 会自动下载 Linux 和 RT-Smart toolchain, buildroot package, AI package 等.

需确保该命令执行成功且无 Error 产生。

make_prepare.jpg

编译镜像

Ubuntu 终端执行

sudo ln -sf ~/k230_sdk/toolchain /opt/toolchain
make CONF=k230_canmv_defconfig

编译完成后,在 images 文件夹下生成 sysimage-sdcard.img 镜像文件。

或者直接使用官方提供的镜像文件,详见:勘智开发者社区-资料下载Releases · kendryte/k230_canmv .

镜像烧录

  • 下载并安装 Rufus 烧录工具软件;
  • 运行软件,连接 SD 卡并选择对应的设备;
  • 加载目标镜像,点击 开始 按钮;
  • 待烧录完成,将 SD 卡安装至开发板对应位置处的插槽;

Rufus_Burn_image.jpg

  • 使用两根 Type-C 数据线连接开发板,系统自动安装驱动,显示 CanMV 设备图标;

CanMV_icon.jpg

详见:烧录固件 — K230 CanMV .

工程测试

介绍了 CanMV IDE 编译器软件的安装和使用方法,以及官方和系统自带的 Demo 例程测试流程。

连接 IDE

CanMV 基于 OpenMV 项目开发,CanMV IDE 与 OpenMV IDE 基本一致,主要修改了连接方式和通信协议等相关组件,IDE 基于 qtcreator 开发。

  • 下载、安装并运行 CanMV IDE 软件;

    logo_CanMV_IDE.jpg

  • 点击左下角的 连接 按钮,连接开发板;

  • 点击左下角的 运行 按钮,可在 串行终端 标签下观察到输出结果;

CanMV_IDE_test.jpg

  • 保存文件时,可选择 工具 - 保存文件到CanMV设备,输入对应的路径即可。

CanMV_save_py.jpg

详见:勘智开发者社区-资料下载Release CanMV_ide .

Demo 测试

包括摄像头画面的 IDE 界面显示、人脸识别等 Demo 例程的测试。

摄像头画面显示

通过运行官方例程,对摄像头进行画面采集测试。

硬件连接

注意软排线的连接方向(金手指朝上)

camera_connect.jpg

程序运行
  • 选择 文件 - 示例 - Sensor ,打开例程 camera single show lcd 1.py 并运行;

example_AI_demo.jpg

或打开 SD 卡存储的例程 /CanMV/sdcard/examples/17-Sensor/camera_single_show_lcd.py 文件。

代码

完整代码如下

# Camera Example
import time, os, sys

from media.sensor import *
from media.display import *
from media.media import *

sensor = None

try:
    print("camera_test")

    # construct a Sensor object with default configure
    sensor = Sensor()
    # sensor reset
    sensor.reset()
    # set hmirror
    # sensor.set_hmirror(False)
    # sensor vflip
    # sensor.set_vflip(False)

    # set chn0 output size
    sensor.set_framesize(width = 800, height = 480)
    # set chn0 output format
    sensor.set_pixformat(Sensor.YUV420SP)
    # bind sensor chn0 to display layer video 1
    bind_info = sensor.bind_info()
    Display.bind_layer(**bind_info, layer = Display.LAYER_VIDEO1)

    # set chn1 output format
    sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_1)
    sensor.set_pixformat(Sensor.RGB888, chn = CAM_CHN_ID_1)

    # set chn2 output format
    sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_2)
    sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_2)

    # use hdmi as display output
    Display.init(Display.ST7701, to_ide = True, osd_num = 2)
    # init media manager
    MediaManager.init()
    # sensor start run
    sensor.run()

    while True:
        os.exitpoint()

        img = sensor.snapshot(chn = CAM_CHN_ID_1)
        Display.show_image(img, alpha = 128)

        img = sensor.snapshot(chn = CAM_CHN_ID_2)
        Display.show_image(img, x = 800 - 320, layer = Display.LAYER_OSD1)

except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")
finally:
    # sensor stop run
    if isinstance(sensor, Sensor):
        sensor.stop()
    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # release media buffer
    MediaManager.deinit()

点击左下角 运行 按钮执行程序;

测试结束后,点击左下角 结束 按钮终止程序。

效果

CanMV IDE 右上角显示摄像头采集画面,下方为对应的 RGB 三色分布直方图。

camera_test.jpg

人脸识别

打开例程 /CanMV/sdcard/examples/05-AI-Demo/face_detection.py 并运行;

将显示模式修改为 lcd,即可在 IDE 获取实时处理画面。

代码

关键代码如下

if __name__ == "__main__":
    # 显示模式,默认"hdmi",可以选择"hdmi"和"lcd"
    display_mode="lcd"
    # k230保持不变,k230d可调整为[640,360]
    rgb888p_size = [1920, 1080]

    if display_mode=="hdmi":
        display_size=[1920,1080]
    else:
        display_size=[800,480]
    # 设置模型路径和其他参数
    kmodel_path = "/sdcard/examples/kmodel/face_detection_320.kmodel"
    # 其它参数
    confidence_threshold = 0.5
    nms_threshold = 0.2
    anchor_len = 4200
    det_dim = 4
    anchors_path = "/sdcard/examples/utils/prior_data_320.bin"
    anchors = np.fromfile(anchors_path, dtype=np.float)
    anchors = anchors.reshape((anchor_len, det_dim))

    # 初始化PipeLine,用于图像处理流程
    pl = PipeLine(rgb888p_size=rgb888p_size, display_size=display_size, display_mode=display_mode)
    pl.create()  # 创建PipeLine实例
    # 初始化自定义人脸检测实例
    face_det = FaceDetectionApp(kmodel_path, model_input_size=[320, 320], anchors=anchors, confidence_threshold=confidence_threshold, nms_threshold=nms_threshold, rgb888p_size=rgb888p_size, display_size=display_size, debug_mode=0)
    face_det.config_preprocess()  # 配置预处理
    while True:
        with ScopedTiming("total",1):
            img = pl.get_frame()            # 获取当前帧数据
            res = face_det.run(img)         # 推理当前帧
            face_det.draw_result(pl, res)   # 绘制结果
            pl.show_image()                 # 显示结果
            gc.collect()                    # 垃圾回收
    face_det.deinit()                       # 反初始化
    pl.destroy()                            # 销毁PipeLine实例
  • 点击左下角 运行 按钮执行程序;
  • 测试结束后,点击左下角 结束 按钮终止程序。
效果

摄像头对准人物头像,采集画面经程序识别,标注识别结果,反馈至 IDE 显示界面。

canmv_ide_face_detection.jpg

详见底部视频。

总结

本文介绍了香蕉派 CanMV K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试,为后续的深入学习和研究做好铺垫,也为相关产品的快速开发和产品设计提供了参考。

face_detection_demo

回帖(2)

ElecFans小喇叭

2025-6-26 11:06:47
给大佬点赞,报告非常不错
1 1 举报
  • jf_07365693: 感谢支持~ 后续给大家带来更多测评分享

无垠的广袤

2025-6-26 11:16:12
内容好丰富啊,小体积板卡包含的资源还真不少,很适合整活儿✌
1 1 举报
  • jf_07365693: 嘿嘿,不仅带有摄像头(可实现视觉类AI识别),而且 GPIO 接口也很丰富,可以连接各种传感器和外设模块,这下可以尽情发挥想象力了 O(∩_∩)O

更多回帖

发帖
×
20
完善资料,
赚取积分