初级图像处理工具

图像处理-初级

1、功能概览

初级图像处理工具旨在为用户提供一个易于使用的界面来执行常见的图像处理任务。该工具集成了多项实用功能,从显示和调整图像的基本属性到应用各种滤镜效果,用户都可以通过简单的命令行交互来完成。

我们的初级图像处理工具包含以下几个主要功能:

  1. 图像查看器 (Image Viewer)

    • 显示图像 (Display image):能够加载并显示各种常见格式的图像,如JPEG, PNG, 和BMP。
    • 支持多种图像格式 (Support multiple image formats):支持多种图像格式,让您可以轻松地处理来自不同来源的图片。
  2. 图像基本信息 (Image Basic Information)

    • 获取图像尺寸 (Get image dimensions):获取图像的高度和宽度信息。
    • 获取颜色模式 (Get color mode):确定图像的颜色模式,例如RGB或灰度。
  3. 格式转换 (Format Conversion)

    • 修改图像后缀,允许用户在不同格式之间转换图像文件。
  4. 旋转翻转操作 (Rotation and Flipping)

    • 旋转图像 (Rotate image):按照指定的角度旋转图像。
    • 翻转图像 (Flip image):垂直或水平地翻转图像。
  5. 图像调整 (Image Adjustment)

    • 调整亮度 (Adjust brightness):通过增加或减少亮度来改善图像质量。
    • 调整对比度 (Adjust contrast):增强或减弱图像中的对比度。
    • 直方图均衡化 (Histogram equalization):自动调整图像的亮度分布,使图像更加清晰。
  6. 颜色转换 (Color Conversion)

    • RGB转灰度图 (Convert RGB to grayscale):将彩色图像转换为灰度图像。
    • RGB转HSV或HSL (Convert RGB to HSV or HSL):在不同的颜色空间之间转换图像。
    • 灰度图转二值图 (Convert grayscale to binary):将灰度图像转换为只有黑白两种颜色的二值图像。
  7. 滤镜应用 (Filter Application)

    • 模糊效果 (Blur effect):通过平滑图像来减少细节和噪音。
    • 锐化效果 (Sharpen effect):增强图像边缘,使图像看起来更加清晰。
    • 边缘检测 (Edge detection):突出图像中的边界线。

2、启用工具

