推薦一款 Python 神器,5 行 Python 程式碼 實現一鍵批量扣圖
今天給大家分享一款Python裝逼實用神器。
在日常生活或者工作中,經常會遇到想將某張照片中的人物摳出來,然後拼接到其他圖片上去。專業點的人可以使用 PhotoShop 的“魔棒”工具進行摳圖,非專業人士則使用各種美圖 APP 來實現,但是這兩類方式畢竟處理能力有限,一次只能處理一張圖片,而且比較複雜的影像可能耗時較久。那今天就來向大家展示第三種扣圖方式——用 Python程式碼來實現 一鍵批量摳圖。
1. 準備工作- 安裝paddlepaddle
既然要裝逼,準備工作是少不了的。所謂“站在巨人的肩膀上,幹起活來事半功倍”,我們這裡的“巨人”就是 paddlepaddle 了,中文名稱叫“飛槳”,那麼這個 paddlepaddle 是什麼呢?
它是“源於產業實踐的開源深度學習平臺,致力於讓深度學習技術的創新與應用更簡單”,直白點就是我幫你實現了深度學習底層框架,你只要有創意就可以在我平臺上運用少量簡單程式碼輕鬆實現。它的官網是:https://www.paddlepaddle.org.cn/
。
它的安裝比較簡單,官網首頁就有安裝指引,可以通過「安裝」選單,查詢到各個系統安裝詳細及注意事項,如下圖所示,我們這裡根據官網的安裝指引,使用 pip 方式來安裝 CPU 版本。
本文以MacOS系統為例:
我們首先執行以下命令安裝(推薦使用百度源)::
python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
或者:
python3 -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
從安裝過程中,可以看到在安裝paddlepaddle庫時,需要安裝如下依賴庫:
Installing collected packages: pathlib, click, joblib, regex, tqdm, nltk, gast, rarfile, pyyaml, funcsigs, paddlepaddle
Running setup.py install for pathlib ... done
Running setup.py install for regex ... done
Running setup.py install for nltk ... done
Running setup.py install for rarfile ... done
Running setup.py install for pyyaml ... done
Successfully installed click-7.1.2 funcsigs-1.0.2 gast-0.3.3 joblib-0.14.1 nltk-3.5 paddlepaddle-1.8.0 pathlib-1.0.1 pyyaml-5.3.1 rarfile-3.1 regex-2020.5.7 tqdm-4.46.0
安裝成功後,我們在 python 環境中測試一下是否安裝成功(這個也是按照官網指引來做),我們切換到 python 環境,執行如下程式碼:
➜ ~ python3
Python 3.7.4 (default, Jul 9 2019, 18:15:00)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()
Running Verify Fluid Program ...
Your Paddle Fluid works well on SINGLE GPU or CPU.
W0512 17:41:31.037240 2844976000 build_strategy.cc:170] fusion_group is not enabled for Windows/MacOS now, and only effective when running with CUDA GPU.
W0512 17:41:31.043959 2844976000 fuse_all_reduce_op_pass.cc:74] Find all_reduce operators: 2. To make the speed faster, some all_reduce ops are fused during training, after fusion, the number of all_reduce ops is 1.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now
如果能看到 Your Paddle Fluid is installed successfully 就表示安裝成功了。
2. 準備工作- 安裝paddlehub
要實現本文的一鍵批量扣圖需求,需要藉助PaddleHub人像分割模型來實現。
PaddleHub 是基於 PaddlePaddle 開發的預訓練模型管理工具,可以藉助預訓練模型更便捷地開展遷移學習工作,目前的預訓練模型涵蓋了影像分類、目標檢測、詞法分析、語義模型、情感分析、視訊分類、影像生成、影像分割、文字稽核、關鍵點檢測等主流模型。
PaddleHub官網:
https://www.paddlepaddle.org.cn/hub
PaddleHub專案地址:
https://github.com/PaddlePaddle/PaddleHub
更多PaddleHub預訓練模型教程合集課程可見:
https://aistudio.baidu.com/aistudio/course/introduce/1070
介紹完了專案,接下來我們開始線上安裝 paddlehub :
pip install -i https://mirror.baidu.com/pypi/simple paddlehub
或者按指定版本安裝:
pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝完成後,我們就可以開始運用了。
3. 一鍵扣圖程式碼實現
我們的實現步驟很簡單:
- 匯入模組
- 載入模型
- 獲取圖片檔案
- 呼叫模組摳圖
其中扣圖功能主要採用PaddleHub DeepLabv3+模型deeplabv3p_xception65_humanseg
。
下面我們看具體扣圖程式碼實現(demo.py):
import os
import paddlehub as hub
# 載入模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')
base_dir = os.path.abspath(os.path.dirname(__file__))
# 獲取當前檔案目錄
path = os.path.join(base_dir, 'images/')
# 獲取檔案列表
files = [path + i for i in os.listdir(path)]
print(files)
# 摳圖
results = humanseg.segmentation(data={'image': files})
for result in results:
print(result)
示例中,我將圖片放在程式碼資料夾的同級目錄 images資料夾下,執行程式碼後,輸出的摳圖圖片會自動放在程式碼同級目錄的 humanseg_output 目錄下,檔名稱跟原圖片的名稱相同,但是檔案格式是 png 。
其中示例 images 目錄下放了9張圖片,為了兼顧不同讀者喜好的口味,示例圖片中既包括了帥哥,也有美女哦,並且將他們縮圖放大了,如下:
執行程式後,上述示例程式碼執行結果如下所示。
執行成功後,在 humanseg_output 目錄下生成了9張圖片,同樣的,扣圖的結果如下所示:
我們可以看到程式將每張圖片中的人物(可以是一個人,也可以是多個人)識別出來,並且摳出來成圖,背景是白色。雖然有些細節處還有些許瑕疵,但是看起來還算不錯。
4. 需要注意的坑
在執行示例程式碼時,如果沒有單獨安裝模型deeplabv3p_xception65_humanseg
,預設會自動在執行前進行安裝。但安裝完成後,執行結果並沒有生成扣圖結果及humanseg_output目錄,輸出結果類似如下所示:
正常情況下,在生成扣圖資料,列印results時,應該是類似如下結構才對:
可以通過單獨安裝模型並指定安裝版本來解決。
hub install deeplabv3p_xception65_humanseg==1.0.0
具體原因沒有細究,預設自動安裝模型時,版本為1.2.0,猜測由於還是模型版本不相容問題導致。
5. 總結
本文基於 paddlepaddle 平臺,利用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg
),使用簡單的五行程式碼就實現了批量摳圖。有些讀者可能會想,上述示例中提供的程式碼行數不止五行程式碼吧,在上述示例中,真正實現扣圖的主程式碼其實只需要下面五行:
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')
base_dir = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(base_dir, 'images/')
files = [path + i for i in os.listdir(path)]
results = humanseg.segmentation(data={'image': files})
利用PaddleHub DeepLabv3+
模型 不僅可以實現一鍵扣圖,還可以進行圖片合成,視訊合成等。利用好它不僅解放了人的雙手和雙眼,而且為某些程式猿/程式媛的裝逼工具箱提供了一件寶器。下次如果碰到某個女生或者閨蜜在為摳圖發愁,別忘了掏出神器,贏得芳心哦!
paddlepaddle作為一款開源的深度學習平臺,本文介紹的扣圖訓練模型只是其中的冰山一角,實戰訓練預測模型種類還遠遠不止,更多的場景結合,讀者們可自行挖掘。
相關文章
- 推薦一款最強Python自動化神器!不用寫一行程式碼!Python行程
- 推薦一款Python資料視覺化神器Python視覺化
- 別再自己摳圖了,Python用5行程式碼實現批量摳圖Python行程
- 70 行 python 程式碼實現桌布批量下載Python
- 推薦一款Python介面自動化測試資料提取分析神器!Python
- 推薦一款 MySQL 命令列神器MySql命令列
- 一行 Python 程式碼實現並行Python並行
- 推薦一款 Python 微服務框架 - NamekoPython微服務框架
- 低程式碼開發,推薦一款Web 端自動化神器:AutomaWeb
- 推薦一款IDEA神器!一鍵檢視Java位元組碼以及其他類資訊IdeaJava
- 推薦一款讓你縱橫Github的讀碼神器Github
- 推薦一款 Python 開源庫,技術人必備的造資料神器!Python
- 推薦一款Python開源庫,技術人必備的造資料神器!Python
- 推薦一款自動化測試神器,不會寫程式碼也能做!
- 強!推薦一款Python開源自動化指令碼工具:AutoKey!Python指令碼
- 不到40行 Python 程式碼打造一個簡單的推薦系統Python
- vim設定一鍵執行python程式碼Python
- 怎樣用一行 Python 程式碼實現並行Python並行
- 5行Python程式碼就能實現刷爆全網的動態條形圖!Python
- 推薦一款超實用的皮膚工具,快速實現一鍵環境部署!
- 10 個 推薦的 Python 程式碼習慣Python
- 推薦一款漂亮的 Java 圖形驗證碼Java
- 為 PHP 轉 Go 的朋友們推薦一款神器PHPGo
- 推薦一款專為新手用的Python開發工具Python
- 力扣 500. 鍵盤行 Python / C++力扣PythonC++
- 推薦一款好用的程式碼視覺化工具視覺化
- Python技巧-只用一行程式碼輕鬆實現圖片文字識別Python行程
- 20 行 Python 程式碼實現加密通訊Python加密
- 推薦一款小眾且好用的 Python 爬蟲庫 - RoboBrowserPython爬蟲
- 基於深度學習的圖書管理推薦系統(附python程式碼)深度學習Python
- 推薦一款LUT調色神器3D LUT Creator for Mac3DMac
- 1行Python程式碼實現FTP伺服器PythonFTP伺服器
- 推薦一款實用性很強的小程式IDEIDE
- Python 潮流週刊#76:用 50 行 Python 程式碼實現 BASIC(摘要)Python
- 10 行 Python 程式碼,批量壓縮圖片 500 張,簡直太強大了Python
- Python課程程式碼實現Python
- 想要一款iOS向量繪圖程式設計工具?推薦來了iOS繪圖程式設計
- 2022年5種主流的Python框架推薦!Python框架