黑白老照片上色,手把手教你用Python怎么玩兒!


各位讀者們,大家好啊,上個月初寫了一篇關於老照片修復的教程,有讀者看完不過癮,表示想讓我再安排一篇黑白照片上色教程,於是就有了這篇文章的由來

image-20210424192054643

DeOldify 介紹

開始之前先對這個項目做個簡單介紹,DeOldify 是一個關於給黑白照片上色的項目,是基於深度學習技術開發的,源碼在 Github 上已經開源,目前收獲了 13.4 k Star;去年有一個 B 站 Up主 制作了一個有關修復 100 年前老北京的視頻

image-20210424195915091

其中用到的上色就用到了DeOldify 框架,DeOldify 創建的目的是為了給黑白照片上色,但讓人驚艷的是它除了能處理圖片外,也可以處理視頻;

image-20210424200405209

DeOldify 的核心網絡框架是 GAN ,對比以前上色技術有以下幾個特點:

  • 1,老照片中的偽影在上色過程中會被消除;
  • 2,老照片的人臉部位來說,處理后皮膚會變得更光滑;
  • 3,呈現更詳細、真實的渲染效果;

簡單介紹后,下面開始正式介紹一下它的用法,本次的測試環境如下

  • OS: Windows 10;
  • Python : Python 3.7.6;
  • IDE : Pycharm;
  • pytorch : 1.7.0 ;

2,環境配置

2.1,項目克隆到本地

有兩種方法可供選擇

1, Git 命令

git@github.com:jantic/DeOldify.git

2,在Github 項目頁面點擊 Download ZIP 選項,將項目手動下載到到本地,Github 地址貼在下方

https://github.com/jantic/DeOldify

2.2,下載權重文件

DeOldify 是基於深度學習開發的,需要用到預訓練權重,這里項目開發者已經把訓練好的權重上傳到網上,我們可以直接拿來使用,不需要我們再訓練

本項目中用到的權重文件比較多,一共三個:

  • 1,Artistic 權重,會使圖片上色效果 更 大膽 一些,下載地址:
https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth
  • 2,Stable 權重,相對於 Artistic 上色效果更保守一些,下載地址:
https://www.dropbox.com/s/usf7uifrctqw9rl/ColorizeStable_gen.pth
  • 3 ,Video 權重,此權重文件用來給視頻上色,下載地址
https://data.deepai.org/deoldify/ColorizeVideo_gen.pth

權重文件下載完畢后,在項目根目錄下創建一個 models 文件夾,把下載好的三個權重文件放入 models 文件夾內,項目根目錄排列如下

image-20210424214700383

2.3,安裝依賴項

在終端中輸入如下命令,安裝項目所需要的第三方擴展庫;

pip install -r requirements.txt

第三方擴展庫安裝完畢之后,需要提醒一下,本項目是基於 Pytorch 進行開發的,在 requirements.txt 中作者並沒有加入這 torch 依賴庫,所以在啟動項目之前請確保 torch 、torchvision 等庫已經安裝到你的運行環境中;

Tip : 如果后面你想用到 GPU 加速效果,CUDA 和 Cudnn 等 GPU 加速包也需要提前配好

3 啟動項目

環境配置好之后,下面的步驟就比較簡單了,在主項目下創建一個腳本作為程序運行入口

3.1,照片上色

給照片上色的話,在主腳本內填入下面代碼塊

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)
from deoldify.visualize import *

plt.style.use('dark_background')
torch.backends.cudnn.benchmark=True

import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")

colorizer = get_image_colorizer(artistic=True)

render_factor=35

source_path = 'test_images/image.png'

result_path = None

colorizer.plot_transformed_image(path=source_path, render_factor=render_factor, compare=True)

代碼中有幾個參數簡單介紹一下:

  • device 指定inference 時用到的 GPU 型號,根據自己情況從下面選項中選擇一個即可
from enum import IntEnum

class DeviceId(IntEnum):
    GPU0 = 0,
    GPU1 = 1,
    GPU2 = 2,
    GPU3 = 3,
    GPU4 = 4,
    GPU5 = 5,
    GPU6 = 6,
    GPU7 = 7,
    CPU = 99
device.set(device=DeviceId.GPU0)
  • Artistic 為布爾值, True 表示啟用 Artistic 模式 ( False 啟用 Stable 模式);
colorizer = get_image_colorizer(artistic=True)

前面提到過 Artistic 與 Stable 是有區別的(因為用到的權重文件是不一樣的), Artistic 上色效果會更加激進一些,例如給下面這張荷葉照片上色,不同模式下得到的圖片是不一樣的

image-20210430221407338

Artistic 模式

image-20210430221435152

Stable 模式

image-20210430221423325

  • render_factor 表示渲染因子,值越效果越好,但同時需要更大的顯存;
  • source_path 表示輸入圖片路徑;

上色后的圖片會存放在根目錄下的 result_images 文件夾中,從網上下載了幾張黑白圖片,用這個框架自己也測試了一下,看起來效果還不錯~

圖一

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mM7vfSEW-1622219475075)(C:\Users\zeroing\Desktop\image-20210430221510838.png)]

圖二

image-20210430221543902

圖三

image-20210430221618418

3.2,視頻上色

視頻上色,需要用下面的代碼塊

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)

from deoldify.visualize import *
plt.style.use('dark_background')
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")

colorizer = get_video_colorizer()

#NOTE:  Max is 44 with 11GB video cards.  21 is a good default
render_factor=21


file_name_ext = file_name + '.mp4'
result_path = None

colorizer.colorize_from_file_name(file_name_ext, render_factor=render_factor)

代碼中參數用法參考 3.1,相對給照片上色來說,處理視頻時除了耗時之外還需要考慮幀與幀之間的相關性,要復雜一些;

這里我借助 You-get 命令,從B 站下載了1972年《教父》一小部分片段(因為平台上傳視頻比較麻煩,這里只截取了其中一幀圖片,請原諒我的懶,,,)

image-20210529002743136

經過上色處理后,效果如下,

image-20210529002913852

上色后的視頻仔細看的話的確還有一定的瑕疵,但整體看起來效果已經相當不錯了

4,項目源碼獲取

為了方便起見,我已經把配置好的項目文件打包成一個解壓包,解壓后只需安裝項目中的所需依賴項即可,無需再配置權重文件;

pip install -r requirements.txt

項目源碼獲取方式,關注微信公號:小張Python,在公眾號后台回復關鍵字 210501 即可

5,小結

項目上色原理這里並沒有太多介紹,感興趣的讀者可以通過閱讀源碼深入了解一下;如果只是想把這個項目應用到自己數據上,我想這篇文章已經講的很明白了,之前寫過一篇老照片修復文章,其實兩者可以結合一下,屆時會有很棒的效果~

如果本篇內容對你有所幫助的話,點個贊是對我最大的鼓勵~

好了以上就是本篇文章的全部內容了,最后感謝大家的閱讀,我們下期見~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM