paint-brush
Comment coloriser une photo en noir et blancpar@alexk0
467 lectures
467 lectures

Comment coloriser une photo en noir et blanc

par Aleksandr Korepanov4m2024/06/07
Read on Terminal Reader

Trop long; Pour lire

DeOldify est un outil qui vous permet de coloriser d'anciennes photos en quelques clics. C'est gratuit et open source, et tout ce que vous avez à faire est d'écrire un peu de code Python.
featured image - Comment coloriser une photo en noir et blanc
Aleksandr Korepanov HackerNoon profile picture
0-item

Nous possédons tous un trésor de vieilles photos transmises par nos parents, nos grands-parents, etc. Souvent, ces photos sont en noir et blanc, et parfois, on souhaite leur donner vie en couleur. Il existe de nombreux sites Web en ligne sur lesquels vous pouvez y parvenir en quelques clics directement dans votre navigateur. Cependant, le problème de ces sites réside dans leurs nombreuses restrictions en termes de quantité et de qualité.


De plus, ces services nécessitent souvent une inscription et des abonnements, ce qui peut être assez frustrant.


Dans cet article, j'aimerais partager comment vous pouvez coloriser n'importe quel nombre de photos à l'aide du fantastique outil DeOldify , sans les tracas des limitations, des inscriptions ou des abonnements.


DeOldify a une introduction étonnante , et vous pouvez l'utiliser, mais pour les personnes non préparées, cela peut sembler un peu difficile. Ici, j'aimerais démontrer une manière plus simple d'utiliser DeOldify .

Préparer l'environnement

Pour commencer, vous aurez besoin d'un ordinateur exécutant Linux ou macOS . Si vous utilisez Windows , vous pouvez toujours continuer en utilisant le sous-système Windows pour Linux (WSL) .


Il existe une liste des packages requis pour Ubuntu :

 sudo apt update sudo apt install python3-pip wget git ffmpeg libsm6 libxext6


Vous pouvez utiliser la liste comme référence si vous disposez d'une autre distribution Linux .


Pour macOS (malheureusement, il s'agit d'une liste approximative car je n'ai pas de macOS clair pour tester) :

 brew install python wget git ffmpeg libsm libxext


L'étape suivante consiste à créer un dossier séparé nommé Sandbox dans lequel tout faire. Vous pouvez choisir n'importe quel autre nom ou même choisir de ne rien créer et ignorer complètement cette étape.

 # Optional mkdir Sandbox cd Sandbox


Puis clonez DeOldify :

 git clone https://github.com/jantic/DeOldify.git


DeOldify n'a pas de versions ni de balises, ce qui signifie que nous travaillons avec la branche master . Je pense que tout devrait fonctionner à tout moment avec le dernier maître. Mais au cas où, voici un numéro de révision avec lequel j'ai tout testé :


be725ca6c5f411c47550df951546537d7202c9bc . Si vous le souhaitez, vous pouvez le consulter :

 # Optional cd DeOldify git checkout be725ca6c5f411c47550df951546537d7202c9bc cd ..


Après cela, installez toutes les dépendances Python :

 pip3 install --user -r DeOldify/requirements.txt pip3 install --user -r DeOldify/requirements-colab.txt pip3 install --user -r DeOldify/requirements-dev.txt


Ensuite, créez un répertoire pour les modèles et téléchargez le modèle :

 mkdir -p DeOldify/models wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O DeOldify/models/ColorizeArtistic_gen.pth


C'est ça! L'environnement est prêt ; le plus dur est derrière nous. Maintenant, écrivons un peu de code Python.

Coloriser tout

La fonction la plus intéressante et la plus utile pour nous est ModelImageVisualizer.plot_transformed_image() .


Tout ce que nous avons à faire est d'écrire du code autour.


Voici ma mise en œuvre :

 #!/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))


N'hésitez pas à le copier, coller et modifier comme vous le souhaitez.


Le script lit toutes les images .png , .jpg et .jpeg du répertoire transmis comme premier argument de script et les colorise, enregistrant les résultats dans le répertoire transmis comme deuxième argument de script. Notez que le répertoire de sortie ne doit pas exister ; le script le crée lui-même. J'ai enregistré le script dans le fichier Sandbox/runner.py , mais vous pouvez utiliser un emplacement et un nom différents si vous préférez.


Essayons! J'ai placé une photo en noir et blanc dans Sandbox/photos/in , et le répertoire de sortie est Sandbox/photos/out :

 # from Sandbox directory PYTHONPATH=./DeOldify/ python3 runner.py photos/in/ photos/out/


La variable d'environnement PYTHONPATH doit faire référence au répertoire DeOldify .


Voici le résultat :

Photo en noir et blanc

Photo colorisée

Photo originale