在日常生活或者工作中,經(jīng)常會遇到想將某張照片中的人物摳出來,然后拼接到其他圖片上去。專業(yè)點的人可以使用 PhotoShop 的“魔棒”工具進行摳圖,非專業(yè)人士則使用各種美圖 APP 來實現(xiàn),但是這兩類方式畢竟處理能力有限,一次只能處理一張圖片,而且比較復雜的圖像可能耗時較久。那今天就來向大家展示第三種扣圖方式——用 Python代碼來實現(xiàn) 一鍵批量摳圖。
1. 準備工作- 安裝paddlepaddle
既然要裝逼,準備工作是少不了的。所謂“站在巨人的肩膀上,干起活來事半功倍”,我們這里的“巨人”就是 paddlepaddle 了,中文名稱叫“飛槳”,那么這個 paddlepaddle 是什么呢?
它是“源于產(chǎn)業(yè)實踐的開源深度學習平臺,致力于讓深度學習技術的創(chuàng)新與應用更簡單”,直白點就是我?guī)湍銓崿F(xiàn)了深度學習底層框架,你只要有創(chuàng)意就可以在我平臺上運用少量簡單代碼輕松實現(xiàn)。它的官網(wǎng)是:https://www.paddlepaddle.org.cn/。
它的安裝比較簡單,官網(wǎng)首頁就有安裝指引,可以通過「安裝」菜單,查找到各個系統(tǒng)安裝詳細及注意事項,如下圖所示,我們這里根據(jù)官網(wǎng)的安裝指引,使用 pip 方式來安裝 CPU 版本。
本文以MacOS系統(tǒng)為例:
我們首先執(zhí)行以下命令安裝(推薦使用百度源)::
- 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 環(huán)境中測試一下是否安裝成功(這個也是按照官網(wǎng)指引來做),我們切換到 python 環(huán)境,運行如下代碼:
- ? ~ 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
要實現(xiàn)本文的一鍵批量扣圖需求,需要借助PaddleHub人像分割模型來實現(xiàn)。
PaddleHub 是基于 PaddlePaddle 開發(fā)的預訓練模型管理工具,可以借助預訓練模型更便捷地開展遷移學習工作,目前的預訓練模型涵蓋了圖像分類、目標檢測、詞法分析、語義模型、情感分析、視頻分類、圖像生成、圖像分割、文本審核、關鍵點檢測等主流模型。
PaddleHub官網(wǎng):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. 一鍵扣圖代碼實現(xiàn)
我們的實現(xiàn)步驟很簡單:
- 導入模塊
- 加載模型
- 獲取圖片文件
- 調(diào)用模塊摳圖
其中扣圖功能主要采用PaddleHub DeepLabv3+模型deeplabv3p_xception65_humanseg。
下面我們看具體扣圖代碼實現(xiàn)(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張圖片,為了兼顧不同讀者喜好的口味,示例圖片中既包括了帥哥,也有美女哦,并且將他們縮略圖放大了。
運行程序后,上述示例代碼運行結(jié)果如下所示。
運行成功后,在 humanseg_output 目錄下生成了9張圖片,同樣的,扣圖的結(jié)果就完成輸出了。
我們可以看到程序?qū)⒚繌垐D片中的人物(可以是一個人,也可以是多個人)識別出來,并且摳出來成圖,背景是白色。雖然有些細節(jié)處還有些許瑕疵,但是看起來還算不錯。
4. 需要注意的坑
在運行示例代碼時,如果沒有單獨安裝模型deeplabv3p_xception65_humanseg,默認會自動在執(zhí)行前進行安裝。但安裝完成后,執(zhí)行結(jié)果并沒有生成扣圖結(jié)果及humanseg_output目錄,輸出結(jié)果類似如下所示:
正常情況下,在生成扣圖數(shù)據(jù),打印results時,應該是類似如下結(jié)構(gòu)才對:
可以通過單獨安裝模型并指定安裝版本來解決。
- hub install deeplabv3p_xception65_humanseg==1.0.0
具體原因沒有細究,默認自動安裝模型時,版本為1.2.0,猜測由于還是模型版本不兼容問題導致。
5. 總結(jié)
本文基于 paddlepaddle 平臺,利用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg),使用簡單的五行代碼就實現(xiàn)了批量摳圖。有些讀者可能會想,上述示例中提供的代碼行數(shù)不止五行代碼吧,在上述示例中,真正實現(xiàn)扣圖的主代碼其實只需要下面五行:
- 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+模型 不僅可以實現(xiàn)一鍵扣圖,還可以進行圖片合成,視頻合成等。利用好它不僅解放了人的雙手和雙眼,而且為某些程序猿/程序媛的裝逼工具箱提供了一件寶器。下次如果碰到某個女生或者閨蜜在為摳圖發(fā)愁,別忘了掏出神器,贏得芳心哦!
paddlepaddle作為一款開源的深度學習平臺,本文介紹的扣圖訓練模型只是其中的冰山一角,實戰(zhàn)訓練預測模型種類還遠遠不止,更多的場景結(jié)合,讀者們可自行挖掘。
到此這篇關于5行Python代碼實現(xiàn)一鍵批量扣圖的文章就介紹到這了,更多相關Python 批量扣圖內(nèi)容請搜索我們以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持我們!