2.1 使用exe文件直接启动(Windows系统

  • dist文件夹内存在main.exe文件:
    • 可以在终端打开(建议);
    • 也可以双击打开;
      在这里插入图片描述
      在这里插入图片描述

2.2 使用pycharm启动

  • 如果你想更改代码或添加功能,可以创建python环境进行二次创作;
  • 在环境上安装依赖库:
pip install -r requirements.txt

3、功能介绍

3.1 图像查看器

  1. 支持多种图像格式:加载并显示各种常见格式的图像,如jpg、jpeg、png、bmp、tiff。用户通过点击图像选择即可选取电脑中的图像文件。

在这里插入图片描述

  1. 选择文件后,会显示该图像的基本信息:

    • 获取文件名称

    • 获取文件类型:文件的后缀名

    • 获取图像尺寸:获取图像的高度和宽度信息。

    • 获取颜色模式 :确定图像的颜色模式,例如RGB或灰度

  2. 可以通过宽度选择滑块控制图像显示尺寸

在这里插入图片描述

3.2 格式转换

修改图像后缀,允许用户在不同格式之间转换图像文件。

  1. 勾选是否格式转换按钮,确定是否使用该功能。

在这里插入图片描述

  1. 通过下拉菜单选择待转换格式

在这里插入图片描述

  1. 选择格式后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.3 旋转翻转功能

用户可以按照指定的角度旋转图像、垂直或水平地翻转图像。

  1. 勾选是否旋转翻转按钮,确定是否使用该功能。

在这里插入图片描述

  1. 通过旋转角度选择滑块控制图像旋转角度、通过勾选水平或垂直翻转按钮控制图像翻转

在这里插入图片描述

  1. 选择旋转和翻转功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录
      在这里插入图片描述

3.4 颜色转换

根据用户传入的图像类型自动更新功能选择:

  • 如果用户传入的是RGB图像,可以选择将彩色图像转换为灰度图像或将彩色图像转换为HSV图像的功能;
  • 如果用户传入的是灰度图像,可以选择将灰度图像转换为只有黑白两种颜色的二值图像的功能。
3.4.1 RGB图像

用户传入RGB图像

  1. 勾选是否颜色转换按钮,确定是否使用该功能。

在这里插入图片描述

  1. 通过下拉菜单选择待转换的颜色空间类型

在这里插入图片描述

  1. 用户选择灰度图:将彩色图像转换为灰度图像

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

  1. 用户选择HSV:将彩色图像转换为HSV图像

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.4.2 灰度图像

用户传入灰度图像

  1. 勾选是否颜色转换按钮,确定是否使用该功能。

在这里插入图片描述

  1. 通过下拉菜单选择待转换的颜色空间类型

在这里插入图片描述

  1. 用户可以通过二值化阈值选择滑块控制图像二值化:大于阈值为255,小于阈值为0。
    在这里插入图片描述

  2. 用户选择二值图像:将灰度图像转换为二值图像

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.5 调整亮度

图像调整亮度是指改变图像的整体亮度水平,使得图像看起来更亮或更暗。这是一项基本的图像处理技术,广泛应用于摄影后期处理、视频编辑以及各种图像处理应用程序中。

  1. 勾选是否调整亮度按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择亮度因子调整图像亮度:值为 1 表示原图,小于 1 表示降低亮度,大于 1 表示提高亮度

在这里插入图片描述

  1. 选择调整亮度功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.6 调整对比度

调整图像对比度是一种常见的图像处理技术,它可以使图像中的细节更加清晰,增强图像的视觉效果。对比度是指图像中最亮和最暗部分之间的差异程度。通过调整对比度,可以使得图像中的亮度分布更加均匀或者突出某些特征。

本工具采用Gamma校正改变图像的对比度,通过非线性的变换来调整图像的亮度,使得图像在不同光照条件下看起来更加自然。

  • Gamma < 1:当 Gamma 因子小于 1 时,图像会变得更亮,对比度降低,暗部细节更加明显。
  • Gamma = 1:当 Gamma 因子等于 1 时,图像保持不变。
  • Gamma > 1:当 Gamma 因子大于 1 时,图像会变得更暗,对比度增加,高光部分更加突出。
  1. 勾选是否调整对比度按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择gamma因子调整图像对比度。

在这里插入图片描述

  1. 选择完gamma因子后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录
      在这里插入图片描述

在这里插入图片描述

3.7 直方图均衡化

直方图均衡化通常适用于那些对比度不高或整体较暗的图像。它通过扩展图像的动态范围,从而使图像看起来更加清晰。

  1. 勾选是否直方图均衡化按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

    在这里插入图片描述

3.8 模糊效果

模糊效果在图像处理中是一种常用的技术,用于减少图像中的细节或噪声,使图像看起来更加柔和。模糊可以通过不同的方法来实现,每种方法都有其独特的特点和适用场景。

3.8.1 高斯模糊

高斯模糊使用高斯分布作为权重,对图像进行平滑处理。高斯核在中心处最大,随着距离增加而逐渐减小,这使得邻近像素的影响随着距离的增加而减弱。适用于一般的模糊处理,可以有效减少图像中的高频噪声,同时保持图像的基本特征不变。

  1. 勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.8.2 均值模糊

均值模糊使用一个固定大小的窗口计算每个像素周围的平均值。这种方法简单直接,但由于不考虑像素之间的权重差异,可能导致边缘变得模糊。适用于简单的模糊处理,尤其是在需要快速模糊处理的情况下。

  1. 勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.8.3 中值模糊

中值模糊使用一个固定大小的窗口计算每个像素周围的中值。这种方法在去除椒盐噪声方面非常有效,因为中值滤波可以忽略掉那些极端的像素值。适用于去除椒盐噪声,即图像中随机出现的亮暗点。

  1. 勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.8.4 双边模糊

双边模糊结合了空间和颜色两个维度的信息,能够有效地保留边缘同时去除噪声。双边模糊在处理每个像素时不仅考虑其周围像素的空间位置关系,还考虑了颜色差异。适用于需要保留边缘细节的同时减少图像噪声的情况,例如在处理需要保持清晰边缘的图像时,如肖像或风景照片。

  1. 勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择参数:
    • 卷积核大小:较大的内核会产生更明显的模糊效果;
    • 颜色空间的标准差:颜色空间中,较大的 标准差 值会使颜色相似的像素在模糊时相互影响更大,从而在颜色相似的区域产生更多的平滑效果。较小的 标准差 值会导致只有颜色非常接近的像素才相互影响。
    • 空间域的标准差:较大的 标准差 值会使空间上较远的像素在模糊时相互影响更大,从而产生更大的模糊效果。较小的 标准差 值会导致只有空间上非常接近的像素才相互影响。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.9 锐化效果

锐化效果是图像处理中常用的一种技术,用于增强图像的细节,使得图像看起来更加清晰。锐化通常是通过对图像中的边缘进行增强来实现的。下面详细介绍几种本工具的锐化方法:

3.9.1 Laplacian锐化

Laplacian 锐化通过使用 Laplacian 算子来检测图像中的边缘,并通过增强这些边缘来达到锐化的效果。Laplacian 算子是一个二阶微分算子,它可以检测图像中的突变点,也就是边缘。在图像处理中,通常将 Laplacian 算子的结果与原始图像相加来增强边缘,从而实现锐化。

  1. 勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.9.2 USM锐化

USM锐化:Unsharp Masking(USM)是一种经典的图像锐化技术。该技术首先创建一个图像的模糊版本作为掩模,然后从原始图像中减去这个模糊版本。这样做的目的是加强图像的边缘,因为模糊版本会弱化边缘细节。通过这种方式,图像中的边缘变得更加突出,整体锐度得到提升。USM锐化是一种直观且易于实现的方法,在许多图像编辑软件中都有应用。

  1. 勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择参数:
    • 卷积核大小:较大的内核会产生更明显的锐化效果
    • 增强因子:决定了原始图像与模糊图像之间的权重比例,默认为0.5。
    • 阈值:常数项,用于调整图像的整体亮度。通常设置为0,表示不改变亮度。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.9.3 增强器Enhance锐化

增强器锐化技术是通过调整图像的频率成分来增强图像的锐度。这种方法基于频率域处理,利用傅里叶变换将图像转换到频率域,在此域中对特定频率范围内的成分进行增强,然后再反变换回空间域。通过这种方法,可以有效地强化图像中的高频成分(如边缘和细节),从而达到锐化的目的。

  1. 勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择增强因子:
    • 值为1.0:表示原始图像的锐度,即不进行任何锐化处理。
    • 值大于1.0:表示增加锐度。数值越大,图像的锐度越高,边缘更加突出。
    • 值小于1.0但大于0.0:表示降低锐度。数值越小,图像变得越模糊。
    • 值为0.0:表示完全模糊图像,即图像变得完全没有锐度。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.9.4 高通滤波器锐化

高通滤波器(High-Pass Filter)是一种信号处理技术,专门用于通过抑制低频成分而保留高频成分。在图像处理中,高频成分往往对应于图像的细节部分,如边缘和其他细微特征。因此,高通滤波器可以用来增强图像中的细节,使图像更加清晰。与Laplacian锐化类似,高通滤波器也可以看作是在频率域内的一种锐化方法。

  1. 勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.10 边缘检测

在图像处理和计算机视觉领域,边缘检测是一种重要的技术,用于从图像中提取有意义的信息。边缘代表了图像中不同区域之间的过渡,通常是物体边界的重要标志。通过边缘检测,我们可以更好地理解图像的内容,并为进一步的图像分析提供基础。下面详细介绍本工具的几种边缘检测方法。

3.10.1 Sobel边缘检测

Sobel边缘检测是一种广泛使用的边缘检测技术,它通过两个卷积核分别计算图像在水平方向和垂直方向上的梯度。这两个方向上的梯度信息被结合起来,以确定边缘的位置。具体而言,Sobel算子使用两个3x3的核,一个用于计算x方向的梯度,另一个用于y方向。Sobel方法能够很好地突出图像中的变化区域,并且由于其对噪声有一定的抑制能力,因此在实际应用中非常受欢迎。

  1. 勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小:

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.10.2 Prewitt边缘检测

Prewitt边缘检测与Sobel边缘检测类似,同样是基于梯度的概念,但它使用了较小的3x3核。尽管Prewitt算子对图像细节的捕捉不如Sobel精细,但由于其核尺寸较小,因此在快速边缘检测方面仍然有效。Prewitt算子的核心是检测图像中强度变化较大的区域,从而定位边缘。

  1. 勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.10.3 Roberts边缘检测

Roberts边缘检测使用的是2x2的小核,它直接计算相邻像素之间的差异。由于核尺寸较小,Roberts算子可能会忽略一些细节信息,但在某些情况下,它可以提供更快的处理速度。Roberts算子的优点在于其简单性和快速性,但它的缺点是可能过于敏感,导致较多的假阳性边缘检测结果。

  1. 勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.10.4 Canny边缘检测

Canny边缘检测算法是一种多阶段的边缘检测方法,它包括五个步骤:高斯平滑、计算梯度幅度和方向、非极大值抑制、双阈值检测以及边缘连接。Canny算法旨在找到最有可能表示边缘的点集。它通过两个阈值来平衡边缘检测的敏感性和鲁棒性。如果弱边缘阈值设置得太高,那么许多真实的边缘可能会被错过;如果强边缘阈值设置得太低,那么可能会引入很多噪声。通常推荐的弱边缘阈值和强边缘阈值之间的比例为1:2或1:3。Canny算法因其在各种条件下的良好表现而成为边缘检测的标准之一。

  1. 勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择参数:
    • 弱边缘阈值:用于标记弱边缘。任何低于此阈值的边缘点都会被抑制掉,即认为不是边缘的一部分。
    • 强边缘阈值:用于标记强边缘。任何高于此阈值的边缘点都会被认为是边缘的一部分。

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.10.5 Laplacian边缘检测

Laplacian运算是一个二阶微分算子,用于查找图像中强度变化最大的地方。Laplacian算子主要用于边缘检测和图像锐化。它通过计算图像中每个像素的拉普拉斯值来确定边缘。拉普拉斯值大的地方通常对应于图像中的边缘。然而,Laplacian方法对噪声非常敏感,因此在实际应用中通常会先对图像进行平滑处理。

  1. 勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择卷积核大小:

在这里插入图片描述

  1. 选择功能后,右侧会出现转换后的图像:
    • 自动显示图像文件自动保存的位置
    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.11 功能联合使用

本工具的功能按照功能模块从上到下顺序执行,因此可以联合使用,示例如下:

选择颜色转换功能—锐化功能—边缘检测功能

  1. 颜色转换:将RGB图像转换为灰度图

在这里插入图片描述

  1. 锐化功能:将灰度图进行锐化

在这里插入图片描述

  1. 将锐化结果进行边缘检测

在这里插入图片描述

4、生成可执行文件

4.1 生成已安装库文件

  1. 生成依赖库

确保你在开发环境中安装了所有应用程序运行所需的库,包括 Streamlit 和任何其他第三方库。通过 pip freeze > requirements.txt 命令生成一个包含所有已安装库及其版本号的文件。

如果你想使用pip freeze命令生成一个仅包含已安装库名称而不包含版本号的requirements.txt文件:

pip freeze | sed 's/==.*$//' > requirements.txt
  1. 安装依赖库:
pip install -r requirements.txt

4.2 安装pyinstaller

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

4.3 打包

4.3.1 打包 Python 应用程序
  • pyinstaller会自动处理大多数依赖关系,并将它们打包到最终的可执行文件中。
  • --onefile选项表示将所有依赖项合并到一个单一的可执行文件中;
  • --windowed 选项则表示生成的应用程序将在没有控制台窗口的情况下运行(仅适用于 Windows)。
pyinstaller --onefile --windowed main.py
4.3.2 pyinstaller打包streamlit预处理
  • PyInstaller 虽然会自动处理大多数依赖关系,但是streamlit库一般无法正确处理,可以使用下面的办法解决:
  1. 创建hook文件,放在hooks文件夹下(命名以hook开头)
from PyInstaller.utils.hooks import copy_metadatadatas = copy_metadata("streamlit")

在这里插入图片描述

  1. 在项目根目录下创建main.py
import os
import sysimport streamlit.web.cli as stclidef resolve_path(path):resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))print(resolved_path)return resolved_pathif __name__ == "__main__":sys.argv = ["streamlit","run",# 填写streamlit启动页面(本文把启动文件app.py放在main.py同目录)resolve_path("app.py"),"--global.developmentMode=false",]sys.exit(stcli.main())
4.3.3 进行第一次打包
  • --additional-hooks-dir=:指定一个目录,该目录中包含自定义的钩子文件(本文把钩子文件建立在hooks文件夹下)。这些钩子文件可以帮助 PyInstaller 更准确地处理某些库或模块。
  • 打包完成后会生成main.spec、dist、build文件
pyinstaller --onefile --additional-hooks-dir=./hooks main.py --clean
  • 第一次打包的执行文件可能依旧不会成功,因为我们没有指定streamlit库路径,我们可以在main.spec文件里进行编辑

    • datas=[('venv/lib/python3.8/site-packages','.')]:注意venv/lib/python3.8/site-packagesVirtualenv方式建立的python环境中安装包所在目录;

    • 如果你使用的是Conda创建环境,你需要找到所建环境的位置D:/anaconda/install/envs/basicImg/Lib/site-packages

    • 找到某个库所建环境的位置:

      import os
      import streamlit
      import sys# 获取 streamlit 模块的文件位置
      streamlit_path = os.path.dirname(streamlit.__file__)
      print(f"Streamlit is located at: {streamlit_path}")
      
  • main.spec文件如下所示

# -*- mode: python ; coding: utf-8 -*-a = Analysis(['main.py'],pathex=[],binaries=[],# 第一个参数:config:这是指定要包含的源文件的路径。在这个例子中,config 是一个配置文件所在文件夹,位于与 main.py 同级的目录下。# 第二个参数:'config':这是指定目标路径。在这里,'config' 表示当前目录的config文件夹。这意味着在打包后的 EXE 文件运行时,config应该被放置在 EXE 文件所在的目录下。# venv/lib/python3.8/site-packages':注意一定要填写你的streamlit安装位置的上级目录# 如果你的程序只有一个启动文件`app.py`,没有配置文件夹或类似services文件夹,只需要datas=[('venv/lib/python3.8/site-packages','.')],datas=[('config','config'),('pages','pages'),('services','services'),('venv/lib/python3.8/site-packages','.')],hiddenimports=[],# 指定 Hook 文件所在的目录hookspath=['./hooks'],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,optimize=0,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,a.binaries,a.datas,[],name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)
4.3.4 进行第二次打包
  • 先将之前生成的dist和build文件删掉
pyinstaller main.spec --clean
# TODO 切记要在目标环境
D:\anaconda\install\envs\gongju\Scripts\pyinstaller.exe main.spec --clean
  • 注意:如果你的程序只有一个启动文件gui.py,没有配置文件夹或类似services文件夹,那么到这里应该就可以正常运行;否则:
    • 类似services文件夹(存放函数)需要复制到生成的dist里;
    • pages(存放streamlit页面)文件夹需要复制到生成的dist里
    • config配置文件夹建议复制到生成的dist里,因为这样配置改变时才会生效
    • 启动文件app.py复制到生成的dist里

在这里插入图片描述

4.3.5 优化内存
  • 此时虽然可以正常运行,但是打包后的执行文件很大,如何优化打包内存?
    • 编辑main.spec的 pathex 参数:该参数用于指定可执行文件运行时的路径列表。这个列表中的路径会被用来寻找与应用程序相关的文件。pathex 参数对最终可执行文件的大小有显著影响,因为它决定了哪些文件和目录会被包含在最终的打包结果中
    • 设置pathex=[‘.’]:当 pathex=[‘.’] 时,PyInstaller 会明确地告诉打包工具只在当前工作目录下查找所需的文件和依赖项。这样可以减少不必要的文件被包含进来,从而减小最终可执行文件的大小。

5、源码下载路径

下载源码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker】5. 背景知识(了解)

Docker 是什么 Docker 本质 Docker 本质其实是 LXC 之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。容器是 linux 内核中的技术&#xff0c;Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。 Docke…

【react框架之dvajs】如何创建一个初始的dva项目工程

dvajs作为react的框架&#xff0c;一度火爆市场&#xff0c;只是新框架层出不穷&#xff0c;也是越做越成熟了&#xff0c;很多老的框架被淹没&#xff0c;使用的越来越少。dva框架还是有不少的公司有项目在使用&#xff01; dva项目的搭建步骤 在系统检测是否安装了dva&…

5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?

AI网关的功能及其定义 AI网关位于企业应用与内外部大模型调用的交汇点&#xff0c;能够灵活地将请求转发给内部自建模型或外部大模型服务提供商&#xff0c;甚至海外的服务商。它管理着企业所有的AI出口流量&#xff0c;为企业内的不同团队提供了多方面的优势。 对于开发团队…

Spring中的 InitializingBean、BeanPostProcessor、@PostConstruct 等初始化动作的执行时机分析

初始化Bean的时序图如下&#xff1a; 小结说明&#xff1a; 1、相同点&#xff1a;InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、PostConstruct 都是在bean的属性注入完毕之后才执行&#xff0c;都可以用来进行bean的初始化动作 2、初始化执行顺序优先级…

java ssm 校园快递物流平台 校园快递管理系统 物流管理 源码 jsp

一、项目简介 本项目是一套基于SSM的校园快递物流平台&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…

最新整理:Selenium自动化测试面试题

1.selenium中如何判断元素是否存在? find_elements查找到的元素个数为0&#xff0c;find_element报错意味着元素不存在 2.如何判断元素是否出现? 判断元素是否出现&#xff0c;存在两种情况&#xff0c;一种是该元素压根就没有&#xff0c;自然不会出现;另外一种是有这样的…

【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介

文章目录 3.4 函数式依赖注入技术 Functional injection techniques3.5 模块化依赖注入技术 Modular injection techniques 写在前面 上一篇的最后部分对第三章后续内容做了一个概括性的梳理&#xff0c;并给出了断开依赖项的最简单的实现方案&#xff0c;函数参数值注入法。本…

用Puppeteer点击与数据爬取:实现动态网页交互

用Puppeteer与代理IP抓取51job招聘信息&#xff1a;动态网页交互与数据分析 引言 在数据采集领域&#xff0c;传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据&#xff0c;用户需要与页面交互才能触发内容显示。因此&#xff0c;我们…

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就造成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——模拟芯片 真题题目分享&#xff0c;完整题目&#xff0c;无答案&#xff08;共8套&#xff09; 实习岗位…

Centos Linux 7 搭建邮件服务器(postfix + dovecot)

准备工作 1. 一台公网服务器&#xff08;需要不被服务商限制发件收件的&#xff0c;也就是端口25、110、143、465、587、993、995不被限制&#xff09;&#xff0c;如有防火墙或安全组需要把这些端口开放 2. 一个域名&#xff0c;最好是com cn org的一级域名 3. 域名备案&am…

Stable Diffusion Web UI 1.9.4常用插件扩展-WD14-tagger

Stable Diffusion Web UI 1.9.4 运行在 WSL 中的 Docker 容器中 tagger 插件的作用是&#xff0c;上传一张图片&#xff0c;反推这张图片可能的提示词。 使用场景就是&#xff0c;想要得到类似的图片内容时使用。 WD14-tagger 安装 Stable Diffusion WebUI WD14-tagger GitH…

信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)

