在树莓派4B上部署yolov8环境完成高帧率检测任务

目录

前言

在树莓派上安装Pytorch

在树莓派上安装Ultralytics环境

在树莓派上初步测试模型

在树莓派上安装NCNN

用NCNN模型实现高帧率检测


前言

在我前面的文章里讲了如何用yolov8从0开始训练自己的模型,现在这篇文章将教大家如何在树莓派上部署yolov8的环境,以及如何实现高帧率的检测任务。

手把手教会你用yolov8从环境配置到检测任务实战_ultralytics yolov8环境配置-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Duanwxq/article/details/137198979?spm=1001.2014.3001.5502具体运行速度可以参考下图:

从上图可知,NCNN模型是最快的,我们可以看下官网是如何说的:

Out of all the model export formats supported by Ultralytics, NCNN delivers the best inference performance when working with Raspberry Pi devices because NCNN is highly optimized for mobile/ embedded platforms (such as ARM architecture). Therefor our recommendation is to use NCNN with Raspberry Pi.

NCNN在使用Raspberry Pi设备时提供了最佳的推理性能,因为NCNN针对移动/嵌入式平台(如ARM架构)进行了高度优化。

在树莓派上需要装的有:opencv-pythontorchtorchvisionUltralytics。opencv的安装非常简单,在本文中不出现安装教程。

在树莓派上安装Pytorch

以下操作均要根据自己对应的版本下载,切勿直接复制运行。

首先检查raspberry的Liunx架构,在终端输入:

uname -a

查看到我的raspberry的Liunx是armv7l,打开网址:Releases · KumaTea/pytorch-arm (github.com)icon-default.png?t=N7T8https://github.com/KumaTea/pytorch-arm/releases然后找到对应架构以及对应Python版本的wheel文件,复制链接进行下载torch

pip3 install https://github.com/KumaTea/pytorch-arm/releases/download/v1.8.1/torch-1.8.1-cp39-cp39-linux_armv7l.whl

然后我们可以测试一下Pytorch是否以及装好了,如下:

为后面的计算机视觉任务做准备,我们还需要单独装一下torchvision,同上操作:

pip3 install https://github.com/KumaTea/pytorch-arm/releases/download/v1.8.1/torchvision-0.9.1-cp39-cp39-linux_armv7l.whl

出现Successfully installed就说明下载完成了。

在树莓派上安装Ultralytics环境

Raspberry Pi - Ultralytics YOLO DocsLearn how to deploy Ultralytics YOLOv8 on Raspberry Pi with our comprehensive guide. Get performance benchmarks, setup instructions, and best practices.icon-default.png?t=N7T8https://docs.ultralytics.com/guides/raspberry-pi/我们参考官方文档,更新软件包列表,安装 pip 并升级到最新版本:

sudo apt update
sudo apt install python3-pip -y
pip install -U pip

然后安装带有可选依赖项的Ultralytics:

pip3 install ultralytics

然后就是等待一下漫长的下载过程~

在树莓派上初步测试模型

下载完成后我们简单的测试一下原先训练的best.pt模型,虽然检测的速度很慢,但是可以检测出来,说明我们前面的步骤都是正确无误的。

import cv2
from ultralytics import YOLO
from cv2 import getTickCount, getTickFrequency
# 加载 YOLOv8 模型
model = YOLO("best.pt") # 这里选择你训练的模型# 获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(0)while cap.isOpened():loop_start = getTickCount()success, frame = cap.read()  # 读取摄像头的一帧图像if success:results = model.predict(source=frame) # 对当前帧进行目标检测并显示结果annotated_frame = results[0].plot()# 中间放自己的显示程序loop_time = getTickCount() - loop_starttotal_time = loop_time / (getTickFrequency())FPS = int(1 / total_time)# 在图像左上角添加FPS文本fps_text = f"FPS: {FPS:.2f}"font = cv2.FONT_HERSHEY_SIMPLEXfont_scale = 1font_thickness = 2text_color = (0, 0, 255)  # 红色text_position = (10, 30)  # 左上角位置cv2.putText(annotated_frame, fps_text, text_position, font, font_scale, text_color, font_thickness)cv2.imshow('img', annotated_frame)# 通过按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()  # 释放摄像头资源
cv2.destroyAllWindows()  # 关闭OpenCV窗口

在树莓派上安装NCNN

打开终端输入pip指令下载NCNN库:

pip install ncnn -i https://pypi.tuna.tsinghua.edu.cn/simple

我用pip下载的时候出现了下述问题,如果没遇到的可以跳过。

可能的一种原因是pip版本太高了,我们尝试将pip降级到21.3.1版本:

pip install pip==21.3.1

更多方法,参考下述博客: 

五种方法解决subprocess-exited-with-error × python setup.py egg_info did not run successfully_subprocess-exited-with-error怎么解决-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_61415601/article/details/138397648

用NCNN模型实现高帧率检测

将.pt模型转换成ncnn模型:

# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=best.pt format=ncnn  # creates 'best_ncnn_model'

执行测试代码:

