零基础实战:手把手教你用YOLOv5-Lite在树莓派上搭建数字识别系统(附完整代码与避坑指南)

从电赛小白到视觉方案通关:我是如何用树莓派+YOLOv5搞定2021年F题数字识别的 本文分享了作者如何从电赛小白到成功使用树莓派+YOLOv5完成2021年全国大学生电子设计竞赛F题数字识别的实战经验。文章详细介绍了方案抉择、数据集构建、模型优化及系统联调中的关键技巧,特别是如何在72小时内实现98%的识别率,为嵌入式视觉开发提供宝贵参考。 阅读详情

1. 环境准备与硬件选择

在开始搭建数字识别系统之前,我们需要准备好合适的硬件和软件环境。树莓派作为一款小巧而强大的单板计算机,非常适合运行轻量化的深度学习模型。我推荐使用树莓派4B 4GB版本,它的处理能力足够运行YOLOv5-Lite这样的轻量化模型。

硬件方面,除了树莓派主板,你还需要一个稳定的电源适配器(至少5V/3A),一个高质量的MicroSD卡(建议32GB以上),以及一个散热外壳。树莓派在运行时会产生一定的热量,良好的散热能保证系统稳定运行。摄像头方面,我强烈建议使用免驱USB摄像头而不是树莓派专用的CSI摄像头。USB摄像头不仅线材更长、更灵活,而且方便在电脑上进行测试,排除了硬件兼容性问题。

软件环境准备分为电脑端和树莓派端。电脑端我们主要用来训练模型,树莓派端则用来部署和运行训练好的模型。在电脑上,我们需要安装Python 3.8-3.12之间的版本,推荐使用3.10版本,这个版本在兼容性和稳定性方面表现都很不错。开发工具推荐使用PyCharm社区版,它是完全免费的,而且功能足够我们使用。

# 树莓派系统初始化
sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-venv

2. 数据集制作与增强

数据集的质量直接决定了最终模型的性能。对于数字识别这种相对简单的任务,我们可以通过数据增强技术来大幅扩充数据集规模。我在这里分享一个实用的数据增强方法,可以将单张图片生成256张不同的变体。

首先,我们需要收集基础数字图片。你可以在白纸上用黑色马克笔写下数字1-8,然后拍照保存。每张图片最好背景简洁,数字清晰。有了基础图片后,我们就可以使用下面的代码进行数据增强了:

import cv2
import numpy as np
import os

def augment_digits(image_path, output_dir, num_augment=256):
    """
    数字图像数据增强函数
    image_path: 原始图像路径
    output_dir: 输出目录
    num_augment: 每张图像增强数量
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    image = cv2.imread(image_path)
    if image is None:
        print(f"无法读取图像: {image_path}")
        return
    
    h, w = image.shape[:2]
    center = (w // 2, h // 2)
    
    for i in range(num_augment):
        # 随机旋转
        angle = np.random.uniform(-30, 30)
        M_rotate = cv2.getRotationMatrix2D(center, angle, 1.0)
        rotated = cv2.warpAffine(image, M_rotate, (w, h), 
                                borderValue=(255, 255, 255))
        
        # 随机仿射变换
        pts1 = np.float32([[w//4, h//4], [3*w//4, h//4], [w//4, 3*h//4]])
        pts2 = np.float32([
            [w//4 + np.random.uniform(-20, 20), h//4 + np.random.uniform(-20, 20)],
            [3*w//4 + np.random.uniform(-20, 20), h//4 + np.random.uniform(-20, 20)],
            [w//4 + np.random.uniform(-20, 20), 3*h//4 + np.random.uniform(-20, 20)]
        ])
        M_affine = cv2.getAffineTransform(pts1, pts2)
        transformed = cv2.warpAffine(rotated, M_affine, (w, h),
                                    borderValue=(255, 255, 255))
        
        # 随机亮度调整
        brightness = np.random.uniform(0.8, 1.2)
        transformed = np.clip(transformed * brightness, 0, 255).astype(np.uint8)
        
        # 保存增强后的图像
        output_path = os.path.join(output_dir, f"aug_{i:03d}.jpg")
        cv2.imwrite(output_path, transformed)
    
    print(f"已完成 {num_augment} 张图像增强")

# 使用示例
augment_digits("digit_3.jpg", "augmented_digits/3", 256)

这个增强方法包含了旋转、仿射变换和亮度调整,能够很好地模拟实际场景中数字可能出现的变化。记得为每个数字创建单独的文件夹存放增强后的图片,这样便于后续的标注工作。

3. 自动化标注技巧

手动标注图像既耗时又容易出错,特别是当我们有大量数据时。我开发了一个自动化标注方案,可以大大减少标注工作量。这个方案基于一个简单的观察:在数字识别任务中,数字通常是图像中最暗的区域。

import cv2
import numpy as np
import os
import json

def auto_annotate(image_dir, output_dir, label):
    """
    自动标注数字图像
    image_dir: 图像目录
    output_dir: 输出目录
    label: 数字标签
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
    
    for image_file in image_files:
        image_path = os.path.join(image_dir, image_file)
        img = cv2.imread(image_path)
        
        if img is None:
            continue
        
        # 转换为灰度图并二值化
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
        
        # 寻找轮廓
        contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, 
                                     cv2.CHAIN_APPROX_SIMPLE)
        
        if contours:
            # 合并所有轮廓并计算边界框
            all_contours = np.vstack(contours)
            x, y, w, h = cv2.boundingRect(all_contours)
            
            # 创建LabelMe格式的标注
            annotation = {
                "version": "5.4.1",
                "flags": {},
                "shapes": [{
                    "label": str(label),
                    "points": [
                        [x, y],
                        [x + w, y],
                        [x + w, y + h],
                        [x, y + h]
                    ],
                    "group_id": None,
                    "shape_type": "polygon",
                    "flags": {}
                }],
                "imagePath": image_file,
                "imageData": None,
                "imageHeight": img.shape[0],
                "imageWidth": img.shape[1]
            }
            
            # 保存标注文件
            json_path = os.path.join(output_dir, 
                                   os.path.splitext(image_file)[0] + '.json')
            with open(json_path, 'w') as f:
                json.dump(annotation, f, indent=2)

# 为每个数字文件夹执行自动标注
digits = ['1', '2', '3', '4', '5', '6', '7', '8']
for digit in digits:
    image_dir = f"augmented_digits/{digit}"
    output_dir = f"annotations/{digit}"
    auto_annotate(image_dir, output_dir, digit)

这个自动标注方法在处理简单背景下的数字图像时效果很好。如果图像背景复杂,可能还需要手动调整一些标注。标注完成后,我们需要将LabelMe的JSON格式转换为YOLO所需的TXT格式。

4. 模型训练与优化

现在来到最重要的环节——模型训练。我们使用YOLOv5-Lite v1.4版本,这个版本在树莓派上的表现更加稳定。首先需要从GitHub下载源码:

git clone https://github.com/ppogg/YOLOv5-Lite
cd YOLOv5-Lite
git checkout v1.4

安装所需的依赖包:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

接下来配置数据集文件。在data目录下创建mydata.yaml文件:

# 数据集配置文件
path: ../datasets
train: images/train
val: images/val

# 类别数量
nc: 8

# 类别名称
names: ['1', '2', '3', '4', '5', '6', '7', '8']

修改train.py中的训练参数:

# 在parse_opt函数中修改以下参数
parser.add_argument('--weights', type=str, default='v5lite-s.pt', help='初始权重路径')
parser.add_argument('--cfg', type=str, default='models/v5lite-s.yaml', help='模型配置文件路径')
parser.add_argument('--data', type=str, default='data/mydata.yaml', help='数据集配置文件路径')
parser.add_argument('--epochs', type=int, default=300, help='训练轮数')
parser.add_argument('--batch-size', type=int, default=8, help='批次大小')
parser.add_argument('--imgsz', '--img-size', type=int, default=320, help='输入图像大小')
parser.add_argument('--device', default='cpu', help='使用设备')

开始训练:

python train.py

训练过程中要密切关注损失函数的变化和验证集上的表现。如果发现过拟合(训练损失持续下降但验证损失开始上升),可以提前停止训练或者增加数据增强的强度。

5. 模型转换与部署

训练完成后,我们需要将PyTorch模型转换为ONNX格式,以便在树莓派上高效运行。使用以下代码进行转换:

import torch
from models.experimental import attempt_load

def convert_to_onnx(weights_path, img_size=320):
    """
    将PyTorch模型转换为ONNX格式
    weights_path: 权重文件路径
    img_size: 输入图像大小
    """
    device = torch.device('cpu')
    model = attempt_load(weights_path, map_location=device)
    model.eval()
    
    # 创建示例输入
    dummy_input = torch.randn(1, 3, img_size, img_size, device=device)
    
    # 导出ONNX模型
    onnx_path = weights_path.replace('.pt', '.onnx')
    torch.onnx.export(
        model,
        dummy_input,
        onnx_path,
        opset_version=12,
        input_names=['images'],
        output_names=['output'],
        dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}}
    )
    
    print(f"模型已转换为: {onnx_path}")

# 转换最佳权重
convert_to_onnx('runs/train/exp/weights/best.pt')

现在将转换好的ONNX模型和推理代码部署到树莓派上。在树莓派上需要安装以下依赖:

# 安装必要的依赖
sudo apt update
sudo apt install libatlas-base-dev libopenblas-dev libblas-dev
pip install opencv-python-headless onnxruntime numpy

创建树莓派推理脚本:

import cv2
import numpy as np
import onnxruntime as ort
import time

class DigitDetector:
    def __init__(self, model_path, conf_threshold=0.5):
        self.conf_threshold = conf_threshold
        self.session = ort.InferenceSession(model_path)
        self.input_name = self.session.get_inputs()[0].name
        self.output_name = self.session.get_outputs()[0].name
        
        # 类别映射
        self.class_names = ['1', '2', '3', '4', '5', '6', '7', '8']
    
    def preprocess(self, image):
        """预处理输入图像"""
        img = cv2.resize(image, (320, 320))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = img.astype(np.float32) / 255.0
        img = np.transpose(img, (2, 0, 1))
        img = np.expand_dims(img, axis=0)
        return img
    
    def detect(self, image):
        """执行数字检测"""
        input_img = self.preprocess(image)
        outputs = self.session.run([self.output_name], 
                                 {self.input_name: input_img})[0]
        
        detections = self.postprocess(outputs, image.shape)
        return detections
    
    def postprocess(self, outputs, orig_shape):
        """后处理检测结果"""
        # 实现后处理逻辑,包括NMS和置信度过滤
        # 这里简化处理,实际需要根据模型输出格式调整
        detections = []
        # 具体的后处理实现...
        return detections

# 使用示例
detector = DigitDetector('best.onnx')
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    detections = detector.detect(frame)
    
    # 在图像上绘制检测结果
    for det in detections:
        x1, y1, x2, y2, conf, cls_id = det
        label = f'{detector.class_names[cls_id]}: {conf:.2f}'
        cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
        cv2.putText(frame, label, (x1, y1-10),
                   cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    
    cv2.imshow('Digit Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

6. 性能优化技巧

在树莓派上运行深度学习模型时,性能优化至关重要。以下是我总结的几个实用优化技巧:

模型量化:将FP32模型转换为INT8格式,可以显著减少模型大小和推理时间:

def quantize_model(onnx_path):
    """量化ONNX模型"""
    from onnxruntime.quantization import quantize_dynamic, QuantType
    
    quantized_path = onnx_path.replace('.onnx', '_quantized.onnx')
    quantize_dynamic(onnx_path, quantized_path, weight_type=QuantType.QUInt8)
    return quantized_path

多线程处理:使用多线程来并行处理图像采集和推理:

import threading
from queue import Queue

class ProcessingPipeline:
    def __init__(self, model_path):
        self.detector = DigitDetector(model_path)
        self.frame_queue = Queue(maxsize=2)
        self.result_queue = Queue(maxsize=2)
        
    def capture_thread(self):
        """图像采集线程"""
        cap = cv2.VideoCapture(0)
        while True:
            ret, frame = cap.read()
            if ret:
                if self.frame_queue.full():
                    self.frame_queue.get()
                self.frame_queue.put(frame)
    
    def process_thread(self):
        """处理线程"""
        while True:
            if not self.frame_queue.empty():
                frame = self.frame_queue.get()
                results = self.detector.detect(frame)
                self.result_queue.put((frame, results))
    
    def display_thread(self):
        """显示线程"""
        while True:
            if not self.result_queue.empty():
                frame, results = self.result_queue.get()
                # 显示处理结果...

内存优化:合理管理内存使用,避免不必要的内存分配:

def optimize_memory_usage():
    """优化内存使用"""
    import gc
    import onnxruntime as ort
    
    # 配置ONNX Runtime选项
    options = ort.SessionOptions()
    options.enable_mem_pattern = False
    options.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL
    
    # 定期垃圾回收
    gc.collect()

7. 常见问题解决

在实际部署过程中,你可能会遇到各种问题。这里我总结了一些常见问题及其解决方案:

问题1:模型推理速度慢 解决方案:使用模型量化、减少输入图像尺寸、启用ONNX Runtime优化:

# 启用ONNX Runtime优化
options = ort.SessionOptions()
options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
session = ort.InferenceSession('model.onnx', sess_options=options)

问题2:内存不足 解决方案:使用内存映射方式加载模型,减少批量大小:

# 使用内存映射加载大模型
with open('model.onnx', 'rb') as f:
    model_data = f.read()
session = ort.InferenceSession(model_data)

问题3:摄像头帧率低 解决方案:降低分辨率,使用硬件加速:

# 设置摄像头参数
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cap.set(cv2.CAP_PROP_FPS, 15)

问题4:误检和漏检 解决方案:调整置信度阈值,增加后处理过滤:

def filter_detections(detections, conf_threshold=0.5, iou_threshold=0.4):
    """过滤检测结果"""
    # 按置信度过滤
    detections = [d for d in detections if d[4] > conf_threshold]
    
    # NMS处理
    boxes = [d[:4] for d in detections]
    scores = [d[4] for d in detections]
    indices = cv2.dnn.NMSBoxes(boxes, scores, conf_threshold, iou_threshold)
    
    return [detections[i] for i in indices]

问题5:树莓派过热降频 解决方案:改善散热,添加散热片和风扇,监控温度:

# 监控树莓派温度
vcgencmd measure_temp
# 设置温度警告
echo "Temp: $(vcgencmd measure_temp)" >> /var/log/temp.log

通过以上优化和问题解决方案,你应该能够在树莓派上稳定运行数字识别系统。记得在实际部署前充分测试每个组件,确保系统的稳定性和可靠性。

YOLOv5Lite模型在树莓派4B上的避坑指南:解决训练到部署的7个常见错误 本文详细介绍了在树莓派4B上部署YOLOv5Lite模型时常见的7个技术难题及解决方案,涵盖环境配置、模型转换、代码适配等关键环节。特别针对树莓派4B的ARM架构特性和有限硬件资源,提供了优化建议和性能提升技巧,帮助开发者实现高效的实时物体检测。 阅读详情

相关推荐

树莓派上跑YOLOv5-Lite:从MobileNet到ShuffleNetV2,我的轻量化目标检测踩坑实录

本文详细记录了在树莓派4B上部署YOLOv5-Lite轻量化目标检测模型的完整历程。从YOLOv5到MobileNet再到ShuffleNetV2的技术选型,最终通过架构精简、量化加速和系统级优化,实现在资源受限设备上3FPS的稳定运行。重点解析了YOLOv5-Lite的轻量化设计原理和实战调试技巧,为边缘计算目标检测提供宝贵经验。

weixin_30527423的博客 386

数字识别树莓派3+python3.5+opencv3.3+tensorflow1.7+keras

本文主要介绍如何利用树莓派3数字识别1-64数字图片,最近在做一个智能车的项目,通过识别赛场的数字来完成定位,在这里写一下自己的一些经验。1.图片采集和标注图像采集是通过opencv调用摄像头来采集图片的数据,场地的背景为蓝色,数字为白色。通过opencv采集到的图像大小为320x240,对图像进行预处理,包括灰度化、平滑滤波、二值化。由于摄像头拍摄的角度是歪的,所以还做了一些透射变换,采集到的图...

weixin_40707450的博客 1万+

实战指南:在Windows PC上配置CUDA环境与YOLOv5-Lite训练,并部署至边缘设备

本文详细介绍了在Windows PC上配置CUDA环境与YOLOv5-Lite训练的完整流程,包括版本匹配、虚拟环境搭建、数据集准备等关键步骤,并提供了将模型部署至树莓派4B的实战技巧,帮助开发者高效实现边缘设备上的目标检测应用。

weixin_27038701的博客 143

使用ncnn在树莓派部署自己的yolov5lites模型

学习,同时记录使用ncnn在树莓派部署的所遇到的坑

m0_52641167的博客 3421

树莓派系统配置与项目部署实战:从换源到YOLOv5

在嵌入式系统开发中,树莓派凭借其完整的Linux生态成为物联网原型验证的常用平台。然而,其“小电脑”属性决定了系统层配置是项目成功的关键:软件源、远程访问、硬件接口等基础环境若不预先理顺,后续部署将频繁受阻。本文围绕树莓派5、4B等主流型号,阐述了从系统烧录、换源加速、SSH远程连接,到摄像头、传感器等外设接入的标准化流程,并结合YOLOv5模型部署、Pico舵机控制等典型场景,分析了常见故障(如绿灯不闪、磁盘只读)的排查逻辑。掌握这些底层操作,能显著提升开发效率,为桌面小主机或边缘计算项目打下扎实基础。

374

零Python基础快速入门——视觉识别程序/深度学习以及在树莓派上的移植应用(YOLOv5-lite/适用于电赛、例程为简单的数字识别)

摘要:零Python基础快速入门——视觉识别程序/机器学习以及树莓派移植(YOLOv5-lite/适用于电赛,例程为简单的数字识别)过程简单不用理解代码/文章偏向应用方面而非原理的探寻,希望各位大佬不吝指教!

来自FZU——电子科学与技术专业 5847

基于树莓派4B的NCNN部署YOLOv5-Lite(代码开源)

基于树莓派4B的NCNN部署YOLOv5-Lite网络模型,含各种BUG和坑的解决方案,保姆级教程!

black_sneak的博客 7863

树莓派4B部署YOLOv5-Lite:边缘目标检测实战

边缘计算场景中,低算力设备运行深度学习模型始终面临性能与精度的平衡难题。树莓派作为典型的ARM开发板,其CPU算力有限,直接运行原版目标检测模型往往难以达到实时要求。YOLOv5-Lite通过替换轻量骨干网络并配合剪枝、INT8量化等手段,在保留检测头尺度适应性的前提下大幅降低计算量,使目标检测在无GPU环境下也能获得可用帧率。该技术方案不仅适合学生和爱好者开展动手实验,也可为智能安防、嵌入式视觉等应用提供低功耗的边缘侧推理支持。围绕树莓派4B上的实际部署过程,从环境配置、模型训练到性能调优,这套工程实践路

weixin_33910191的博客 291

YOLOv5lite+onnxruntime树莓派实时识别检测

树莓派运行YOLOv5-Lite

CadyCady的博客 7242

树莓派上YOLOv5-Lite实时推理部署与性能优化指南

目标检测模型在资源受限的边缘设备上部署时,面临推理速度与精度的双重挑战。轻量化网络设计是解决该问题的核心思路,通过替换骨干网络、精简检测头,可在保持可用精度的前提下大幅降低参数量与计算量。这类模型在智能安防、移动机器人、工业质检等场景中应用广泛。树莓派作为典型的低成本边缘计算平台,CPU算力与内存带宽有限,标准检测模型难以满足实时要求。YOLOv5-Lite结合ONNX Runtime、NCNN等推理引擎,通过INT8量化、线程绑定与输入尺寸调优,能够在树莓派上实现接近实时的目标检测。本文以树莓派4B为例,

weixin_42696271的博客 211

树莓派4B部署YOLOv5-Lite:从环境搭建到INT8量化提速的实战指南

在边缘计算场景中,如何让轻量级目标检测模型在ARM设备上高效运行,始终是嵌入式AI落地的关键挑战。树莓派4B凭借四核Cortex-A72处理器和最高8GB内存,成为性价比极高的低成本原型平台,但其纯CPU推理架构对模型体积和算力提出了严苛要求。YOLOv5-Lite通过深度可分离卷积与轻量化骨干网络,将参数量压缩至百万级,为在有限算力上实现实时检测提供了可能。然而,从PyTorch权重到TFLite部署格式的完整链路中,模型转换、量化校准与推理优化是决定成败的核心环节。本文聚焦于树莓派4B上部署YOLOv5

weixin_31476015的博客 132

基于树莓派4B与STM32的UART串口通信实验(代码开源)

基于树莓派4B与STM32的UART串口通信实验,含基于视觉技术的目标追踪小车机制介绍,项目代码开源!

black_sneak的博客 4万+

版图学习汇总十一(DRC、LVS注意事项)

esd。

weixin_56071389的博客 2263

树莓派上部署ncnn,运行yolov5_lite算法,最简单的方法, 保姆级教程你值得拥有!!!!!

本实验使用的是这个下载好镜像之后,一定要先改交换区的大小,不然后面会卡到你怀疑人生,推荐看这个进行本实验前需要更换国内源,换源大家可以看看https://blog.youkuaiyun.com/qq_45756736/article/details/138291635?安装运行环境,训练模型等,这里就不再赘述。

qq_45756736的博客 3694

均值场博弈_平均场博弈(mean field game)

The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。...

weixin_34773479的博客 3682

ENVI SARscape安装全攻略:从下载到汉化一步到位(附最新试用申请链接)

本文提供ENVI SARscape从下载安装到汉化的完整指南,特别针对InSAR(合成孔径雷达干涉测量)分析环境搭建。详细介绍了系统要求、分步安装流程、汉化优化方法及硬件加速配置,并分享数据处理验证和常见问题解决方案,帮助用户高效搭建遥感数据分析平台。

rnn9storyteller的博客 1415

树莓派5部署YOLOv5模型避坑指南:从系统到推理的完整实战

边缘计算设备正越来越多地承担起实时视觉检测任务,而树莓派5凭借四核Cortex-A76与PCIe支持,成为极具性价比的部署平台。在实际项目中,将自训练的YOLOv5模型迁移到ARM设备并非简单拷贝模型文件——从Ubuntu系统选型、主动散热与5V/5A供电,到CSI摄像头采集与libcamera适配,再到ONNX导出、CPU推理性能优化及systemd无人值守,每一环都可能成为稳定性瓶颈。本文以树莓派5在车间安全帽检测场景为例,拆解系统安装、温度墙控制、图像通路、模型转换、网络配置与耐久测试的完整链路,帮助

weixin_33895516的博客 396

图像去模糊(二)——Richardson–Lucy算法

Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)

xueruhongchen的博客 3万+

树莓派实战指南:从选购到项目落地,避坑与配置全解析

嵌入式开发是软硬件结合的关键领域,GPIO接口作为核心通信桥梁,驱动传感器与执行器实现物理世界交互。树莓派凭借丰富外设生态与Linux环境,成为边缘计算和机器人项目的热门平台。然而实际部署中常遇到系统引导失败、软件源访问缓慢、SSH连接异常、摄像头识别不了等问题,这些多源于对底层原理理解不足。本文从硬件选型、系统烧录、换源配置、网络调试到外设接线,系统梳理了树莓派从零到项目的完整路径,并针对常见故障给出分层排查方法,帮助开发者少走弯路。

weixin_33946020的博客 361

PostgreSQL使用 pg_rman物理备份搭建流复制备库(streaming replication standby)

摘要:使用pg_rman备份搭建PostgreSQL流复制备库 本文详细介绍了利用pg_rman工具快速搭建PostgreSQL流复制备库的完整流程。该方法结合物理备份的高效性和流复制的实时性,特别适合大型数据库环境。主要内容包括:主库上的pg_rman安装配置、全量备份操作;备份文件传输至备库;备库数据目录准备及恢复;流复制参数配置;以及最终的启动验证步骤。文章还提供了架构示意图和关键配置示例,并包含常见问题排查建议,如备库无法启动或复制卡顿情况的处理方法。整个流程强调通过.pgpass文件管理密码的安全

liumangtuzi888的博客 1169

【ArcGIS Pro微课1000例】0047:深度学习--棕榈树提取全流程

对汤加科洛瓦伊种植园每棵棕榈树的健康状况进行清查和评估,这需要花费大量的时间和劳动力。为简化此过程,将在 ArcGIS Pro 中使用深度学习模型来识别树木,然后根据植被绿度的测量值计算其健康状况。第一步是找到显示汤加科洛瓦伊的影像,该影像具有足够精细的空间和光谱分辨率来识别树木。获得此影像后,将创建训练样本并将其转换为可供深度学习模型使用的格式。为了让模型识别出它的查找任务,需要定义棕榈树的影像,以便识别相似的像素和树木大小。

智慧空间实验室 2208

YOLOv11边缘计算:树莓派5部署性能实测

本文介绍了如何在星图GPU平台上自动化部署YOLO11镜像,实现边缘端实时目标检测。该镜像专为树莓派5等ARM设备优化,支持开箱即用的视频流分析与小物体识别,典型应用于仓库巡检、教室出勤统计及农业病斑监测等低功耗边缘AI场景。

weixin_35949153的博客 328

如何用 Claude Code 做代码重构,而不是重写

摘要: 在使用Claude Code进行代码优化时,AI容易“重写”而非“重构”,导致改动过大、review困难。本文提出3个关键约束方法:1)限制修改范围(如仅修改指定函数);2)明确不改变代码行为;3)要求最小必要修改。通过分步骤重构、先获取重构建议再修改、使用标准模板(保持函数签名/输入输出/结构不变)等方式,可使AI输出更符合工程需求的小范围安全重构。对于彻底混乱的代码,才建议直接重写。核心在于通过提示词精准约束AI的修改行为,将其转化为高效的代码重构助手。

sg_knight的专栏 982

树莓派 CM4/CM5 SKU 命名规则与选型避坑指南

在嵌入式系统设计中,计算模块的SKU命名隐藏着处理器、内存与存储的完整配置信息。树莓派Compute Module系列以CM4/CM5为代表,其型号字符串中的每一位数字都对应无线模组、RAM和eMMC容量,掌握这套规则能显著降低选型与采购成本。不同SKU不仅影响性能,更关系到载板设计、射频认证及量产稳定性。无论是NAS、边缘视觉还是工业网关,正确解读SKU可避开兼容性雷区。系统梳理CM4与CM5的SKU差异、命名逻辑及工程实践中的常见坑,为嵌入式选型提供参考。

weixin_33881140的博客 508

WOFOST作物模型(1):PCSE环境配置

get_summary_output() 方法通常用于在 PCSE 模拟过程结束后,获取模拟结果的摘要信息,例如模拟期间的总产量、总水分需求等。它可以提供对模拟结果的快速总结,方便用户进行后续的分析和处理。用.get_output来获取过程参数,并将这些参数转为dataframe显示。用run_till_terminate()代表终止。安装好之后,打开jupyter notebook。也可以指定运行时间,并获取最后一天的参数。首先还是打开之前建好的gee虚拟环境。

所有专家都曾始于新手 681

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

树莓派上跑YOLOv5-Lite:从0.3FPS到3FPS,我的轻量化模型部署踩坑与提速全记录

本文详细记录了在树莓派4B上部署YOLOv5-Lite轻量化模型的全过程,从初始的0.3FPS提升至3FPS的实战经验。通过模型选型对比、环境配置、量化优化及多线程设计等关键步骤,解决了ARM架构下的性能瓶颈问题,为嵌入式设备上的实时目标检测提供了可行方案。

weixin_28366053的博客 413

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 从游戏到科研:GPU并行计算的跨界优化思维
下一篇: 从传感器融合到智能决策:STM32厨房安全系统的算法内核剖析
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值