1 概述 1.1 项目简介 1.2 测评依据 2 被测信息系统情况 2.1 定级情况 2.2 承载的业务情况 2.3 网络结构 2.4 被测对象资产 2.5 上次测评问题整改情况说明 3 测评范围与方法 3.1 测评指标 3.1.1 安全通用要求指标 3.1.2 安全扩展要求指标 3.1.3 其他安全要求指标 3.1.4 不适用安…

linux dpkg 查看 安装 卸载 .deb

1、安装 sudo dpkg -i google-chrome-stable.deb # 如果您在安装过程中或安装和启动程序后遇到任何依赖项错误&#xff0c; # 您可以使用以下apt 命令使用-f标志解析​​和安装依赖项&#xff0c;该标志告诉程序修复损坏的依赖项。 # -y 表示自动回答“yes”&#xff0c;在安装…

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表&#xff0c;主键是学号&#xff0c;含有学生号、学生名、班级、班级名&#xff0c;违反了数据库第几范式&#xff1f; --非主属性不依赖于主键&#xff0c;不满足第二范式 有一个订单表&#xff0c;包含以下字段&#xff1a;订单ID&…

电子电气架构 --- Trace 32(劳特巴赫)多核系统的调试

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

哈希表与unordered_map

1.哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数&#xff0c;因此顺序结构中查找的时间复杂度O(N)&#xff0c;平…

Python | Leetcode Python题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:mid (low high) // 2mid - mid & 1if nums[mid] nums[mid 1]:low mid 2else:high midreturn nums[l…

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…