基于vgg16和efficientnet卷积神经网络的天气识别系统(pytorch框架) 图像识别与分类 前端界面:flask+python, UI界面:pyqt5+python,构建天气识别系统

在这里插入图片描述
基于vgg16和efficientnet卷积神经网络的天气识别系统(pytorch框架)在这里插入图片描述

前端界面:flask+python, UI界面:pyqt5+python在这里插入图片描述

这是一个完整项目,包括代码,数据集,模型训练记录,前端界面,ui界面,各种指标图:包括准确率,精确率,召回率,F1值,损失曲线,准确率曲线等
在这里插入图片描述

卷积模型采用vgg16模型或efficientnet,也可以用其他的卷积模型在这里插入图片描述
在这里插入图片描述
PyQt5 UI 应用入口在这里插入图片描述
好的,我们将构建一个完整的天气识别系统,使用VGG16和EfficientNet作为卷积神经网络,并结合Flask和PyQt5分别实现前端界面和UI界面。项目将包括数据集准备、模型训练、评估、前端和服务端代码。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QMessageBox
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
import requests
import json

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Weather Recognition System")
        self.setGeometry(100, 100, 800, 600)

        self.image_label = QLabel(self)
        self.image_label.setAlignment(Qt.AlignCenter)

        self.upload_button = QPushButton("Upload Image", self)
        self.upload_button.clicked.connect(self.upload_image)

        self.result_label = QLabel("", self)
        self.result_label.setAlignment(Qt.AlignCenter)
        self.result_label.setStyleSheet("font-size: 16px; font-weight: bold;")

        layout = QVBoxLayout()
        layout.addWidget(self.image_label)
        layout.addWidget(self.upload_button)
        layout.addWidget(self.result_label)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def upload_image(self):
        options = QFileDialog.Options()
        file_path, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", "Images (*.png *.xpm *.jpg);;All Files (*)", options=options)
        if file_path:
            pixmap = QPixmap(file_path)
            self.image_label.setPixmap(pixmap.scaled(400, 400, Qt.KeepAspectRatio))

            files = {'file': open(file_path, 'rb')}
            response = requests.post('http://127.0.0.1:5000/predict', files=files)
            result = response.json()

            vgg16_prediction = result['vgg16_prediction']
            efficientnet_prediction = result['efficientnet_prediction']

            self.result_label.setText(f"VGG16 Prediction: {vgg16_prediction}\nEfficientNet Prediction: {efficientnet_prediction}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())




项目结构

weather_recognition_system/
├── data/
│   ├── train/
│   │   ├── sunny/
│   │   ├── cloudy/
│   │   ├── rainy/
│   │   └── snowy/
│   └── val/
│       ├── sunny/
│       ├── cloudy/
│       ├── rainy/
│       └── snowy/
├── models/
│   ├── vgg16.pth
│   └── efficientnet.pth
├── app.py          # Flask应用入口
├── ui_app.py       # PyQt5 UI应用入口
├── train_vgg16.py  # VGG16模型训练脚本
├── train_efficientnet.py  # EfficientNet模型训练脚本
├── utils.py        # 工具函数
├── requirements.txt  # 依赖项
└── README.md       # 项目说明文档

安装依赖项

首先,安装所需的Python库:

pip install torch torchvision flask pyqt5 matplotlib scikit-learn pandas seaborn

数据集准备

假设你已经有一个天气图像数据集,目录结构如上所示。如果没有,可以从公开的数据集中下载或自行收集。

训练模型

VGG16 模型训练
EfficientNet 模型训练

前端界面 (Flask)

app.py 文件
templates/index.html 文件

创建一个简单的HTML模板用于上传图片并显示预测结果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Weather Recognition</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f4f4f4;
        }
        .container {
            text-align: center;
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        input[type="file"] {
            margin-bottom: 20px;
        }
        button {
            padding: 10px 20px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .result {
            margin-top: 20px;
            font-size: 1.2em;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Upload Weather Image</h1>
        <form id="upload-form" enctype="multipart/form-data">
            <input type="file" id="file-input" name="file" accept="image/*" required>
            <br><br>
            <button type="submit">Predict</button>
        </form>
        <div class="result" id="result"></div>
    </div>

    <script>
        document.getElementById('upload-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const formData = new FormData(this);

            fetch('/predict', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('result').innerHTML = `
                    <p>VGG16 Prediction: ${data.vgg16_prediction}</p>
                    <p>EfficientNet Prediction: ${data.efficientnet_prediction}</p>
                `;
            })
            .catch(error => console.error('Error:', error));
        });
    </script>
</body>
</html>

UI界面 (PyQt5)

ui_app.py 文件

运行项目

  1. 启动Flask服务器:

    python app.py
    
  2. 启动PyQt5 UI应用:

    python ui_app.py
    

解释

  1. 数据预处理: 使用 transforms.Compose 对图像进行预处理。
  2. 模型训练: 使用VGG16和EfficientNet进行训练,并绘制损失曲线和准确率曲线。
  3. Flask应用: 提供一个简单的Web界面用于上传图像并获取预测结果。
  4. PyQt5 UI应用: 提供一个图形化的用户界面用于上传图像并显示预测结果。

通过这些步骤,你可以构建一个完整的天气识别系统,包括训练、评估、前端和服务端代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值