正点原子RK3588(二)——lenet测试和modelzoo模型

文章目录

  • 一、lenet
  • 二、modelzoo模型
    • 2.1 介绍
    • 2.2 测试

一、lenet

import cv2
import numpy as np
from rknnlite.api import RKNNLite
RKNN_MODEL = 'LeNet5_mnist_model.rknn'def show_top5(result):output = result[0].reshape(-1)output_sorted = sorted(output, reverse=True)top5_str = 'LeNet\n-----TOP 5-----\n'for i in range(5):value = output_sorted[i]index = np.where(output == value)for j in range(len(index)):if (i + j) >= 5:breakif value > 0:topi = '{}: {}\n'.format(index[j], value)else:topi = '-1: 0.0\n'top5_str += topiprint(top5_str)if __name__ == '__main__':rknn_model = RKNN_MODELrknn_lite = RKNNLite()# load RKNN modelprint('--> Load RKNN model')ret = rknn_lite.load_rknn(rknn_model)if ret != 0:print('Load RKNN model failed')exit(ret)print('done')ori_img = cv2.imread('./5.png')img = cv2.cvtColor(ori_img, cv2.COLOR_RGB2GRAY)img = np.expand_dims(img,0)img = np.expand_dims(img,0)# init runtime environmentprint('--> Init runtime environment')ret = rknn_lite.init_runtime()if ret != 0:print('Init runtime environment failed')exit(ret)# Inferenceprint('--> Running model')outputs = rknn_lite.inference(inputs=[img])show_top5(outputs)print('done')rknn_lite.release()

在这里插入图片描述
在这里插入图片描述

二、modelzoo模型

2.1 介绍

modelzoo提供了大量模型转换与部署的示例代码,旨在帮助用户快速在搭载瑞芯微芯片的开发板上运行各种模型。

2.2 测试

刚刚运行了
python3 mobilenet.py --target rk3588发现缺少numpy,运行conda install numpy,安装即可
嗯,少个cv2,pip install opencv-python、有少个rknn

感觉不对劲,我又把rknn-toolkit2给装了,装玩之后,运行python3 mobilenet.py --target rk3588,运行成功。想了想我在windows底下安装的pytorch,算了,好像不需要这个toolkit。

import torch
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
import pandas as pd# 加载YOLOv5模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# 定义观测区域的长度(单位:米),假设为100米
observation_length = 100def process_video_yolov5(video_path):cap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"无法打开视频文件 {video_path}")returnfps = int(cap.get(cv2.CAP_PROP_FPS))  # 获取视频帧率frame_count = 0vehicle_count_per_5_seconds = []current_5s_vehicle_count = 0total_vehicle_count = 0speed_per_5_seconds = []density_per_5_seconds = []while True:ret, frame = cap.read()if not ret:break# 使用YOLOv5进行检测results = model(frame)# 解析检测结果,results.pandas().xyxy 返回检测结果的 DataFramedetections = results.xyxy[0].cpu().numpy()  # [x1, y1, x2, y2, conf, cls]current_frame_speeds = []for *box, conf, cls in detections:# 检测类别ID,2: 汽车, 3: 摩托车, 5: 公共汽车, 7: 卡车if int(cls) in [2, 3, 5, 7]:x1, y1, x2, y2 = map(int, box)current_5s_vehicle_count += 1  # 累计每帧中检测到的车辆total_vehicle_count += 1# 假设简单的速度估计(可以根据车辆框的大小或位移进一步优化)width = x2 - x1speed = (width / observation_length) * fps  # 简单估计速度current_frame_speeds.append(speed)# 在图像上绘制检测框cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)frame_count += 1# 每5秒钟(fps * 5 帧),记录一次车辆流量和速度if frame_count % (fps * 5) == 0:vehicle_count_per_5_seconds.append(current_5s_vehicle_count)print(f"第{len(vehicle_count_per_5_seconds) * 5}秒,车辆流量: {current_5s_vehicle_count}")# 车流密度计算(每5秒的车辆数 / 观测区域长度)density = current_5s_vehicle_count / observation_lengthdensity_per_5_seconds.append(density)# 车速计算(当前帧车辆速度的平均值)avg_speed = np.mean(current_frame_speeds) if current_frame_speeds else 0speed_per_5_seconds.append(avg_speed)current_5s_vehicle_count = 0  # 重置当前5秒的车辆计数# 显示结果cv2.imshow('Vehicle Detection with YOLOv5', frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()print(f"视频 {video_path} 处理完成,车辆总数: {total_vehicle_count}")return vehicle_count_per_5_seconds, density_per_5_seconds, speed_per_5_seconds# 绘制并保存车流密度、流量、速度的折线图到桌面,并生成Excel文件
def save_to_excel_and_plot(vehicle_counts, density_counts, speed_counts):time_points = list(range(5, len(vehicle_counts) * 5 + 1, 5))  # X轴为5秒的时间点# 创建DataFramedf = pd.DataFrame({'Time (seconds)': time_points,'Vehicle Count (Flow)': vehicle_counts,'Vehicle Density': density_counts,'Average Speed (m/s)': speed_counts})# 获取桌面路径desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')  # Windowssave_dir = desktop_pathif not os.path.exists(save_dir):os.makedirs(save_dir)# 保存Excel文件excel_path = os.path.join(save_dir, 'vehicle_data.xlsx')df.to_excel(excel_path, index=False)print(f"数据已保存到 {excel_path}")# 绘制折线图plt.figure(figsize=(10, 6))# 绘制车辆流量plt.plot(time_points, vehicle_counts, marker='o', linestyle='-', color='b', label='Vehicle Flow')# 绘制车流密度plt.plot(time_points, density_counts, marker='x', linestyle='--', color='r', label='Vehicle Density')# 绘制平均速度plt.plot(time_points, speed_counts, marker='s', linestyle='-', color='g', label='Average Speed')plt.title('Vehicle Data over Time')plt.xlabel('Time (seconds)')plt.ylabel('Value')plt.grid(True)plt.legend()# 保存图表到桌面save_path = os.path.join(save_dir, 'vehicle_data_plot.png')plt.savefig(save_path)print(f"图表已保存到 {save_path}")plt.show()# 处理视频
video_paths = ['20240501_20240501125647_20240501140806_125649.mp4']
for video_path in video_paths:vehicle_counts, density_counts, speed_counts = process_video_yolov5(video_path)save_to_excel_and_plot(vehicle_counts, density_counts, speed_counts)

在这里插入图片描述
测试完毕

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI资深导师指导-ChatGPT深度科研工作应用、论文撰写、数据分析及机器学习与AI绘图

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在…

Fyne ( go跨平台GUI )中文文档-绘图和动画(三)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

GAMES101(15节,辐射,BRDF)

Irradiance辐射度量学 辐射度量学在渲染领域,可以帮助理解基于物理的光照模型 radiant energy辐射能量Q,累计总能量(单位J joule焦耳),就像太阳能板,光照时间越长接收能量越多,收到的能量总和…

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火,可有人提问,这么火的语言它的底层又是什么语言编写的呢? python是C语言编写的,它有很多包也是用C语言写的。 所以说,C语言还是很…

解密的军事卫星图像在各种民用地理空间研究中都有应用

一、美军光学侦察卫星计划概述 国家侦察局 (NRO) 负责开发和操作太空侦察系统,并为美国国家安全开展情报相关活动。NRO 开发了几代机密锁眼 (KH) 军事光学侦察卫星,这些卫星一直是美国国防部 (D…

Upload-Labs 文件上传靶场 通关

Pass-01 (本pass在客户端使用js对不合法图片进行检查!) Pass-02 Pass-02 (本pass在服务端对数据包的MIME进行检查!) Pass-03 Pass-03 (本pass禁止上传.asp|.aspx|.php|.jsp后缀文件!) AddType application/x-httpd-php .php .phtml .php3 .php4 .p…

Java-Part 0

Advanced Java and Cutting-edge Applications Part 0: Course presentation Part 1 其实就是个括号匹配问题,Stack 经典问题,但是好久没用Java,有一点点生疏,感觉老师的版本要简洁的多 package tiei.ajp.test;import java.uti…

java项目之基于spring boot的多维分类的知识管理系统的设计与实现源码

项目简介 基于spring boot的多维分类的知识管理系统的设计与实现实现了以下功能: 基于spring boot的多维分类的知识管理系统的设计与实现的主要使用者管理员可以管理用户信息,知识分类,知识信息等,用户可以查看和下载管理员发布…

Python|OpenCV-实现识别目标图像中的圆圈(20)

前言 本文是该专栏的第22篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在处理图像检测项目的时候,可能会遇到需要检测目标图像中的“圆圈”需求。笔者在这里举个例子,如下图所示: 在图中有一个篮球,但是我们要找的目标对象并不是篮球,而是篮球它本身的这个…

BUUCTF-MISC-数据包中的线索

下载题目文件,解压发现是一段流量包 使用Wireshark打开 首先过滤HTTP数据流 然后追踪HTTP数据流 通过追踪数据流可以发现 流7 当中有一段base64编码,我们尝试解码 base64基本特征 Base64编码只包含64个字符:大写字母(A-Z&#x…

(四)悟说几个特殊矩阵及矩阵函数

上一期介绍了矩阵的出现源于解线性方程组。但是,矩阵出现之后,就犹如打开了潘多拉的盒子,会产生许多魔法。 1 旋转矩阵 我们知道用矩阵左乘某个向量,相当于对该向量做线性变换。那么是否有一种矩阵,能让向量旋转&…

2D目标检测常用loss

在2D目标检测任务中,常用的损失函数(Loss)主要用于优化以下三个关键方面: 类别分类(Classification):用于区分检测到的对象属于哪一类。边界框回归(Bounding Box Regression&#x…

《代码整洁之道:程序员的职业素养》

作者:【美】Robert C. Martin 第1章 专业主义 专业主义就意味着担当责任,软件开发太复杂了,不可能没什么 bug。但很不幸,这并不能为你开脱。人体太复杂了,不可能尽知其全部,但医生仍要发誓不伤害病人。如…

基于单片机的智能温控风扇系统的设计

[摘 要] 设计一种基于单片机的智能温控风扇系统,系统由 STC 系列的 51 单片机 、 温度传感器 、 LED 数码管和风扇等模块组成。 本系统具有对外界温度感知以及对感知数据进行分析处理 、 智能调节等功能,避免因温度过高而产生…

6.定期自动执行脚本,让你的金融数据库及时更新!

上一节课我们配置好了我们的运行环境,今天我来教大家怎么在不同的环境下配置定时任务,从而自动执行脚本以更新数据库。 一、Windows下定时执行脚本 如果你的电脑是Windows,并且你没有一台支持Docker的NAS、也没有一台Linux服务器&#xff0…

text2sql方法:RESDSQL和DAIL-SQL

之前介绍了text2sql的综述,但是对一些方法的描述不够详细,所以将一些感兴趣的方法思路也整理一下。 RESDSQL RESDSQL出自2023年2月的论文《RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL》(github)。它使用seq2seq PLM(pr…

[笔记] 走行电机控制器 防摇摆功能的技术细节

防摇摆用于走行电机控制,一般用于小车。这里参考了数重的彩页: 1.原理 这个无效和有效的控制是靠启动时的幔起,和停车时的缓停实现的。他似乎对加速过程的力矩曲线做了某种控制,能够让启停时,必然的角度变化在运动中逐…

【时时三省】(C语言基础)指针笔试题3

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 笔试题3 首先创建了一个数组 数组里面放了1 2 3 4 &a取出的是数组的地址 数组地址加1 如下图 直接从1跳到了四后面 然后强制类型转换成了int* 转换成int*之…

ModbusTCP通讯错误的排查

Modbus是一种由MODICON公司开发的工业现场总线协议标准,是一项应用层报文传输协议。该协议用于传输数字和模拟变量[1]。有关该协议的报文具体格式,以及一些基本概念,见[1]。 本文以一个例子,阐述当ModbusTCP通讯出现错误的时候&a…

01_RabbitMQ安装及工作模式

一、消息队列MQ 中间件 1.1 什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一…