当前位置: 首页 > news >正文

基于 PyQt 的YOLO目标检测可视化界面+ nuitka 打包

在人工智能和计算机视觉领域,YOLO(You Only Look Once)是一种广泛使用的实时目标检测算法。为了直观地展示YOLO算法的检测效果,我们使用Pyqt框架进行检测结果的可视化,同时为了使其能够脱离Python环境,我们将模型文件转换为ONNX格式,并使用nuitka进行打包。

界面展示

为了使系统更加完备,采用SQLite数据库,设计登录注册、图像检测、视频检测、相机实时检测、模型更换等功能,效果如下:

在这里插入图片描述

如下图所示:其左侧为功能区,中间为展示区,右侧上方展示检测结果,下方为日志记录。

在这里插入图片描述

nuitka打包

我们要使python项目脱离python环境,可以选择将其打包为exe文件,当前比较主流的打包方式是采用pyinstaller的方式,但这种打包方式的执行效率相对较低,而nuitka的打包方式将python代码转换为C代码,执行速度更快,且更安全。

nuitka --standalone --enable-plugin=qt-plugins --windows-disable-console --follow-imports --show-memory --show-progress --output-dir=dist login.py

在这里插入图片描述

ONNX推理

下面是YOLODet目标检测的代码,涉及模型加载、前处理、模型推理、后处理、绘图。

import time
import cv2
import numpy as np
import onnxruntime
from utils import xywh2xyxy, multiclass_nms,detections_dog
class YOLODet:#初始化YOLO模型def __init__(self, path, conf_thres=0.7, iou_thres=0.5):self.conf_threshold = conf_thresself.iou_threshold = iou_thresself.initialize_model(path)#调用推理def __call__(self, image):return self.detect_objects(image)def initialize_model(self, path):self.session = onnxruntime.InferenceSession(path,providers=onnxruntime.get_available_providers())self.get_input_details()self.get_output_details()#执行模型推理过程def detect_objects(self, image):input_tensor = self.prepare_input(image)outputs = self.inference(input_tensor)self.boxes, self.scores, self.class_ids = self.process_output(outputs)return self.boxes, self.scores, self.class_ids#前处理操作def prepare_input(self, image):self.img_height, self.img_width = image.shape[:2]input_img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)input_img = cv2.resize(input_img, (self.input_width, self.input_height))input_img = input_img / 255.0input_img = input_img.transpose(2, 0, 1)input_tensor = input_img[np.newaxis, :, :, :].astype(np.float32)return input_tensor#具体使用onnx推理def inference(self, input_tensor):outputs = self.session.run(self.output_names, {self.input_names[0]: input_tensor})return outputs#后处理操作def process_output(self, output):predictions = np.squeeze(output[0]).Tscores = np.max(predictions[:, 4:], axis=1)predictions = predictions[scores > self.conf_threshold, :]scores = scores[scores > self.conf_threshold]if len(scores) == 0:return [], [], []class_ids = np.argmax(predictions[:, 4:], axis=1)boxes = self.extract_boxes(predictions)indices = multiclass_nms(boxes, scores, class_ids, self.iou_threshold)return boxes[indices], scores[indices], class_ids[indices]#box转换,包含尺度变换与xywh转换def extract_boxes(self, predictions):boxes = predictions[:, :4]boxes = self.rescale_boxes(boxes)boxes = xywh2xyxy(boxes)return boxes#尺度变换def rescale_boxes(self, boxes):input_shape = np.array([self.input_width, self.input_height, self.input_width, self.input_height])boxes = np.divide(boxes, input_shape, dtype=np.float32)boxes *= np.array([self.img_width, self.img_height, self.img_width, self.img_height])return boxes#绘制图像def draw_detections(self, image, draw_scores=True, mask_alpha=0.4):return detections_dog(image, self.boxes, self.scores,self.class_ids, mask_alpha)def get_input_details(self):model_inputs = self.session.get_inputs()self.input_names = [model_inputs[i].name for i in range(len(model_inputs))]self.input_shape = model_inputs[0].shapeself.input_height = self.input_shape[2]self.input_width = self.input_shape[3]def get_output_details(self):model_outputs = self.session.get_outputs()self.output_names = [model_outputs[i].name for i in range(len(model_outputs))]

相关文章:

  • 工程师 - 汽车分类
  • 基于SpringBoot + HTML 的宠物医院预约管理
  • 硬件工程师面试常见问题(13)
  • TS typeof运算符
  • TS 变量类型生成
  • chili3d调试10 网页元素css node deepwiki 生成圆柱体 生成零件图片
  • RabbitMQ入门基础
  • 表驱动 FSM 在 STM32 上的高效实现与内存压缩优化——源码、性能与实践
  • 如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
  • 【C++11】其他一些新特性 | 右值引用 | 完美转发
  • 数据库MySQL学习——day8(复习与巩固基础知识)
  • cuDNN 9.9.0 便捷安装-Windows
  • Python读取comsol仿真导出数据并绘图
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.4 数据重复与去重(IDENTITY COLUMN/UNIQUE约束)
  • 软考-软件设计师中级备考 8、进程管理
  • 硬件加速模式Chrome(Edge)闪屏
  • React class 的组件库与函数组件适配集成
  • CSS 变量与原生动态主题实现
  • ES6/ES11知识点 续二
  • 高等数学第三章---微分中值定理与导数的应用(§3.6 函数图像的描绘§3.7 曲率)
  • 巴菲特股东大会精华版:批评拿贸易当武器,宣布年底交班
  • 电商平台集体出手,多措并举助力外贸企业拓内销
  • 首都航空:太原至三亚航班巡航阶段出现机械故障,已备降南宁机场
  • “五一”假期首日:国铁南宁局发送旅客81.7万人次
  • 中国空间站多项太空实验已取得成果,未来将陆续开展千余项研究
  • 全文丨中华人民共和国民营经济促进法