高级图像处理工具

时间:2024-11-08 11:12:58

图像处理-高级

1、功能概览

随着社交媒体的普及和个人创作需求的增长,图像处理成为了日常生活中不可或缺的一部分。无论是专业的设计师还是爱好者,都需要一款强大的工具来帮助他们完成各种任务。今天,我们将介绍一款基于Python开发的高级图像处理工具,它不仅易于使用,还提供了丰富的功能,让您的图像编辑工作变得更加高效。

这款工具包含了以下主要功能:

  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)
    • 有时候,您可能需要将图像从一种格式转换为另一种格式。这款工具提供了便捷的格式转换功能,只需几秒钟,您就可以将图像从JPEG转换为PNG,或从BMP转换为TIFF,满足您的各种需求。
  4. 人脸增强修复
    • 基于生成对抗网络(GAN)的面部修复算法,专为处理低质量、模糊或损坏的面部图像而设计。该算法通过结合生成对抗网络和面部先验知识,能够在保留面部特征和细节的同时,有效地修复图像中的缺陷,使得最终生成的图像更加清晰和自然。
  5. 超分辨率重建
    • 超分辨率是一种图像处理技术,旨在将低分辨率(Low-Resolution, LR)图像恢复为高分辨率(High-Resolution, HR)图像。这项技术在许多领域都有广泛的应用,包括医学影像、卫星遥感、视频处理和增强现实等。这款工具采用了先进的超分辨率重建算法,能够显著提升图像的清晰度和细节,让您的图像看起来更加逼真和细腻。

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.4 人脸增强修复

本工具采用基于生成对抗网络(GAN)的面部修复算法,专为处理这些问题而设计。该算法通过结合生成对抗网络和面部先验知识,能够在保留面部特征和细节的同时,有效地修复图像中的缺陷,使得最终生成的图像更加清晰和自然。

  • 该模型文件过大,由此放在其他位置下载:【免费】advancedImg/gfpgan模型文件资源-****文库
  • 请将解压后的文件放入gfpgandist/gfpgan中
3.4.1 安装依赖basicsr的问题解决
  • 正常安装时可能出现报错,这是因为 setuptools 中的 installer 模块已被弃用,建议使用 PEP 517 兼容的安装工具来满足依赖项。

在这里插入图片描述

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple basicsr --use-pep517
  • 程序运行可能出现:ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor' ,表明你的 torchvision 版本可能不支持 functional_tensor 模块。
  • 修改basicsr/data/degradations.py
    • 头文件from torchvision.transforms.functional_tensor import rgb_to_grayscale改成from torchvision.transforms.functional import to_grayscale;
    • rgb_to_grayscale函数使用的地方改成to_grayscale
"venv/lib/python3.8/site-packages/basicsr/data/degradations.py"    
from torchvision.transforms.functional_tensor import rgb_to_grayscale
ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor'
# from torchvision.transforms.functional_tensor import rgb_to_grayscale
from torchvision.transforms.functional import to_grayscale

在这里插入图片描述

3.4.2 示例
  1. 勾选是否进行人脸增强按钮,确定是否使用该功能。

在这里插入图片描述

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

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

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

在这里插入图片描述

3.5 超分辨率重建

超分辨率是一种图像处理技术,旨在将低分辨率(Low-Resolution, LR)图像恢复为高分辨率(High-Resolution, HR)图像。这项技术在许多领域都有广泛的应用,包括医学影像、卫星遥感、视频处理和增强现实等。这款工具采用了先进的超分辨率重建算法,能够显著提升图像的清晰度和细节,让您的图像看起来更加逼真和细腻。

  1. 勾选是否超分按钮,确定是否使用该功能

在这里插入图片描述

  1. 选择超分图像类型及超分倍数:

    • 通用图像支持2、4倍放大。

    • 动漫图像仅支持 4 倍放大!不需要选择超分倍数!

在这里插入图片描述
在这里插入图片描述

  1. 选择参数后,右侧会出现超分后的图像:

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

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

在这里插入图片描述
在这里插入图片描述

3.6 功能联合使用

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

选择格式转换功能—选择人脸增强功能—选择超分功能

  1. 选择格式转换:可以将最终结果以png格式保存
    在这里插入图片描述

  2. 选择人脸增强功能:先使用人脸增强来修复和增强图像中的人脸部分

在这里插入图片描述

  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_metadata
 
datas = copy_metadata("streamlit")

在这里插入图片描述

  1. 在项目根目录下创建main.py
import os
import sys

import streamlit.web.cli as stcli


def resolve_path(path):
  resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))
  print(resolved_path)
  return resolved_path


if __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/advanceImg/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、源码下载路径

下载源码