windows10使用cuda11搭建pytorch深度学习框架——vscode配置pyqt5+简单制作页面+打包全过程

本文分享了使用PyQt设计GUI界面的过程,并介绍了如何利用PyInstaller将Python深度学习项目打包成Windows可执行文件。文中详细讲解了终端输出、错误信息显示、按钮样式设置等技巧,同时针对打包过程中遇到的大文件及运行速度慢等问题提供了有效的解决方案。
部署运行你感兴趣的模型镜像

这里记录一下想要将我们的深度学习代码封装
如何在windows上实现

由于我比较习惯python
所以相对于qt师兄给我们推荐了pyqt以及pyinstaller
这两个一个做页面
一个来封装代码
所以这里记录一下学习过程

先来安装 看如何在vscode里使用pyqt
查看这篇博文

然后具体操作的步骤可以查看这个博客
各种步骤可以跟着学习

把程序终端输出的内容输出到我设计的GUI界面

我参考了这篇博客
这篇博客的方法超级简单

首先需要在编译生成的GUI界面加上这段代码

def printf(self, mes):            
	self.output.append(mes)  # 在指定的区域显示提示信息            
	self.cursot = self.output.textCursor()            
	self.textBrowser.moveCursor(self.cursot.End)            
	QtWidgets.QApplication.processEvents()

然后在主程序里调用就可以了

Ui_MainWindow.printf(self,str(i/10)+'     %.2f'%(time()-tic))

但是需要注意数据必须都是str格式的
否则会报错

把程序错误内容输出到我设计的GUI界面

主要参考了这篇博客

主要是添加了这几部分代码
首先是外面的函数

def exceptOutConfig(exctype, value, tb):    
	print('My Error Information:')    
	print('Type:', exctype)    
	print('Value:', value)    
	print('Traceback:', tb)
class EmittingStr(QtCore.QObject):    
	textWritten = QtCore.pyqtSignal(str)  # 定义一个发送str的信号
  
	def write(self, text):        
		self.textWritten.emit(str(text))

然后是在主类中
在这里插入图片描述

	sys.stdout = EmittingStr(textWritten=self.outputWritten)        
	sys.stderr = EmittingStr(textWritten=self.outputWritten)
   def outputWritten(self, text):        
    	cursor = self.output.textCursor()        
    	cursor.movePosition(QtGui.QTextCursor.End)       
    	cursor.insertText(text)        
    	self.output.setTextCursor(cursor)        
    	self.output.ensureCursorVisible()

最后是if _name_中

if __name__ == "__main__":    
	sys.excepthook = exceptOutConfig    
	app = QApplication(sys.argv)    
	myWin = MyMainWindow()    
	myWin.show()    
	sys.exit(app.exec_())    

就会有报错信息啦
在这里插入图片描述

为按钮添加悬停变化

这里我主要参考了这篇博客
讲的非常详细
直接看就好啦
对我来说
就是为每一个控件添加了下面的代码
在这里插入图片描述

pyinstaller 封装成exe文件

封装可以直接搜索就有啦
只是我的程序比较大 要稍微多等等
有了exe文件之后报错
在这里插入图片描述
这篇博客可以解决

ImportError: ERROR: recursion is detected during loading of “cv2” binary extensions. Check OpenCV installation.

我是参考了这篇博客
卸载重装了opencv-python更换成了4.5的版本
就可以运行啦

虽然成功运行啦
但是还是有运行速度慢,exe太大了的问题

运行速度太慢,程序太大

如何解决这个问题
目前参考了这篇文章

因此我总结一下我的方法
首先是使用下面的语句进行打包

pyinstaller -D -w act_deepl.py

这样生成的虽然不是一个exe文件,但启动速度非常快,包的大小为4.9G

pyinstaller -F -w act_deepl.py

这样生成的是一个exe文件,但是启动速度超级慢,包的大小是2.5G
这俩有利有弊吧

然后尝试使用Enigma Virtual Box打包exe
但是失败了
这个软件出来的包无法在电脑上运行
不知道为什么

所以最可靠的方法就只有新建一个虚拟环境
只安装我们需要的包然后打包最后删除该虚拟环境了
无法避免生成一个大包了

打包总结

打开anaconda的prompt
激活安装了pyinstall的虚拟环境

conda activate torch

进入打包的程序路径

cd C:\Users\Administrator\Desktop\Deepl

开始打包成一个文件夹

pyinstaller -D -w act_deepl.py

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我需要帮助用户了解如何基于CNN(如MobileNet)和PyTorch实现人脸识别系统,集成Python 3.11PyTorch、OpenCV、PyQt5使用Anaconda和PyCharm,并涉及前后端分离和数据库交互。首先,我需要理清整个项目的架构和步骤,确保各部分能够正确衔接。 首先,环境搭建是关键。用户提到了使用Anaconda,所以需要指导他们创建一个新的conda环境,并安装指定版本的Python和相关库。PyTorch的安装可能需要根据CUDA版本进行调整,但用户可能没有明确说明是否使用GPU,所以可能需要同时考虑CPU和GPU的情况。此外,OpenCV和PyQt5的安装可能涉及额外的依赖,需要确保通过conda或pip正确安装。 接下来是数据准备和预处理。人脸识别通常需要人脸数据集,比如LFW或自定义数据集。可能需要指导用户如何加载数据集,进行归一化、数据增强等预处理步骤。这里可能需要使用OpenCV进行人脸检测和对齐,确保输入图像的一致性。 然后是模型构建部分。用户提到使用MobileNet,但MobileNet本身是一个分类模型,而人脸识别通常涉及特征提取和比对。可能需要将MobileNet作为骨干网络,接一个全局池化层和全连接层,输出特征向量。或者使用预训练的MobileNet,去掉最后的分类层,提取特征,再通过三元组损失(Triplet Loss)等进行训练。这部分需要明确模型的结构和损失函数的选择。 训练过程需要详细说明,包括数据加载器的设置、优化器的选择、学习率调整策略等。可能需要提供示例代码,展示如何组织训练循环,保存和加载模型。 前后端分离方面,后端使用PyTorch处理模型推理,前端用PyQt5设计界面。需要解释如何将模型封装为API或模块,供前端调用。同时,数据库用于存储用户信息或特征向量,可能需要使用SQLite或MySQL,通过Python的数据库接口进行交互。需要说明数据库设计,例如用户ID、特征向量、时间戳等字段。 集成测试部分,需要确保前后端能够正常通信,数据能够正确存储和检索。可能需要编写示例代码,展示如何从前端捕获图像,调用后端模型进行识别,并将结果存入数据库。 在代码示例方面,需要分模块提供,比如模型定义、训练脚本、前端界面代码、数据库处理等。同时要注意各部分之间的接口设计,确保模块化,方便维护。 可能遇到的问题包括环境配置冲突、版本兼容性、模型性能优化、界面响应速度等。需要提醒用户注意这些潜在问题,并给出解决建议,比如使用虚拟环境、检查库版本、模型量化等优化措施。 最后,生成的相关问题需要围绕人脸识别的扩展应用、模型优化、部署方式等,帮助用户进一步探索。</think>### 基于CNN和PyTorch的人脸识别系统实现步骤 #### 一、环境配置(Anaconda + PyCharm) 1. 创建conda环境: ```bash conda create -n face_recognition python=3.11 conda activate face_recognition ``` 2. 安装核心依赖: ```bash conda install pytorch torchvision torchaudio -c pytorch # 根据CUDA版本选择命令 pip install opencv-python pyqt5 sqlalchemy ``` #### 二、数据库设计(SQLite示例) ```python # database.py from sqlalchemy import create_engine, Column, Integer, String, LargeBinary from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class UserFace(Base): __tablename__ = 'user_faces' id = Column(Integer, primary_key=True) user_id = Column(String(50)) feature_vector = Column(LargeBinary) # 存储512维特征向量 timestamp = Column(String(20)) engine = create_engine('sqlite:///faces.db') Base.metadata.create_all(engine) ``` #### 三、模型构建(MobileNet改造) ```python # model.py import torch import torch.nn as nn from torchvision.models import mobilenet_v3_small class FaceRecModel(nn.Module): def __init__(self, embedding_size=512): super().__init__() base_model = mobilenet_v3_small(pretrained=True) self.feature_extractor = nn.Sequential(*list(base_model.children())[:-1]) self.embedding = nn.Linear(576, embedding_size) def forward(self, x): x = self.feature_extractor(x) x = x.view(x.size(0), -1) return self.embedding(x) # 三元组损失示例 criterion = torch.nn.TripletMarginLoss(margin=1.0) ``` #### 四、PyQt5前端界面 ```python # main_window.py from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget from PyQt5.QtCore import Qt import cv2 class FaceRecGUI(QMainWindow): def __init__(self): super().__init__() self.initUI() self.cap = cv2.VideoCapture(0) def initUI(self): self.central_widget = QWidget() self.layout = QVBoxLayout() self.video_label = QLabel() self.layout.addWidget(self.video_label) self.central_widget.setLayout(self.layout) self.setCentralWidget(self.central_widget) def update_frame(self): ret, frame = self.cap.read() if ret: # 人脸检测和显示逻辑 rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # ... OpenCV处理代码 ``` #### 五、前后端集成 1. **人脸检测流程**: ```python # detection.py import cv2 def detect_faces(frame): detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) return detector.detectMultiScale(gray, 1.3, 5) ``` 2. **特征比对逻辑**: ```python # recognition.py import numpy as np from database import Session def match_face(feature): with Session() as session: stored_features = session.query(UserFace).all() # 计算余弦相似度 similarities = [np.dot(feature, np.frombuffer(f.fv, dtype=np.float32)) for f in stored_features] return max(similarities) if similarities else 0 ``` #### 六、项目结构 ``` face-rec-system/ ├── core/ │ ├── model.py # 模型定义 │ ├── train.py # 训练脚本 │ └── recognition.py # 识别逻辑 ├── database/ │ ├── models.py # 数据库模型 │ └── operations.py # CRUD操作 ├── ui/ │ ├── main_window.py # 主界面 │ └── widgets.py # 自定义控件 └── main.py # 程序入口 ``` #### 七、关键集成点说明 1. **视频流处理**:使用OpenCV捕获摄像头数据,QT线程异步更新界面 2. **模型加载**:训练完成的.pth文件通过`torch.load()`加载 3. **数据库交互**:SQLAlchemy ORM实现特征向量存储和查询 4. **跨线程通信**:使用QT信号槽机制连接界面和后台处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laney_Midory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值