我们每个人都有父母、祖父母等传下来的大量旧照片。这些照片通常都是黑白的,有时我们希望将它们变成彩色。网上有许多网站,您只需在浏览器中单击几下即可实现此目的。然而,这些网站的问题在于它们在数量和质量上有很多限制。
此外,这些服务通常需要注册和订阅,这可能令人非常沮丧。
在这篇文章中,我想分享如何使用奇妙的工具DeOldify为任意数量的照片上色,而不受限制、注册或订阅的麻烦。
DeOldify有一个很棒的介绍,你可以使用它,但对于没有准备的人来说,它可能看起来有点难。这里,我想演示一种更简单的使用DeOldify的方法。
首先,你需要一台运行Linux或macOS 的计算机。如果你使用的是Windows ,你仍然可以通过使用Windows Subsystem for Linux (WSL)来继续。
以下是Ubuntu所需软件包的列表:
sudo apt update sudo apt install python3-pip wget git ffmpeg libsm6 libxext6
如果您有其他Linux发行版,您可以使用该列表作为参考。
对于macOS (不幸的是,这是一个近似列表,因为我没有明确的macOS可供测试):
brew install python wget git ffmpeg libsm libxext
下一步是创建一个名为Sandbox 的单独文件夹来执行所有操作。您可以选择任何其他名称,甚至可以选择不创建任何内容并完全跳过此步骤。
# Optional mkdir Sandbox cd Sandbox
然后克隆DeOldify :
git clone https://github.com/jantic/DeOldify.git
DeOldify没有任何版本或标签,这意味着我们使用主分支。我相信所有内容都应该随时与最新的主分支兼容。但以防万一,这里是我用来测试所有内容的修订号:
be725ca6c5f411c47550df951546537d7202c9bc 。如果你愿意,你可以看看:
# Optional cd DeOldify git checkout be725ca6c5f411c47550df951546537d7202c9bc cd ..
之后,安装所有 Python 依赖项:
pip3 install --user -r DeOldify/requirements.txt pip3 install --user -r DeOldify/requirements-colab.txt pip3 install --user -r DeOldify/requirements-dev.txt
接下来,为模型创建一个目录,并下载模型:
mkdir -p DeOldify/models wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O DeOldify/models/ColorizeArtistic_gen.pth
就这样!环境已经准备好了;最困难的部分已经过去了。现在,让我们写一些 Python 代码。
对我们来说最有趣和最有用的函数是ModelImageVisualizer.plot_transformed_image() 。
我们需要做的就是围绕它编写代码。
这是我的实现:
#!/usr/bin/python3 from deoldify import device from deoldify.device_id import DeviceId # choices: CPU, GPU0...GPU7 device.set(device=DeviceId.GPU0) from deoldify.visualize import * import warnings import sys import os warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?") # Play with this constant! render_factor = 35 input_dir = sys.argv[1] output_dir = sys.argv[2] if not os.path.isdir(input_dir): print("input directory is not a directory or not exist") sys.exit(1) if os.path.exists(output_dir): print("out directory is already exist") sys.exit(1) os.makedirs(output_dir) root_dir = Path(os.environ['PYTHONPATH']) colorizer = get_image_colorizer(root_folder=root_dir, artistic=True) for filename in os.listdir(input_dir): f = os.path.join(input_dir, filename) if os.path.isfile(f) and (f.endswith(".png") or f.endswith(".jpg") or f.endswith(".jpeg")): image_path = colorizer.plot_transformed_image( path=f, results_dir=Path(output_dir), render_factor=render_factor, compare=True, watermarked=False ) print("{} ready".format(image_path))
请随意复制、粘贴并修改它。
该脚本从作为第一个脚本参数传递的目录中读取所有.png
、 .jpg
和.jpeg
图像并对其进行着色,将结果保存到作为第二个脚本参数传递的目录中。请注意,输出目录一定不存在;脚本会自行创建。我将脚本保存在Sandbox/runner.py
文件中,但如果您愿意,可以使用其他位置和名称。
我们来尝试一下吧!我将一张黑白照片放入Sandbox/photos/in
,输出目录为Sandbox/photos/out
:
# from Sandbox directory PYTHONPATH=./DeOldify/ python3 runner.py photos/in/ photos/out/
环境变量PYTHONPATH必须引用DeOldify目录。
结果如下: