paint-brush
Как раскрасить черно-белую фотографиюк@alexk0
467 чтения
467 чтения

Как раскрасить черно-белую фотографию

к Aleksandr Korepanov4m2024/06/07
Read on Terminal Reader

Слишком долго; Читать

DeOldify — это инструмент, который позволяет раскрашивать старые фотографии в несколько кликов. Это бесплатно и с открытым исходным кодом, и все, что вам нужно сделать, это написать небольшой код Python.
featured image - Как раскрасить черно-белую фотографию
Aleksandr Korepanov HackerNoon profile picture
0-item

У каждого из нас есть целая сокровищница старых фотографий, доставшихся нам от родителей, бабушек и дедушек и так далее. Часто эти фотографии черно-белые, а иногда мы хотим оживить их в цвете. В Интернете существует множество веб-сайтов, на которых вы можете добиться этого всего несколькими щелчками мыши прямо в браузере. Однако проблема этих сайтов заключается в их многочисленных ограничениях по количеству и качеству.


Кроме того, эти услуги часто требуют регистрации и подписки, что может быть весьма неприятно.


В этом посте я хотел бы рассказать, как вы можете раскрасить любое количество фотографий с помощью фантастического инструмента 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 .


Вот результат:

Черно-белое фото

Раскрашенное фото

Исходное фото