import cv2
from ultralytics import YOLO
from cv2 import getTickCount, getTickFrequency
# 加载 YOLOv8 模型
ncnn_model = YOLO("./best_ncnn_model")# 获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(0)while cap.isOpened():loop_start = getTickCount()success, frame = cap.read()  # 读取摄像头的一帧图像if success:results = ncnn_model.predict(source=frame) # 对当前帧进行目标检测并显示结果annotated_frame = results[0].plot()# 中间放自己的显示程序loop_time = getTickCount() - loop_starttotal_time = loop_time / (getTickFrequency())FPS = int(1 / total_time)# 在图像左上角添加FPS文本fps_text = f"FPS: {FPS:.2f}"font = cv2.FONT_HERSHEY_SIMPLEXfont_scale = 1font_thickness = 2text_color = (0, 0, 255)  # 红色text_position = (10, 30)  # 左上角位置cv2.putText(annotated_frame, fps_text, text_position, font, font_scale, text_color, font_thickness)cv2.imshow('img', annotated_frame)# 通过按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()  # 释放摄像头资源
cv2.destroyAllWindows()  # 关闭OpenCV窗口

基本上在树莓派上是可以达到十几帧的,快来在你的树莓派部署看看吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381190.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决:TypeError: Descriptors cannot not be created directly. 目录 已解决:TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…

适用于618/7xx芯片平台 AT开发 远程FOTA升级指南教程

简介 AT版本的远程升级主要是对AT固件版本进行升级,实际方式为通过合宙官方IOT平台升级或者使用自己搭建的服务器进行升级服务。 该文档教程流程适用于 618/716S/718P 芯片平台的Cat.1模块 合宙IOT平台配置 升级日志 —— 如何查看 升级日志 —— 响应码列表 响应…

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决:ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市…

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线,本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少,完全是黑盒(因为用的人少,研究的人少,优…

ubuntu2204配置anacondacuda4090nvidia驱动

背景 某个机房的几台机器前段时间通过dnat暴露至公网后被入侵挖矿,为避免一些安全隐患将这几台机器执行重装系统操作; 这里主要记录配置nvidia驱动及cuda&anaconda。 步骤 大概分为几个步骤 禁用nouveau配置grub显示菜单install nvidia-driveri…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时,每个小部件都被视为具有四个同心矩形的框:边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式: 边距超出边框。边框绘制在边…

1.Fabric框架

要了解Fabric,首先要知道Hyperledger开源项目。 2015年12月,由开源世界的旗舰组织Linux基金会牵头,30家初始企业成员共同宣布Hyperledger联合项目成立。Hyperledger 超级账本,是首个面向企业应用场景的分布式账本平台&#xff0c…

【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)

写在前面 内容如何选择 本翻译只翻译本人认为精华的部分,本人认为的Spark的一些核心理念,编程思想。一些特别基础的操作包括但不限于搭建环境就不在此赘述了。 配套版本 本系列基于Spark 3.3.1,Scala 2.12.10,进行翻译总结 原…

nginx通过nginx_upstream_check_module实现后端健康检查

1、简介说明 nginx是常用的反向代理和负载均衡服务,具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。 nginx自身是没有针对后端节点健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完…

Redis之List列表

目录 一.列表讲解 二.列表命令 三.内部编码 四.应用场景 Redis的学习专栏:http://t.csdnimg.cn/a8cvV 一.列表讲解 列表类型是用来存储多个有序的字符串,如下所示,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的…

单例模式_Golang

目录 一、单例模式 1.1 基本概念 1.2 使用场景 二、Golang实现 2.1 懒汉模式(Lazy Loading) 一、单例模式 1.1 基本概念 一个类只能生成一个实例,且该类能自行创建这个实例的一种模式,这个定义个人感觉可以拆的通俗一些,在项目的生命周…

uniapp小程序上传pdf文件

<template><view class"mainInnBox"><view class"formBox"><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u-form :model"form" ref"uForm" :rules&quo…

C语言:数组-学习笔记(万字笔记)——翻新版

目录 前言&#xff1a; 1、 数组的概念 1.1 什么是数组 1.2 为什么学习数组&#xff1f; 2. ⼀维数组的创建和初始化 2.1 数组创建 2.2 数组的初始化 2.3 数组的类型 2.3.1 什么是数组类型&#xff1f; 2.3.2 数组类型的作用 3、 一维数组的使用 3.1 数组下标 3.2 数…

ExoPlayer架构详解与源码分析(15)——Renderer

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

CentOS 7 初始化环境配置详细

推荐使用xshell远程连接&#xff0c;如链接不上 请查看 CentOS 7 网络配置 修改主机名 hostname hostnamectl set-hostname xxx bash 关闭 SElinux 重启之后生效 配置yum源&#xff08;阿里&#xff09; 先备份CentOS-Base.repo&#xff0c;然后再下载 mv /etc/yum.repos…

《昇思25天学习打卡营第24天|基于 MindSpore 实现 BERT 对话情绪识别》

1. BERT 模型概述 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一个预训练的语言表示模型&#xff0c;可以应用于多种自然语言处理任务&#xff0c;包括对话情绪识别。BERT 通过双向 Transformer 编码器&#xff0c;能同时考虑句子…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式&#xff0c;线程不安全。 2、懒汉式&#xff0c;线程安全 3、双检锁/双重校验锁&#xff08;DCL&#xff0c;即 double-checked locking&#xff09; 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 图像物体的边界(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

NFT革命:数字资产的确权、营销与元宇宙的未来

目录 1、NFT&#xff1a;数字社会的数据确权制度 2、基于低成本及永久产权的文化发现 3、PFP&#xff1a;从“小图片”到“身份表达”&#xff0c;再到社区筛选 4、透明表达&#xff1a;NFT 在数字化营销中的商业价值 5、可编程性&#xff1a;赋予 NFT 无限可能的应用 5.…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …