paint-brush
Cách tô màu cho ảnh đen trắngtừ tác giả@alexk0
615 lượt đọc
615 lượt đọc

Cách tô màu cho ảnh đen trắng

từ tác giả Aleksandr Korepanov4m2024/06/07
Read on Terminal Reader

dài quá đọc không nổi

DeOldify là một công cụ cho phép bạn tô màu những bức ảnh cũ chỉ bằng vài cú nhấp chuột. Nó miễn phí và là mã nguồn mở, tất cả những gì bạn cần làm là viết một đoạn mã Python nhỏ.
featured image - Cách tô màu cho ảnh đen trắng
Aleksandr Korepanov HackerNoon profile picture
0-item

Tất cả chúng ta đều có một kho tàng những bức ảnh cũ được truyền lại từ cha mẹ, ông bà, v.v. Thông thường, những bức ảnh này có màu đen trắng và đôi khi, chúng tôi muốn làm cho chúng trở nên sống động bằng màu sắc. Có rất nhiều trang web trực tuyến nơi bạn có thể đạt được điều này chỉ bằng vài cú nhấp chuột ngay trong trình duyệt của mình. Tuy nhiên, vấn đề với những trang này nằm ở chỗ chúng có nhiều hạn chế về số lượng và chất lượng.


Ngoài ra, các dịch vụ này thường yêu cầu đăng ký và đăng ký, điều này có thể khá khó chịu.


Trong bài đăng này, tôi muốn chia sẻ cách bạn có thể tô màu bất kỳ số lượng ảnh nào bằng công cụ tuyệt vời DeOldify mà không gặp rắc rối về các giới hạn, đăng ký hoặc đăng ký.


DeOldifyphần giới thiệu rất thú vị và bạn có thể sử dụng nó, nhưng đối với những người chưa chuẩn bị trước thì có vẻ hơi khó khăn. Ở đây, tôi muốn trình bày một cách sử dụng DeOldify đơn giản hơn.

Chuẩn bị môi trường

Để bắt đầu, bạn sẽ cần một máy tính chạy Linux hoặc macOS . Nếu bạn đang sử dụng Windows , bạn vẫn có thể tiếp tục bằng cách sử dụng Hệ thống con Windows dành cho Linux (WSL) .


Có một danh sách các gói cần thiết cho Ubuntu :

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


Bạn có thể sử dụng danh sách này làm tài liệu tham khảo nếu bạn có bản phân phối Linux khác.


Đối với macOS (rất tiếc, đây chỉ là danh sách gần đúng vì tôi không có macOS rõ ràng để thử nghiệm):

 brew install python wget git ffmpeg libsm libxext


Bước tiếp theo là tạo một thư mục riêng có tên Sandbox để thực hiện mọi thứ trong đó. Bạn có thể chọn bất kỳ tên nào khác hoặc thậm chí chọn không tạo bất cứ thứ gì và bỏ qua bước này hoàn toàn.

 # Optional mkdir Sandbox cd Sandbox


Sau đó sao chép DeOldify :

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


DeOldify không có bất kỳ bản phát hành hoặc thẻ nào, điều đó có nghĩa là chúng tôi làm việc với nhánh chính . Tôi tin rằng mọi thứ sẽ hoạt động với bản gốc mới nhất bất cứ lúc nào. Nhưng để đề phòng, đây là số sửa đổi mà tôi đã kiểm tra mọi thứ:


be725ca6c5f411c47550df951546537d7202c9bc . Nếu muốn bạn có thể tham khảo:

 # Optional cd DeOldify git checkout be725ca6c5f411c47550df951546537d7202c9bc cd ..


Sau đó, cài đặt tất cả các phụ thuộc Python:

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


Tiếp theo, tạo một thư mục cho các mô hình và tải xuống mô hình:

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


Đó là nó! Môi trường đã sẵn sàng; phần khó khăn nhất đã ở phía sau chúng ta. Bây giờ, hãy viết một chút mã Python.

Tô màu mọi thứ

Hàm thú vị và hữu ích nhất đối với chúng ta là ModelImageVisualizer.plot_transformed_image() .


Tất cả những gì chúng ta cần làm là viết mã xung quanh nó.


Đây là cách thực hiện của tôi:

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


Hãy thoải mái sao chép, dán và sửa đổi nó theo cách bạn muốn.


Tập lệnh đọc tất cả các hình ảnh .png , .jpg.jpeg từ thư mục được truyền dưới dạng đối số tập lệnh đầu tiên và tô màu chúng, lưu kết quả vào thư mục được truyền dưới dạng đối số tập lệnh thứ hai. Lưu ý rằng thư mục đầu ra không được tồn tại; kịch bản tự tạo ra nó. Tôi đã lưu tập lệnh trong tệp Sandbox/runner.py nhưng bạn có thể sử dụng vị trí và tên khác nếu muốn.


Hãy thử nó! Tôi đã đặt một bức ảnh đen trắng vào Sandbox/photos/in và thư mục đầu ra là Sandbox/photos/out :

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


Biến môi trường PYTHONPATH phải tham chiếu đến thư mục DeOldify .


Đây là kết quả:

Ảnh đen trắng

Ảnh màu

Ảnh gốc