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

简述织梦网站上传及安软件测试培训

简述织梦网站上传及安,软件测试培训,外贸信托是哪个贷款平台,辽宁沈阳又发现一例吗今天这是一个基于 PyTorch 和 PyQt5 的物体识别程序,使用 Faster R-CNN 模型来识别图片中的物体,并通过图形界面展示识别结果。 1.用户界面 主窗口:包含加载图片、识别、清除按钮,以及图片显示区域和结果展示区域。 图片显示&#…

      这是一个基于 PyTorch 和 PyQt5 的物体识别程序,使用 Faster R-CNN 模型来识别图片中的物体,并通过图形界面展示识别结果。

1.用户界面

  • 主窗口:包含加载图片、识别、清除按钮,以及图片显示区域和结果展示区域。
  • 图片显示:支持显示原始图片和处理后的图片(标注了识别结果)。
  • 结果显示:显示识别到的物体类别和置信度。

2. 核心功能

  • 加载图片:用户可以通过点击“加载图片”按钮选择本地图片文件。
  • 物体识别:使用 Faster R-CNN 模型识别图片中的物体。
  • 标注结果:在图片上绘制矩形框,并标注物体类别和置信度。
  • 显示结果:在界面中显示所有识别到的物体及其类别和置信度。
  • 清除显示:点击“清除”按钮,清空图片和结果显示区域。

3. 技术细节

  • Faster R-CNN 模型:使用 PyTorch 提供的预训练 Faster R-CNN 模型(基于 COCO 数据集)。
  • 图片处理:使用 OpenCV 进行图片的加载、格式转换和标注。
  • 类别映射:将模型输出的类别 ID 映射为 COCO 数据集的类别名称(如 person, car, dog 等)。
  • 置信度过滤:只显示置信度大于 0.5 的物体。
import sys
import cv2
import torch
import torchvision
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QFileDialog)
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qtclass ObjectDetector(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("物体识别系统")self.setGeometry(100, 100, 800, 600)# 初始化UIself.init_ui()# 加载预训练的Faster R-CNN模型self.model = torchvision.models.detection.fasterrcnn_resnet50_fpn(weights=torchvision.models.detection.FasterRCNN_ResNet50_FPN_Weights.DEFAULT)self.model.eval()# COCO数据集类别名称self.coco_class_names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee','skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch','potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone','microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear','hair drier', 'toothbrush']# 验证 COCO 和模型匹配性print(f"COCO 类别数量: {len(self.coco_class_names)}")  # 应为 80def init_ui(self):"""初始化用户界面"""# 创建主窗口部件和布局central_widget = QWidget()self.setCentralWidget(central_widget)layout = QVBoxLayout(central_widget)# 创建顶部按钮区域button_layout = QHBoxLayout()# 添加按钮self.btn_load = QPushButton("加载图片", self)self.btn_load.clicked.connect(self.load_image)button_layout.addWidget(self.btn_load)self.btn_detect = QPushButton("识别", self)self.btn_detect.clicked.connect(self.detect_objects)button_layout.addWidget(self.btn_detect)self.btn_clear = QPushButton("清除", self)self.btn_clear.clicked.connect(self.clear_display)button_layout.addWidget(self.btn_clear)layout.addLayout(button_layout)# 创建显示区域display_layout = QHBoxLayout()# 原始图片显示self.image_label = QLabel()self.image_label.setMinimumSize(400, 400)self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet("border: 2px solid black;")display_layout.addWidget(self.image_label)# 处理后的图片显示self.processed_label = QLabel()self.processed_label.setMinimumSize(400, 400)self.processed_label.setAlignment(Qt.AlignCenter)self.processed_label.setStyleSheet("border: 2px solid black;")display_layout.addWidget(self.processed_label)layout.addLayout(display_layout)# 结果显示self.result_label = QLabel("识别结果将在这里显示")self.result_label.setAlignment(Qt.AlignCenter)self.result_label.setStyleSheet("""QLabel {font-size: 24px;margin: 20px;padding: 10px;background-color: #f0f0f0;border-radius: 5px;}""")layout.addWidget(self.result_label)# 初始化变量self.current_image = Noneself.processed_image = Nonedef load_image(self):"""加载图片"""file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Image Files (*.png *.jpg *.jpeg *.bmp)")if file_name:# 读取图片self.current_image = cv2.imread(file_name)if self.current_image is None:self.result_label.setText("无法加载图片!")return# 显示原始图片self.display_image(self.current_image, self.image_label)def display_image(self, image, label):"""显示图片到指定的标签"""height, width = image.shape[:2]bytes_per_line = 3 * widthq_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()pixmap = QPixmap.fromImage(q_image)scaled_pixmap = pixmap.scaled(label.size(), Qt.KeepAspectRatio)label.setPixmap(scaled_pixmap)def detect_objects(self):"""识别图片中的物体"""if self.current_image is None:self.result_label.setText("请先加载图片!")return# 将OpenCV的BGR图片转换为RGBimage_rgb = cv2.cvtColor(self.current_image, cv2.COLOR_BGR2RGB)# 将NumPy数组转换为PyTorch Tensorimage_tensor = torch.from_numpy(image_rgb).permute(2, 0, 1).float() / 255.0# 添加batch维度image_tensor = image_tensor.unsqueeze(0)# 使用Faster R-CNN模型进行物体识别with torch.no_grad():results = self.model(image_tensor)# 打印模型输出的类别 IDprint(f"模型输出的类别 ID: {results[0]['labels']}")# 处理识别结果self.processed_image = self.current_image.copy()for box, label, score in zip(results[0]['boxes'], results[0]['labels'], results[0]['scores']):if score > 0.5:  # 只显示置信度大于0.5的物体if 1 <= label <= 80:  # 检查类别 ID 是否在有效范围内x1, y1, x2, y2 = map(int, box)cv2.rectangle(self.processed_image, (x1, y1), (x2, y2), (0, 255, 0), 2)class_name = self.coco_class_names[label - 1]  # COCO类别ID从1开始cv2.putText(self.processed_image, f"{class_name}: {score:.2f}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)else:print(f"警告: 无效的类别 ID: {label}")# 显示处理后的图片self.display_image(self.processed_image, self.processed_label)# 显示识别结果detected_objects = []for label, score in zip(results[0]['labels'], results[0]['scores']):if score > 0.5:if 1 <= label <= 80:  # 检查类别 ID 是否在有效范围内class_name = self.coco_class_names[label - 1]  # COCO类别ID从1开始detected_objects.append(f"类别: {class_name}, 置信度: {score:.2f}")else:print(f"警告: 无效的类别 ID: {label}")if detected_objects:self.result_label.setText("识别结果:\n" + "\n".join(detected_objects))else:self.result_label.setText("未识别到物体!")def clear_display(self):"""清除显示"""self.image_label.clear()self.processed_label.clear()self.result_label.setText("识别结果将在这里显示")self.current_image = Noneself.processed_image = Nonedef main():app = QApplication(sys.argv)window = ObjectDetector()window.show()sys.exit(app.exec_())if __name__ == "__main__":main() 

http://www.yidumall.com/news/61674.html

相关文章:

  • 网站改版新闻网站seo排名优化软件
  • 成品型网站建设湖南seo网站开发
  • 网站建设吴江百度seo优化方案
  • 网站建设与管理专业好不好就业it培训机构出来能找到工作吗
  • 笔记本做网站服务器企业网站seo优化
  • 做微商截图的网站青岛网站运营
  • 网站开发工程师证书网络广告策划书
  • 网站空间和服务器的区别友情链接作用
  • 免费网上商城模板知乎seo
  • jsp做购物网站技术可行性乱码链接怎么用
  • 唐山做网站优化公司日照网络推广公司
  • 手机端网站开发价格成都网站设计公司
  • 权重较高网站软文广告推广
  • 外贸类网站模板凡科网站官网
  • 男女做羞羞羞的网站南宁百度关键词排名公司
  • 南宁网站制作公司云盘网页版登录
  • 国外做节目包装的网站手机百度极速版
  • 自己做网站的劣势html制作网页代码
  • 自己怎样做公司广告视频网站网站运营一个月多少钱
  • 网站建设模板ppt友妙招链接怎么弄
  • 动态网站与建设实训心得电商seo与sem是什么
  • discuz可以做商城网站吗百度关键词排名点击器
  • 网站伪静态是什么意思策划方案
  • 武汉高端网站制作公司cpc广告接单平台
  • wordpress 修改ipseoul是什么意思
  • 搜狗推广登录平台龙泉驿网站seo
  • 龙口做网站哪家好怎么免费建立网站
  • 简单网页尝试做教案广州seo推广优化
  • 搜索引擎推广实训关键词优化快排
  • 企业网站开发实训过程与内容常州seo第一人