1 简介
庐山派以K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可作为AI与边缘计算平台
K230简介
K230芯片集成了两颗RISC-V处理器核心,双核玄铁C908,12nm 制程工艺,主频高达1.6GHz,是全球首款支持RISC-V Vector 1.0标准的商用SOC,配备第三代KPU处理单元,专为图像、视频、音频处理和AI加速设计,提供强劲的本地AI推理能力。支持三路MIPI CSI视频输入,最大分辨率可达4K。K230支持常见的AI计算框架如TensorFlow和PyTorch。下面是该处理器的框架图:
2 开发前准备
序号 | 名称 | 数量 |
---|---|---|
1️⃣ | 立创·庐山派-K230-CanMV开发板 主板 | 1片 |
2️⃣ | GC2093||OV5647 摄像头(22P 0.5mm间距) | 1块 |
3️⃣ | TF卡(2G以上 class10等级以上) | 1片 |
4️⃣ | Type-C数据线(用来连接电脑) | 1条 |
5️⃣ | TF 卡读卡器(把固件烧录进TF卡) | 1个 |
安装CanMV IDE K230,下载链接,写本文时最新版本为4.0.7,大家下载时下载最新的就可以了,单击下图中的CanMV IDE K230 for windows就可以把安装包下载到本地进行安装了。
打开后按照提示进行安装就可以了,注意安装到你知道的目录,建议不要安装到C盘。
安装成功之后可以在win11系统左下角的搜索栏中点击搜索找到CanMV IDE K230,我电脑这里的CanMV IDE是给K210使用的,如果大家也用过k210的话在打开IDE的时候需要注意,只有后面带K230标识的才支持我们的立创·庐山派-K230-CanMV开发板。如果搜索不到大家也可以直接去自己的安装目录的bin
目录下的canmvide.exe
文件。
3 获取及烧录固件
3.1 获取固件
固件获取链接
1️⃣ 【从嘉楠开发者社区获取最新固件】 (推荐)
点击这个链接,在
资料下载
栏目->K230
->Images
->CanMV
->Micropython
->CanMV-K230_LCKFB_micropython_v1.2-0-g9e4d9ca_nncase_v2.9.0.img.gz。2️⃣ 【从Github仓库获取最新固件】
点击这个[链接](Releases · kendryte/canmv_k230),下载最新固件注意需要下载里面带
LCKFB
字符的固件。3️⃣ 【从我们的资料包中获取】
在我们的离线资料里面的 【1】固件 目录里面寻找。
需要注意,不管是从Github下载下来的还是从我们资料包中获取的都是压缩包,解压出来的才是固件镜像。
⚠️警告:
.gz后缀结尾的是压缩包,.img后缀结尾的才是固件。只能往 TF卡 中只能烧录 .img文件 格式的固件,如果直接烧录 .gz文件 可能会造成开发板损坏。
如下图中的,1是固件镜像,2是压缩包,1是2解压得出来的文件。
3.2 烧录固件
下载烧录工具Rufus,下载地址:Index of /downloads,如果网络不通畅的话也可以从我们的离线资料里面的 【0】工具/【2】烧录工具/【1】Rufus 目录中获取,这个软件是免安装的,下载下来后直接双击打开就可以了。我这里用的是4.5版本,界面如下:
此时把你的TF卡插入读卡器,然后把读卡器插入电脑,我这里使用的是4G的TF卡,插入后Rufus软件界面的设备列表栏会显示一个设备,并且左下角也会提示可以检测到设备,此时就可以点击镜像文件(请选择)
后方的选择
按钮来选择我们要烧录的镜像了,就选择我们在上一小节中获取到的 CanMV-K230_LCKFB_micropython_v1.1-0-g5a6fc54_nncase_v2.9.0.img 文件就可以了,选择后如下图所示:
正确选择固件镜像文件后我们直接点击右下角的开始
按钮,继续操作会造成TF内所有内容全部消失,需要确保你这个TF卡内部没有重要数据,然后等待烧录完成就可以了。当Rufus软件的状态那一栏走完进度条,提示准备就绪
时就表示成功烧录固件了,如下图所示:
此时我们就可以按以下步骤操作:
步骤:
- 关闭Rufus软件。
- 在电脑上软件弹出我们的读卡器 。
- 拔出读卡器。
- 从读卡器上拔出我们烧录号固件镜像的TF卡。
- 在 立创·庐山派-K230-CanMV开发板 未供电状态插入TF卡。
4 立创·庐山派 启动
完成以上操作后,我们就可以给开发板上电了。用Type-C数据线将开发板连入电脑。
如果正常启动,板子上的红色指示灯(红灯)就会自动点亮,稍微等待一会后(十秒内)。我们就可以在设备管理器中看到一个 新的USB串行设备(COMx),同时我们电脑的也会出现一个CanMV设备,可以当做U盘来访问开发板内的文件。
⚠️注意:
在第一次上电时,庐山派开发板会自动将TF卡除固件镜像外的剩余空间格式化为
fat
,并挂载在/data
文件夹,格式化会占用一些时间并且会主动进行一次重启。后续上电时不会再进行这个操作,所以第一次上电会稍微慢一点。当然,如果你已经安装了CanMV IDE K230,打开IDE,当 立创·庐山派-K230-CanMV开发板 正常启动后,左下角的连接图标的右上脚就会出现一个USB标志,如果没有出现则表示开发板启动失败或未成功连接电脑。下图的左边是未接入开发板的IDE,右边是接入了开发板的IDE。
5 运行例程
目前烧录固件的TF卡内有所有嘉楠官方提供的例程,源码+模型文件+字体等都在TF卡中,当立创庐山派开发板连接电脑后,用户可以直接在电脑的CanMV设备中的sdcard
文件夹中找到所有文件
⚠️注意:
- 不要使用IDE自带的例程,版本太老可能无法直接运行,需要使用固件自带的例程。
- 例程默认的摄像头使用的是CSI2,就是开发板正面的那个立式的22P摄像头座,在运行和摄像头有关的例程时需要注意。
- 为了避免占用USB传输带宽,建议将例程拷贝至电脑本地存储后再打开复制。
其历程examples
,libs
,res
目录结构如表所示:
sdcard:
├─examples
│ ├─01-Micropython-Basics
│ │ demo_crc16.py
│ │ demo_files.py
│ │ demo_fs_info.py
│ │ demo_globals.py
│ │ demo_json.py
│ │ demo_logging.py
│ │ demo_sha256.py
│ │ demo_sys_info.py
│ │ demo_thread.py
│ │ demo_time.py
│ │ demo_view_mem.py
│ │ demo_yield.py
│ │ demo_yield_task.py
│ │
│ ├─02-Media
│ │ acodec.py
│ │ audio.py
│ │ mp4muxer.py
│ │ rtsp_server.py
│ │ video_decoder.py
│ │ video_encoder.py
│ │ video_player.py
│ │
│ ├─03-Machine
│ │ ├─adc
│ │ │ adc.py
│ │ │
│ │ ├─fft
│ │ │ fft.py
│ │ │
│ │ ├─fpioa
│ │ │ fpioa.py
│ │ │
│ │ ├─i2c
│ │ │ i2c_master.py
│ │ │ i2c_slave.py
│ │ │
│ │ ├─pin
│ │ │ pin.py
│ │ │
│ │ ├─pwm
│ │ │ pwm.py
│ │ │
│ │ ├─rtc
│ │ │ rtc.py
│ │ │
│ │ ├─spi
│ │ │ spi.py
│ │ │
│ │ ├─timer
│ │ │ timer.py
│ │ │
│ │ ├─touch
│ │ │ touch.py
│ │ │
│ │ ├─uart
│ │ │ uart.py
│ │ │ uart1.py
│ │ │
│ │ └─wdt
│ │ wdt.py
│ │
│ ├─04-Cipher
│ │ cipher.py
│ │
│ ├─05-AI-Demo
│ │ dynamic_gesture.py
│ │ eye_gaze.py
│ │ face_detection.py
│ │ face_landmark.py
│ │ face_mesh.py
│ │ face_parse.py
│ │ face_pose.py
│ │ face_recognition.py
│ │ face_registration.py
│ │ falldown_detect.py
│ │ finger_guessing.py
│ │ hand_detection.py
│ │ hand_keypoint_class.py
│ │ hand_keypoint_detection.py
│ │ hand_recognition.py
│ │ keyword_spotting.py
│ │ licence_det.py
│ │ licence_det_rec.py
│ │ nanotracker.py
│ │ object_detect_yolov8n.py
│ │ ocr_det.py
│ │ ocr_rec.py
│ │ person_detection.py
│ │ person_keypoint_detect.py
│ │ puzzle_game.py
│ │ segment_yolov8n.py
│ │ self_learning.py
│ │ space_resize.py
│ │ tts_zh.py
│ │
│ ├─06-Display
│ │ display_hdmi.py
│ │ display_lcd.py
│ │ display_virt.py
│ │
│ ├─07-April-Tags
│ │ find_apriltags.py
│ │ find_apriltags_3d_pose.py
│ │
│ ├─08-Codes
│ │ find_barcodes.py
│ │ find_datamatrices.py
│ │ find_qrcodes.py
│ │
│ ├─09-Color-Tracking
│ │ automatic_grayscale_color_tracking.py
│ │ automatic_rgb565_color_tracking.py
│ │ black_grayscale_line_following.py
│ │ image_histogram_info.py
│ │ image_statistics_info.py
│ │ multi_color_code_tracking.py
│ │ single_color_code_tracking.py
│ │
│ ├─10-Drawing
│ │ arrow_drawing.py
│ │ circle_drawing.py
│ │ cross_drawing.py
│ │ ellipse_drawing.py
│ │ flood_fill.py
│ │ image_drawing.py
│ │ image_drawing_advanced.py
│ │ image_drawing_alpha_blending_test.py
│ │ keypoints_drawing.py
│ │ line_drawing.py
│ │ rectangle_drawing.py
│ │ text_drawing.py
│ │
│ ├─11-Feature-Detection
│ │ edges.py
│ │ find_blobs.py
│ │ find_lines.py
│ │ find_rects.py
│ │ hog.py
│ │ lbp.py
│ │ linear_regression_fast.py
│ │
│ ├─12-Image-Filters
│ │ adaptive_histogram_equalization.py
│ │ blur_filter.py
│ │ color_binary_filter.py
│ │ color_light_removal.py
│ │ edge_filter.py
│ │ erode_and_dilate.py
│ │ gamma_correction.py
│ │ grayscale_bilateral_filter.py
│ │ grayscale_binary_filter.py
│ │ grayscale_light_removal.py
│ │ histogram_equalization.py
│ │ kernel_filters.py
│ │ lens_correction.py
│ │ linear_polar.py
│ │ log_polar.py
│ │ mean_adaptive_threshold_filter.py
│ │ mean_filter.py
│ │ median_adaptive_threshold_filter.py
│ │ median_filter.py
│ │ midpoint_adaptive_threshold_filter.py
│ │ midpoint_filter.py
│ │ mode_adaptive_threshold_filter.py
│ │ mode_filter.py
│ │ negative.py
│ │ perspective_and_rotation_correction.py
│ │ perspective_correction.py
│ │ rotation_correction.py
│ │ sharpen_filter.py
│ │ unsharp_filter.py
│ │ vflip_hmirror_transpose.py
│ │
│ ├─14-Socket
│ │ http_client.py
│ │ http_server.py
│ │ iperf3.py
│ │ network_lan.py
│ │ network_wlan_ap.py
│ │ network_wlan_sta.py
│ │ tcp_client.py
│ │ tcp_server.py
│ │ udp_clinet.py
│ │ udp_server.py
│ │
│ ├─15-LVGL
│ │ │ lvgl_demo.py
│ │ │ lvgl_touch_demo.py
│ │ │
│ │ └─data
│ │ ├─font
│ │ │ lv_font_simsun_16_cjk.fnt
│ │ │ montserrat-16.fnt
│ │ │
│ │ └─img
│ │ animimg001.png
│ │ animimg002.png
│ │ animimg003.png
│ │
│ ├─16-AI-Cube
│ │ ClassificationApp.py
│ │ DetectionApp.py
│ │ MultiLabelApp.py
│ │ OCR_Det.py
│ │ SegmentationApp.py
│ │ SelfLearningApp.py
│ │
│ ├─17-Sensor
│ │ camera_dual_bind_hdmi.py
│ │ camera_mirror_flip.py
│ │ camera_single_bind_hdmi.py
│ │ camera_single_bind_lcd.py
│ │ camera_single_show_hdmi.py
│ │ camera_single_show_lcd.py
│ │ camera_snapshot_and_save.py
│ │ camera_triple_bind_hdmi.py
│ │
│ ├─18-NNCase
│ │ │ ai2d+kpu.py
│ │ │ kpu.py
│ │ │
│ │ └─face_detection
│ │ face_detection_320.kmodel
│ │ face_detection_ai2d_input.bin
│ │ face_detection_ai2d_output.bin
│ │ prior_data_320.bin
│ │
│ ├─99-HelloWorld
│ │ helloworld.py
│ │
│ ├─ai_test_kmodel
│ │ embedding.kmodel
│ │ insect_det.kmodel
│ │ landscape_multilabel.kmodel
│ │ ocr_det_int16.kmodel
│ │ ocr_rec_int16.kmodel
│ │ ocular_seg.kmodel
│ │ veg_cls.kmodel
│ │
│ ├─ai_test_utils
│ │ 0.jpg
│ │ 1.jpg
│ │ 2.jpg
│ │ 3.jpg
│ │ 4.jpg
│ │ 5.jpg
│ │ 6.jpg
│ │ 7.jpg
│ │ 8.jpg
│ │ dict.txt
│ │
│ ├─kmodel
│ │ cropped_test127.kmodel
│ │ eye_gaze.kmodel
│ │ face_alignment.kmodel
│ │ face_alignment_post.kmodel
│ │ face_detection_320.kmodel
│ │ face_landmark.kmodel
│ │ face_parse.kmodel
│ │ face_pose.kmodel
│ │ face_recognition.kmodel
│ │ gesture.kmodel
│ │ handkp_det.kmodel
│ │ hand_det.kmodel
│ │ hand_reco.kmodel
│ │ hifigan.kmodel
│ │ kws.kmodel
│ │ licence_reco.kmodel
│ │ LPD_640.kmodel
│ │ nanotracker_head_calib_k230.kmodel
│ │ nanotrack_backbone_sim.kmodel
│ │ ocr_det_int16.kmodel
│ │ ocr_rec_int16.kmodel
│ │ person_detect_yolov5n.kmodel
│ │ recognition.kmodel
│ │ yolov5n-falldown.kmodel
│ │ yolov8n-pose.kmodel
│ │ yolov8n_320.kmodel
│ │ yolov8n_seg_320.kmodel
│ │ zh_fastspeech_1_f32.kmodel
│ │ zh_fastspeech_2.kmodel
│ │
│ └─utils
│ │ dict.txt
│ │ fist.bin
│ │ five.bin
│ │ phone_map.txt
│ │ pinyin.txt
│ │ prior_data_320.bin
│ │ shang.bin
│ │ shear.bin
│ │ small_pinyin.txt
│ │ wozai.wav
│ │ xia.bin
│ │ you.bin
│ │ zuo.bin
│ │
│ ├─db
│ │ readme.txt
│ │
│ └─db_img
│ id_1.jpg
│ id_2.png
│
├─libs
│ AI2D.py
│ AIBase.py
│ PipeLine.py
│ RtspSever.py
│
└─res└─fontLICENSE.txtreadme.txtSourceHanSansSC-Normal-Min.ttf
打开CanMV IDE K230,找到你感兴趣的例程,复制粘贴去就好了(亦可以点击IDE左上角的文件
->打开文件
来加载需要用到的例程),比如我这里打开examples
->05-AI-Demo
->object_detect_yolov8n.py
,复制进IDE里面,然后连接开发板后点击左下角的绿色运行小三角就可以使用了,如下动图所示: