到手后先组装,请参考以下组装视频:
1 简介
开发板简介
该开发板是立创开发板团队精选打造的一款超高性价比的AI视觉开发板。以嘉楠科技Kendryte®系列AIoT芯片中的最新一代SoC芯片K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可以直接使用Python编程,简单易用。可作为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个 |
TIP
标准版 立创·庐山派-K230-CanMV开发板 会标配摄像头GC2093,序号3️⃣4️⃣5️⃣需要用户自行准备,当然,你还需要一台能流畅运行windows系统的电脑。
目前TF卡我们自己只用在立创商城购买的MK(米客方德)的8GTF卡(SDSDQAB-008G-MK),购买链接:https://item.szlcsc.com/8422936.html
建议大家没必要太追求大容量的TF卡,4G其实就够用了。
安装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,下载地址:https://rufus.ie/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
目录结构如表所示:
Details
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
└─font
LICENSE.txt
readme.txt
SourceHanSansSC-Normal-Min.ttf
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
打开CanMV IDE K230,找到你感兴趣的例程,复制粘贴去就好了(亦可以点击IDE左上角的文件
->打开文件
来加载需要用到的例程),比如我这里打开examples
->05-AI-Demo
->object_detect_yolov8n.py
,复制进IDE里面,然后连接开发板后点击左下角的绿色运行小三角就可以使用了,如下动图所示: