树莓派的配置
下载系统
使用Raspberry pi Imager软件
闲杂配置
- 拼音输入法的配置
安装输入法框架(fcitx)
sudo apt update
sudo apt install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
- 配置输入法
- 打开终端,输入以下命令:
im-config -n fcitx
- 如果提示需要重启,请重启树莓派:
sudo reboot
- 添加中文输入法:
桌面右上角可设置 - 切换输入法:
默认情况下,Fcitx 的切换快捷键是 Ctrl + 空格
准备工作
Python环境的准备
- 查看自己的Python版本
可以通过以下命令查看虚拟环境中的 Python 版本:
python --version
- 创建与管理虚拟环境(树莓派系统推荐使用 venv 模块来创建虚拟环境):
- 选择一个目录来存放虚拟环境,例如在主目录下创建一个名为 venv 的文件夹:
mkdir ~/venv
- 在该目录下创建虚拟环境,命名为 myenv:
python3 -m venv ~/venv/myenv
- 激活虚拟环境:
source ~/venv/myenv/bin/activate
但是这样太麻烦了,所以我想简单点:使用别名(Alias)
(1)nano ~/.bashrc
(2)在文件末尾添加别名。例如,如果你想用 venv 来激活虚拟环境,可以添加以下内容:
alias venv='source ~/venv/myenv/bin/activate'
(3)source ~/venv/myenv/bin/activate’
保存文件并退出(在 nano 中按 Ctrl+X,然后按 Y 保存,最后按 Enter)
(4)重新加载配置文件:
source ~/.bashrc
(5)现在可以直接使用 venv 命令激活虚拟环境:
venv
(6)退出虚拟环境:
deactivate
安装OpenCV(项目需要)
- 在安装 OpenCV 之前,需要安装一些必要的系统依赖。
- 安装 libdc1394-dev:
sudo apt-get install libdc1394-dev
- 完整的依赖安装命令:
sudo apt-get update
sudo apt-get install build-essential cmake git libjpeg-dev libpng-dev libtiff-dev libdc1394-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk2.0-dev libatlas-base-dev gfortran
- 激活虚拟环境:
运行以下命令:
venv
- 安装 OpenCV 的 Python 包(在虚拟环境中):
pip install opencv-python
如果速度太慢可以用国内源下载
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
- 验证安装:
python
>>> import cv2
>>> print(cv2.__version__)
模型部署
模型转换(.pt模型转换为.onnx格式)
不同格式介绍
- .pt 格式(PyTorch模型)
(1) 优点:
- 灵活性高:直接使用PyTorch框架,可以方便地进行模型的修改和调试
- 无需额外转换:无需将模型转换为其他格式,部署过程相对简单
(2) 缺点:
- 性能受限:树莓派的硬件资源有限,直接运行PyTorch模型的推理速度较慢,通常只有2帧/秒左右
- 依赖复杂:需要安装完整的PyTorch环境,对树莓派的存储和计算资源要求较高
- .onnx 格式(ONNX模型)
(1) 优点:
- 推理速度更快:ONNX模型经过优化,推理速度比直接使用PyTorch模型更快,平均帧率可达3帧/秒左右
- 适配性强:ONNX是一种中间表示格式,可以方便地转换为其他推理引擎支持的格式(如TensorRT、OpenVINO等),适合在多种硬件上运行
- 资源占用低:相比PyTorch环境,ONNX Runtime的依赖更轻量,更适合树莓派等资源受限的设备
(2) 缺点:
- 需要转换:需要将.pt模型转换为.onnx格式,转换过程中可能需要调整模型结构或参数
- 调试复杂:如果转换后的模型出现问题(如推理结果不准确),调试难度可能比直接使用PyTorch模型更高
综上:如果目标是在树莓派上实现较高的推理速度和更好的资源利用,建议将.pt模型转换为.onnx格式进行部署
模型格式的转换(在你的PC上进行转换)
- 确保你的 Windows 环境中已安装以下依赖:
pip install torch onnx onnxruntime
- 转换为 ONNX 格式
示例代码:
from ultralytics import YOLO
# 加载模型
model = YOLO("banana.pt")
# 导出模型
model.export(
format="onnx", # 导出为 ONNX 格式
imgsz=640, # 输入图像尺寸
half=False, # 启用 FP16 量化
int8=False, # 是否启用 INT8 量化(根据需求启用)
dynamic=True, # 启用动态输入尺寸
simplify=True, # 简化模型
opset=12 # 指定 ONNX opset 版本
)
- imgsz
默认值:640。指定模型输入的图像尺寸。可以是一个整数(表示正方形图像的边长),也可以是一个元组 (height, width)。如果模型需要处理不同尺寸的图像,可以结合 dynamic=True 使用 - half
默认值:False。启用 FP16(半精度)量化,可以减小模型大小并加快推理速度,但可能会略微降低精度 - int8
默认值:False。启用 INT8 量化,进一步压缩模型并在边缘设备上加快推理速度,同时尽量减少精度损失 - dynamic
默认值:False。启用动态输入尺寸,允许导出的模型处理不同尺寸的输入图像,提高灵活性 - simplify
默认值:True。使用 onnx-simplify 工具简化模型图,提高性能和兼容性 - opset
默认值:None。指定 ONNX opset 版本,以兼容不同的 ONNX 解析器和运行时。如果未设置,将使用最新支持的版本,对于大多数场景,Opset 12 是一个较为安全的选择,因为它在兼容性和性能之间取得了较好的平衡
说明:因为half和simplify不能同时启用,而且我是在树莓派上部署模型(树莓派不支持 FP16 运算),所以我没让half=True。生成的onnx格式的模型位于train/weights/
树莓派上onnx格式模型的部署
- 查看树莓派的型号
cat /proc/device-tree/model
- 在树莓派上安装必要的依赖
pip install onnxruntime
- 调用模型
import onnxruntime as ort
import numpy as np
# 加载 ONNX 模型
session = ort.InferenceSession("banana.onnx")
# 获取模型输入输出信息
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
- 接下来就是平常的项目代码编写了