RISCV开发板实战(MusePi):USB摄像头跑YOLOv11
本文详细介绍了如何在进迭时空RISCV开发板上实现USB摄像头与YOLOv11模型的整合应用。通过合理配置硬件、优化软件性能,我们成功在边缘设备上实现了高效的目标检测功能。进迭时空K系列芯片展现出强大的边缘AI计算能力,特别是在int8量化模型的支持下,能够以较低功耗提供出色的推理性能。随着RISC-V生态的不断完善,这类芯片将在物联网、智能家居、工业自动化等领域发挥越来越重要的作用。项目源码官方
在进迭时空RISCV开发板上实现USB摄像头实时YOLO检测
引言
随着边缘AI计算的快速发展,RISC-V架构的AI芯片正逐渐成为行业新宠。进迭时空(SpacemiT)推出的K系列芯片凭借其高效的AI推理能力,为边缘计算场景提供了全新可能。本文将详细介绍如何在进迭时空RISCV开发板上,通过USB摄像头实现实时目标检测功能,并部署最新的YOLOv11模型,打造完整的边缘AI视觉应用。
一、硬件准备与环境配置
1.1 硬件清单
- 进迭时空K1开发板
- USB摄像头(建议选择UVC兼容型号)
- 网线(用于SSH连接)
- 电源适配器
1.2 基础环境搭建
首先,通过SSH从Windows环境连接到RISCV开发板:
ssh username@板子IP地址
接着,创建专用项目目录并克隆官方AI示例仓库:
# 创建项目目录
mkdir ~/yolov11_camera_project
cd ~/yolov11_camera_project
# 克隆官方AI示例仓库
git clone https://gitee.com/bianbu/spacemit-demo.git
cd spacemit-demo
1.3 依赖安装
# 更新软件包列表
sudo apt update
# 安装基础依赖
sudo apt install -y python3 python3-pip libopencv-dev python3-opencv v4l-utils usbutils ffmpeg
# 安装摄像头测试工具
sudo apt install -y fswebcam guvcview
二、USB摄像头配置与测试
2.1 摄像头连接验证
连接USB摄像头后,使用以下命令验证设备识别情况:
# 检查USB设备
lsusb
# 检查视频设备节点
ls /dev/video*
2.2 摄像头测试
# 测试摄像头捕获
fswebcam --no-banner test.jpg
# 如遇权限问题
sudo chmod 666 /dev/video0
2.3 常见问题解决
当遇到VIDIOC_ENUMINPUT: Inappropriate ioctl for device错误时,可尝试以下方法:
-
尝试不同设备节点:
fswebcam --device /dev/video1 --no-banner test1.jpg -
使用OpenCV直接访问:
import cv2 cap = cv2.VideoCapture(0) # 尝试0,1,2等不同索引 -
检查内核日志:
dmesg | grep -i usb -
指定分辨率和格式:
fswebcam --device /dev/video0 --resolution 640x480 --format yuyv test.jpg
三、YOLOv11模型部署
3.1 模型准备
# 进入YOLOv11示例目录
cd examples/CV/yolov11
# 安装Python依赖
pip3 install -r requirements.txt --user
# 下载预训练模型
cd model
sh download_model.sh
cd ..
3.2 YOLOv11性能说明
根据官方数据,YOLOv11n在SpacemiT K1上的性能表现如下:
| 模型 | 输入大小 | 数据类型 | 帧率(4核) |
|---|---|---|---|
| YOLOv11n | [1,3,320,320] | int8 | 35 FPS |
这一性能指标足以支持实时目标检测应用,尤其适合边缘计算场景。
四、完整应用实现
4.1 创建整合脚本
在项目目录中创建camera_yolov11_demo.py文件:
import cv2
import numpy as np
import time
import sys
import os
# 添加项目路径到Python路径
sys.path.append(os.path.join(os.path.dirname(__file__), "python"))
from test_yolov11 import YOLOv11Detector
def main():
# 初始化 YOLOv11 检测器
model_path = "model/yolov11n_int8.kmodel"
if not os.path.exists(model_path):
print(f"错误:模型文件 {model_path} 不存在")
print("请先运行 download_model.sh 脚本下载模型")
return
print("正在加载YOLOv11模型...")
detector = YOLOv11Detector(model_path)
print("模型加载完成")
# 尝试打开摄像头
camera_index = 0
cap = cv2.VideoCapture(camera_index)
# 如果默认索引失败,尝试其他索引
if not cap.isOpened():
print(f"无法打开摄像头(索引 {camera_index}),尝试其他索引...")
for i in range(1, 5):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f"成功打开摄像头(索引 {i})")
camera_index = i
break
if not cap.isOpened():
print("错误:无法打开任何摄像头设备")
print("请检查:")
print("1. 摄像头是否正确连接")
print("2. 执行 'ls /dev/video*' 查看可用设备")
print("3. 尝试 'sudo chmod 666 /dev/video*' 赋予权限")
return
print(f"摄像头(索引 {camera_index})已成功打开,按 'q' 键退出")
# 设置摄像头分辨率以匹配模型输入,提高处理速度
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
fps = 0
frame_count = 0
start_time = time.time()
frame_skip = 0 # 跳帧计数器,用于性能优化
while True:
# 读取一帧
ret, frame = cap.read()
if not ret:
print("错误:无法读取摄像头帧")
break
# 每2帧处理1帧,提高实时性能
frame_skip = (frame_skip + 1) % 2
if frame_skip != 0:
# 仅显示,不进行推理
cv2.putText(frame, f"FPS: {fps} (显示)", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
cv2.imshow('YOLOv11 Camera Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
continue
# 使用 YOLOv11 进行目标检测
results = detector.detect(frame)
# 在帧上绘制检测结果
for obj in results:
x1, y1, x2, y2 = obj['bbox']
conf = obj['confidence']
class_name = obj['class_name']
# 绘制边界框
cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
# 绘制标签
label = f"{class_name} {conf:.2f}"
cv2.putText(frame, label, (int(x1), int(y1)-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 计算 FPS
frame_count += 1
current_time = time.time()
if current_time - start_time >= 1.0:
fps = frame_count
frame_count = 0
start_time = current_time
# 显示 FPS 和系统信息
cv2.putText(frame, f"YOLOv11 FPS: {fps}", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
cv2.putText(frame, "Press 'q' to quit", (10, 60),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
# 显示结果
cv2.imshow('YOLOv11 Camera Detection', frame)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
print("程序已退出")
if __name__ == "__main__":
main()
4.2 运行应用
# 确保在正确目录
cd ~/yolov11_camera_project/spacemit-demo/examples/CV/yolov11
# 运行程序
python3 camera_yolov11_demo.py
五、性能优化技巧
为了在RISCV架构上获得最佳性能,以下是几点关键优化建议:
- 模型量化:使用int8量化模型(yolov11n_int8.kmodel),官方数据显示可达到35 FPS
- 分辨率调整:将摄像头分辨率设置为640x480,平衡画质与性能
- 跳帧处理:每2-3帧处理1帧,显著提升实时性能
- 内存优化:关闭不必要的后台服务,释放内存资源
- 多核利用:确保程序充分利用4个CPU核心
六、结果展示
成功运行后,您将看到实时摄像头画面,其中检测到的物体被绿色边框标记,并显示类别名称和置信度。在SpacemiT K1开发板上,YOLOv11n模型能够达到约30-35 FPS的推理速度,足以满足大多数实时应用场景。
七、扩展应用
基于本项目,您可以进一步扩展以下应用:
- 智能安防系统:检测特定物体并触发警报
- 零售分析:统计客流量和商品关注度
- 工业质检:识别产品缺陷
- 智能交通:车辆和行人检测
- 结合NLP模块:通过语音指令控制检测功能
进迭时空的AI Demo库还提供了丰富的其他模型,如人脸识别(ArcFace)、姿态估计(YOLOv8-pose)和语义分割(SAM)等,可以与YOLOv11结合创建更复杂的多模态应用。
八、总结
本文详细介绍了如何在进迭时空RISCV开发板上实现USB摄像头与YOLOv11模型的整合应用。通过合理配置硬件、优化软件性能,我们成功在边缘设备上实现了高效的目标检测功能。
进迭时空K系列芯片展现出强大的边缘AI计算能力,特别是在int8量化模型的支持下,能够以较低功耗提供出色的推理性能。随着RISC-V生态的不断完善,这类芯片将在物联网、智能家居、工业自动化等领域发挥越来越重要的作用。
项目源码:https://gitee.com/bianbu/spacemit-demo.git
官方文档:https://bianbu.spacemit.com/ai/spacemit-demo
作者:全球通史
日期:2025年11月08日
更多推荐


所有评论(0)