初级图像处理工具

图像处理-初级

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.xdnf.cn/news/5602.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】实战-力扣题库:回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 提示&#xff1a; 链表中节点数目在范围[1, 105] 内0 < Node.val < 9 进阶&#xff1a;你能否用 O(n) 时间…

Flink滑动窗口(Sliding)中window和windowAll的区别

滑动窗口的使用&#xff0c;主要是计算&#xff0c;在reduce之前添加滑动窗口&#xff0c;设置好间隔和所统计的时间&#xff0c;然后再进行reduce计算数据即可。 窗口设置好时间间隔&#xff0c;和处理时间窗口的时间&#xff0c;比如将滑动窗口的时间间隔都设置为5s,处理时间…

AWS云服务器选择哪个区域最好?

选择AWS云服务器的区域&#xff08;Region&#xff09;是一个非常重要的决策&#xff0c;因为它会影响你的应用性能、成本和合规性。以下是九河云总结的一些选择AWS区域时需要考虑的关键因素&#xff1a; 1. 地理位置和延迟 选择离你的用户或客户最近的区域可以最大程度减少网…

高频面试题(含笔试高频算法整理)基本总结回顾30

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

6.气泵控制原理---单双向可控硅控制原理、斩波电路、项目举例说明

最近在项目开发中&#xff0c;涉及到气泵的相关控制&#xff0c;在这里进行比较系统的学习。对交直流气泵区别进行一个说明 &#xff0c;同时了解一下单向和双向可控硅&#xff0c;最后根据项目实例进行了解。因为个人比较偏软件&#xff0c;有什么不对的地方欢迎指正。 一交流…

element-plus table tableRowClassName 无效

官网上给的是 .el-table .warning-row {--el-table-tr-bg-color: var(--el-color-warning-light-9); } .el-table .success-row {--el-table-tr-bg-color: var(--el-color-success-light-9); } 但是 如果 加上了 scoped 这样样式是无效的 在 vue3 中用样式穿透 即可生…

Python自动化测试框架详解!

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了开发时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

【数据结构实战】从0打造你的专属顺序表

专栏&#xff1a;《数据结构实战篇》 生活中有着无穷无尽的数据需要存储&#xff0c;大到全国人口普查&#xff0c;小到微信、QQ好友列表&#xff0c;都需要有一个合理的存储方式才能使得我们的数据更方便管理&#xff0c;线性表就是其中之一 一、线性表 线性表&#xff08;li…

RFID标签实现托盘智能化管理

一、RFID技术概述 1.1 RFID技术原理 RFID技术&#xff0c;即无线射频识别技术&#xff0c;是一种利用无线电波进行非接触式自动识别和数据交换的技术。其核心优势在于能够实现远距离、快速、批量的识别&#xff0c;相较于传统的条形码技术&#xff0c;RFID技术在物资管理领域展…

net core 生成URL HtmlHelper

HtmlHelper Url.Action Url.RouteUrl RedirectToAction public IActionResult Privacy(){return RedirectToAction("Index");}Html.ActionLink Html.BeginForm Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接&#xff0c; 但是H…

零日漏洞被谷歌的 AI 工具发现

谷歌的 AI 研究工具 Big Sleep 取得了重大突破&#xff0c;发现了 SQLite 中的漏洞&#xff0c;SQLite 是全球使用最广泛的数据库引擎之一。 Google Project Zero 和 Google DeepMind 团队最近在官方博客文章中分享了这一里程碑&#xff0c;标志着 AI 驱动的漏洞检测在现实世界…

Github 2024-11-07 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10HTML项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个Fork数…

Java学习笔记之类

文章目录 类和对象的基础属性/成员变量⚠️ 属性的注意事项和细节⚠️ 构建函数 类和对象的区别类和对象的内存分配机制练习 成员方法方法定义⚠️ 方法使用细节⚠️ 形参列表细节⚠️ 方法内部细节⚠️ 方法调用细节方法入门代码01⚠️ 行参和成员方法重名方法入门代码02方法递…

链表删除相关算法题|删除值为x的节点|删除最小值节点|删除值在区间内的节点|删除重复节点|删除绝对值相等的节点(C)

删除值为x的节点 在带头结点的单链表L中&#xff0c;删除所有值为X的结点&#xff0c;并释放其空间&#xff0c;假设值为的结点不唯一 算法思想 删除单链表的节点需要三个指针 一个是遍历链表的工作指针cur&#xff0c;一个是指向cur的上一个节点的指针prev&#xff0c;一个…

C++:哈希表的实现

一、哈希表的基本概念 1、负载因子&#xff1a;假设哈希表中已经映射存储了N个值&#xff0c;哈希表的大小为M&#xff0c;那么负载因子 N / M&#xff0c;负载因子有些地⽅也翻译为载荷因子/装载因子等&#xff0c;他的英文为load/factor。负载因子越大&#xff0c;哈希冲突的…

2024年11月软考考前注意事项

一、重要时间节点 准考证打印时间&#xff1a; 大部分省市的准考证打印时间从11月4日起开始&#xff0c;但上海、甘肃等地区则稍晚&#xff0c;从11月6日起开放打印。 请务必注意所在地区的具体打印时间&#xff0c;并尽早打印准考证&#xff0c;以免因错过时间而影响考试。…

书生大模型实战营Linux+InternStudio 关卡任务

一、端口映射 使用以下命令进行端口映射 ssh -p {YOUR_PORT} rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyCheckingno 命令解释&#xff1a; -p 37367&#xff1a;是指定 SSH 连接的端口为 37367。rootssh.intern-ai.org.cn&#xff1a;表示要以…

道品科技智能水肥一体化技术要点及实施效果

## 一、引言 水肥一体化技术是现代农业中一种重要的耕作方式&#xff0c;旨在通过合理配置水资源与肥料&#xff0c;提高作物产量和质量&#xff0c;达到节水、增效和环保的目的。随着全球人口的增加和耕地资源的减少&#xff0c;水肥一体化技术在农业生产中的应用愈加重要。 …

sqlserver使用bak文件恢复数据库

进入数据库 sqlcmd -S localhost -U SA -P password备份文件 #备份格式BACKUP DATABASE your_database_name TO DISK path_to_backup_file.bak;#举例 1> BACKUP DATABASE XJZDataTest TO DISK /root/mssql.bak; 2> go使用备份文件恢复数据库 1、查询备份文件中的数据…

CSP/信奥赛C++刷题训练:经典深搜例题(1):洛谷1605 :迷宫

CSP/信奥赛C刷题训练&#xff1a;经典深搜例题&#xff08;1&#xff09;&#xff1a;洛谷1605 &#xff1a;迷宫 题目描述 给定一个 N M N \times M NM 方格的迷宫&#xff0c;迷宫里有 T T T 处障碍&#xff0c;障碍处不可通过。 在迷宫中移动有上下左右四种方式&#x…