本文介绍了香蕉派 CanMV K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试。
Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计。
该开发板由嘉楠科技与香蕉派开源社区联合设计研发,搭载了勘智 K230D 芯片。

K230D 芯片拥有双核玄铁 C908 RISC-V CPU,集成自主研发的第三代 KPU,内置 128MB LPDDR4 内存,提供了高性能的本地推理运算支持。
Canmv K230D Zero 的设计旨在支持各种 DIY 项目、物联网设备和嵌入式系统,具有丰富的开发资源和小巧的设计尺寸。可广泛应用于编程学习、边缘 AI 音视频产品创新、性能评估等领域。
BPI-CanMV-K230D Zero 开发板采用嘉楠科技 Kendryte® 系列 AIoT 芯片的新一代 SoC 芯片 K230D;
该芯片采用全新的多异构单元加速计算架构,集成了 2 个 RISC-V 高能效计算核心,内置新一代 KPU(Knowledge Process Unit)智能计算单元,具备多精度 AI 算力,广泛支持通用的AI计算框架,部分典型网络的利用率超过了70% ;
该芯片同时具备丰富多样的外设接口,以及 2D、2.5D 等多个标量、向量、图形等专用硬件加速单元,可以对多种图像、视频、音频、AI等多样化计算任务进行全流程计算加速,具备低延迟、高性能、低功耗、快速启动、高安全性等多项特性。
K230 SDK 是面向 K230 开发板的软件开发包,包含了基于Linux & RT-smart 双核异构系统开发需要用到的源代码,工具链和其他相关资源。
K230 SDK 需要在 Linux 环境下编译,推荐使用 Ubuntu Liunx 20.04
详见:kendryte/k230_sdk: Kendryte K230 SDK .

详见:香蕉派 BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计 | BananaPi Docs .
包括主控、电源、外设和摄像头等部分。




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




详见顶部视频。
包括 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 产生。

Ubuntu 终端执行
sudo ln -sf ~/k230_sdk/toolchain /opt/toolchain
make CONF=k230_canmv_defconfig
编译完成后,在 images 文件夹下生成 sysimage-sdcard.img 镜像文件。
或者直接使用官方提供的镜像文件,详见:勘智开发者社区-资料下载 、Releases · kendryte/k230_canmv .
开始 按钮;

详见:烧录固件 — K230 CanMV .
介绍了 CanMV IDE 编译器软件的安装和使用方法,以及官方和系统自带的 Demo 例程测试流程。
CanMV 基于 OpenMV 项目开发,CanMV IDE 与 OpenMV IDE 基本一致,主要修改了连接方式和通信协议等相关组件,IDE 基于 qtcreator 开发。
下载、安装并运行 CanMV IDE 软件;

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

工具 - 保存文件到CanMV设备,输入对应的路径即可。
详见:勘智开发者社区-资料下载 、Release CanMV_ide .
包括摄像头画面的 IDE 界面显示、人脸识别等 Demo 例程的测试。
通过运行官方例程,对摄像头进行画面采集测试。
注意软排线的连接方向(金手指朝上)

文件 - 示例 - Sensor ,打开例程 camera single show lcd 1.py 并运行;
或打开 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 三色分布直方图。

打开例程 /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 K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试,为后续的深入学习和研究做好铺垫,也为相关产品的快速开发和产品设计提供了参考。
1
1
举报
1
1
举报
更多回帖