У каждого из нас есть целая сокровищница старых фотографий, доставшихся нам от родителей, бабушек и дедушек и так далее. Часто эти фотографии черно-белые, а иногда мы хотим оживить их в цвете. В Интернете существует множество веб-сайтов, на которых вы можете добиться этого всего несколькими щелчками мыши прямо в браузере. Однако проблема этих сайтов заключается в их многочисленных ограничениях по количеству и качеству.
Кроме того, эти услуги часто требуют регистрации и подписки, что может быть весьма неприятно.
В этом посте я хотел бы рассказать, как вы можете раскрасить любое количество фотографий с помощью фантастического инструмента DeOldify без ограничений, регистраций или подписок.
У DeOldify потрясающее введение , и вы можете им воспользоваться, но неподготовленным людям оно может показаться немного сложным. Здесь я хотел бы продемонстрировать более простой способ использования DeOldify .
Для начала вам понадобится компьютер под управлением Linux или macOS . Если вы используете Windows , вы все равно можете продолжить, используя подсистему Windows для 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 .
Вот результат: