程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python+DeOldify實現老照片上色功能

編輯:Python

目錄

前言

安裝

代碼改造使用

前言

老照片上色其實很早之前就想寫了,也有不少人問了我這個項目。

最近把DeOldify項目好好弄了弄。

項目地址:DeOldify項目地址

先看看項目給出的圖片對比效果。

從給出的效果可以看出,上色後的圖片對人物、景色、物品、環境等等都變得很生動。

下面來安裝一下項目執行環境,測試一下自己的圖片。

安裝

看一下項目的README中關於安裝的部分。

使用anaconda安裝環境。安裝完成後看一下模型文件需要下載哪些。

仔細看看,文章給出了不同模型的區別。

從作者的描述中,可以看出前面2個主要是針對圖像的模型,一個藝術一個穩定,等下使用的時候看看區別。

三個模型如果比較難下載,可以從我的網盤下載,地址如下。

鏈接 提取碼:kr3c 

下載的3個模型文件放到項目根目錄下models文件夾內,沒有就創建models。

代碼改造使用

作者在README中給出了docker快速啟動以及api啟動方式。有點麻煩,還是自己改一下。

先看一下app.py代碼內容。

@app.route("/process", methods=["POST"])def process_image(): input_path = generate_random_filename(upload_directory,"jpeg") output_path = os.path.join(results_img_directory, os.path.basename(input_path)) try: if 'file' in request.files: file = request.files['file'] if allowed_file(file.filename): file.save(input_path) try: render_factor = request.form.getlist('render_factor')[0] except: render_factor = 30 else: url = request.json["url"] download(url, input_path) try: render_factor = request.json["render_factor"] except: render_factor = 30 result = None try: result = image_colorizer.get_transformed_image(input_path, render_factor=render_factor, post_process=True, watermarked=True) except: convertToJPG(input_path) result = image_colorizer.get_transformed_image(input_path, render_factor=render_factor, post_process=True, watermarked=True) finally: if result is not None: result.save(output_path, quality=95) result.close() callback = send_file(output_path, mimetype='image/jpeg') return callback, 200 except: traceback.print_exc() return {'message': 'input error'}, 400 finally: pass clean_all([ input_path, output_path ])

可以看出該POST接口主要操作分為:獲取文件流、根據參數調整渲染因子(默認為30)、通過image_colorizer對象進行染色操作、最終將文件流返回。按照這個方法我改造了一個直接使用的工具方法。

代碼如下:

#!/user/bin/env python# coding=utf-8"""@project : [email protected] : 劍客阿良[email protected] : [email protected] : [email protected] : 2022-06-17 16:37:13"""import osfrom pathlib import Pathfrom app_utils import convertToJPGfrom deoldify.visualize import ModelImageVisualizer, get_image_colorizerdef colorizer(input_path, output_dir): _output_path = os.path.join(output_dir, os.path.basename(input_path)) _image_colorizer = get_image_colorizer(artistic=True) try: result = _image_colorizer.get_transformed_image(input_path, render_factor=30, post_process=True, watermarked=True) except: convertToJPG(input_path) result = _image_colorizer.get_transformed_image(input_path, render_factor=30, post_process=True, watermarked=True) finally: if result is not None: result.save(_output_path, quality=95) result.close()if __name__ == '__main__': colorizer("./data/image/xxx1.jpg", "./data/result1")

一些異常情況我就不處理,如果需要的話,使用的時候加一些補充代碼即可。

artistic參數作為是否使用藝術模型的bool參數。

看一下我准備的需要上色的照片。

選擇Artistic模型的效果如下:

選擇Stable模型的效果如下:

還是可以看出一些區別的,只是本人沒啥藝術細菌,看不大出來怎麼個藝術法。

注意

1、 上面的工具代碼由於引入了項目中的幾個方法,可能存在引入包缺失問題。補充安裝如下:

pip install opencv-python -i https://pypi.douban.com/simple
pip install scikit-image -i https://pypi.douban.com/simple
pip install ffmpeg -i https://pypi.douban.com/simple

2、安裝scikit-image的時候會安裝Pillow最新版本,可能會導致執行錯誤,補充卸載安裝Pillow如下:

pip uninstall Pillow
pip install Pillow==6.2.2 

以上就是Python+DeOldify實現老照片上色功能的詳細內容,更多關於Python DeOldify老照片上色的資料請關注軟件開發網其它相關文章!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved