中级图像处理工具
图像处理-中级
1、功能概览
随着社交媒体的普及和个人创作需求的增长,图像处理成为了日常生活中不可或缺的一部分。无论是专业的设计师还是爱好者,都需要一款强大的工具来帮助他们完成各种任务。今天,我们将介绍一款基于Python开发的中级图像处理工具,它不仅易于使用,还提供了丰富的功能,让您的图像编辑工作变得更加高效。
这款工具包含了以下主要功能:
-
图像查看器 (Image Viewer)
- 显示图像 (Display image):能够加载并显示各种常见格式的图像,如JPEG, PNG, 和BMP。
- 支持多种图像格式 (Support multiple image formats):支持多种图像格式,让您可以轻松地处理来自不同来源的图片。
-
图像基本信息 (Image Basic Information)
- 获取图像尺寸 (Get image dimensions):获取图像的高度和宽度信息。
- 获取颜色模式 (Get color mode):确定图像的颜色模式,例如RGB或灰度。
-
格式转换 (Format Conversion)
- 修改图像后缀,允许用户在不同格式之间转换图像文件。
-
背景去除 (Background Removal)
- 输出带有透明通道(Alpha通道)图片,轻松地与任何新背景进行合成。
-
背景替换 (Background Replacement)
- 更换图像中的背景,为您的照片增添新的视觉效果。
- 水印添加 (Watermark Addition)
- 添加文字水印 (Add text watermark):保护您的作品版权,添加文字水印到图像上。
- OCR识别 (OCR Recognition)
- 提取图像中的文本内容,便于信息的数字化处理。
2、启用工具
2.1 使用exe文件直接启动(Windows系统
)
- 在
dist
文件夹内存在main.exe
文件:- 可以在终端打开(建议);
- 也可以双击打开;
2.2 使用pycharm启动
- 如果你想更改代码或添加功能,可以创建python环境进行二次创作;
- 在环境上安装依赖库:
pip install -r requirements.txt
3、功能介绍
3.1 图像查看器
- 支持多种图像格式:加载并显示各种常见格式的图像,如jpg、jpeg、png、bmp、tiff。用户通过点击
图像选择
即可选取电脑中的图像文件。
-
选择文件后,会显示该图像的基本信息:
-
获取文件名称
-
获取文件类型:文件的后缀名
-
获取图像尺寸:获取图像的高度和宽度信息。
-
获取颜色模式 :确定图像的颜色模式,例如RGB或灰度
-
-
可以通过宽度选择滑块控制图像显示尺寸
3.2 格式转换
修改图像后缀,允许用户在不同格式之间转换图像文件。
- 勾选
是否格式转换
按钮,确定是否使用该功能。
- 通过下拉菜单选择待转换格式
-
选择格式后,右侧会出现转换后的图像:
-
自动显示图像文件自动保存的位置
-
也可以通过点击下载图像按钮直接下载到本地
下载
目录
-
3.3 图像背景处理
在数字图像处理领域,背景去除(俗称“抠图”)一直是一个热门话题。无论是专业摄影师还是普通用户,在处理图像时都希望能够简单快捷地去除不需要的背景,从而突出主题。通过集成 rembg 库,我们的工具能够快速响应用户上传的照片,并自动去除背景。最终输出的是带有透明通道(Alpha通道)的图片,这意味着即使是在复杂背景下拍摄的照片,也能轻松地与任何新背景进行合成。
- 通用模型
- 适用于各种类型的图像,无论是在自然环境中拍摄的照片,还是室内场景,都能提供高质量的背景去除效果。
- 服装解析模型
- 适用于从人像中解析衣物,衣物可以被解析为三类:上装、下装和全身装。
- 动漫角色分割模型
- 针对动漫角色的高精度分割,能够准确地分离出动漫角色,保留其细节和轮廓。这一功能对于动漫爱好者和创作者来说非常实用,可以轻松将动漫角色融入到不同的背景中。
3.3.1 背景去除
- 勾选
是否去除背景
按钮,确定是否使用该功能。
- 选择适合的模型。
- 选择对应参数后,右侧会出现带有透明通道(Alpha通道)图片:
- 自动显示图像文件自动保存的位置
- 也可以通过点击下载图像按钮直接下载到本地
下载
目录
3.3.2 背景替换
在日常生活中,我们经常需要处理证件照,例如护照、驾驶证、身份证等。这些证件照通常要求背景颜色为白色或蓝色。然而,拍摄时背景可能不符合要求,这时就需要进行背景替换。
- 勾选
是否替换背景
按钮,确定是否使用该功能。
- 选择背景颜色和适合的模型。
- 选择对应参数后,右侧会出现替换背景后的图像:
- 自动显示图像文件自动保存的位置
- 也可以通过点击下载图像按钮直接下载到本地
下载
目录
3.4 水印添加
在数字时代,保护您的作品版权变得越来越重要。无论是摄影作品、设计作品还是其他任何形式的视觉艺术,添加水印是一种有效的方式来防止未经授权的使用和复制。
- 勾选
是否添加水印
按钮,确定是否使用该功能。
- 选择参数:输入水印文字、选择颜色、选择字体大小
- 选择对应参数后,右侧会出现转换后的图像:
- 自动显示图像文件自动保存的位置
- 也可以通过点击下载图像按钮直接下载到本地
下载
目录
3.5 OCR识别
光学字符识别(Optical Character Recognition,简称OCR)是一种将图像中的文本内容转换为可编辑和可搜索的数据的技术。随着深度学习和计算机视觉的发展,OCR技术已经变得越来越成熟和准确,广泛应用于各种场景,如文档扫描、车牌识别、票据处理等。
- 勾选
是否识别
按钮,确定是否使用该功能。
- 等待几秒后,即可出现识别结果
4、生成可执行文件
4.1 生成已安装库文件
- 生成依赖库
确保你在开发环境中安装了所有应用程序运行所需的库,包括 Streamlit
和任何其他第三方库。通过 pip freeze > requirements.txt
命令生成一个包含所有已安装库及其版本号的文件。
如果你想使用pip freeze
命令生成一个仅包含已安装库名称而不包含版本号的requirements.txt
文件:
pip freeze | sed 's/==.*$//' > requirements.txt
- 安装依赖库:
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
库一般无法正确处理,可以使用下面的办法解决:
- 创建hook文件,放在hooks文件夹下(命名以hook开头)
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata("streamlit")
- 在项目根目录下创建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-packages
是Virtualenv
方式建立的python环境中安装包所在目录; -
如果你使用的是
Conda
创建环境,你需要找到所建环境的位置:D:/anaconda/install/envs/intermediateImg/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、源码下载路径
下载源码