在立创庐山派上运行 YOLOv8 物体检测系统

最近入手了一块立创庐山派,想测试一下视觉检测的效果。由于我只买了板子,没有购买屏幕,而 CanMV-IDE 又没有 macOS 版本,用 OpenMv-IDE 也不能下发文件到板子上,我又不想拔卡插到电脑上。

所以我决定直接通过命令行工具与庐山派通信,并使用 Wi-Fi 和 MQTT 通信将识别结果发送到服务器。

前提条件

在开始之前,请确保已经完成以下准备工作:

获取代码

1
git clone https://github.com/bubao/CanMV-K230-Demo.git

安装 Python 3.x:可以从 Python 官网 下载并安装 Python 3.x。

配置虚拟环境

1
2
3
cd CanMV-K230-Demo
python3.9 -m venv venv
source venv/bin/activate

安装必要的工具

1
2
3
pip install adafruit-ampy mpremote
sudo apt-get install screen # 对于 Debian/Ubuntu 系统
brew install screen # 对于 macOS 系统

连接庐山派 CanMV-K230

首先,通过 USB 线将庐山派 CanMV-K230 连接到电脑。

1
2
# lsusb
Bus 001 Device 009: ID 1209:abd1 1209 CanMV Serial: 001000000

使用以下命令查看挂载位置:

1
2
# ls /dev/tty* | grep '001000000'
/dev/tty.usbmodem0010000001

在项目文件夹下创建 .ampy 文件,并加入以下内容:

1
2
3
AMPY_PORT=/dev/tty.usbmodem0010000001
AMPY_BAUD=115200
AMPY_DELAY=0.5

使用 ampy 测试一下是否能正常连接:

1
ampy ls /sdcard

如果能正常显示 sdcard 分区下的文件和文件夹,则说明连接成功。

修改配置

复制配置文件模板并进行修改:

1
cp .config.example.json .config.json

配置文件包含 WiFi、YOLO、MQTT 和 NTP 的配置信息。根据实际情况修改配置:

1
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
{
"wifi": {
"enabled": true, // 是否开启 WiFi
"networks": [
{
"enabled": true,
"ssid": "A",
"password": "passwd1"
},
{
"enabled": true,
"ssid": "B",
"password": "passwd1"
}
]
},
"yolo": {
"enabled": true, // 是否开启 YOLO
"task_type": "detect",
"mode": "image",
"labels": [
"person",
"bicycle",
"car",
"motorcycle",
// ...existing labels...
"toothbrush"
],
"rgb888p_size": [1920, 1080],
"kmodel_path": "/sdcard/examples/kmodel/yolov8n_320.kmodel",
"model_input_size": [320, 320],
"display_size": [1920, 1080],
"display_mode": "hdmi",
"conf_thresh": 0.5,
"nms_thresh": 0.45,
"mask_thresh": 0.5,
"max_boxes_num": 50,
"debug_mode": 0
},
"mqtt": {
"enabled": true, // 是否开启 MQTT
"broker": "192.168.0.3",
"port": 1883,
"topic_detection": "/yolo/detection",
"client_id": "CanMV_k230_yolo_001",
"username": "who",
"password": "me"
},
"ntptime": {
"enabled": true, // 是否开启对时
"ntp_delta": 3155644800,
"host": "ntp6.aliyun.com"
}
}

主函数执行以下步骤:

  1. 加载配置。
  2. 检查所需的配置(WiFi、YOLO、MQTT)是否存在并启用,这个项目里必须开启这三项。
  3. 测试 WiFi 连接。
  4. 如果启用了 NTP 时间同步,则同步时间。NTP 不启动也不会影响后续的操作。
  5. 初始化 MQTT 客户端并连接到 MQTT 代理。
  6. 初始化 YOLO 模型和处理管道。
  7. 每秒处理帧,进行目标检测,并将结果发送到 MQTT 代理。
  8. 处理异常并释放掉处理管道、MQTT 和 YOLO 的资源。

请注意,不要在 JSON 文件里加注释,可能会导致解析失败。

添加依赖

立创庐山派固件缺少 ntptimeumqtt.simple,需要使用mpremote手动安装:

1
2
mpremote connect /dev/tty.usbmodem0010000001 mip install ntptime
mpremote connect /dev/tty.usbmodem0010000001 mip install umqtt.simple

上传文件到庐山派 CanMV-K230

使用 ampy 工具可以方便地将文件上传到庐山派 CanMV-K230。使用以下命令将文件上传到板子上:

1
2
3
4
ampy put src /sdcard/src # 这个会有一点久
ampy put .config.json /sdcard/.config.json
ampy put main.py /sdcard/main.py
ampy put boot.py /sdcard/boot.py # 空文件,不传也行

使用 screen 查看日志

可以使用 screen 工具连接到庐山派 CanMV-K230 并查看日志输出:

1
screen -S K230 /dev/cu.usbmodem0010000001 115200

要退出 screen 会话,可以按 Ctrl+A,然后按 K,最后按 Y 确认退出。

每次进入都会 soft reset,可以按 Ctrl+D 手动 soft reset,如果正在运行,也可以用 Ctrl+C 终止运行

项目运行

将准备好的文件都拷贝到庐山派上,项目就能正常启动了。只要板子能正常连接到 Wi-Fi 和 MQTT,就能从同样连接到 MQTT 服务器并订阅了对应 topic 的 MQTTX 上看到输出。

1
2
3
4
5
// Topic: /yolo/detectionQoS: 0
[{"fps": 20.0, "confidence": 0.5664063, "bbox": [896.0, 2.0, 1277.0, 701.0], "label": "person"}]

// Topic: /yolo/detectionQoS: 0
[{"fps": 18.51852, "confidence": 0.8510742, "bbox": [261.0, 5.0, 1911.0, 1042.0], "label": "person"}]

通过以上步骤,可以在立创庐山派上运行基于 YOLOv8 的物体检测系统,并通过 MQTT 协议将检测结果发布到指定的主题。


在立创庐山派上运行 YOLOv8 物体检测系统
https://bubao.github.io/posts/75038298.html
作者
一念
发布于
2025年1月11日
许可协议