首頁 > 軟體

如何使用五行Python程式碼輕鬆實現批次摳圖

2022-04-14 10:01:41

前言

你是否曾經想將某張照片中的人物摳出來,然後拼接到其他圖片上去,從而可以即使你在天涯海角,我也可以到此一遊?

專業點的人使用 PhotoShop 的“魔棒”工具可以摳圖,非專業人士可以使用各種美圖 APP 來實現,但是他們畢竟處理能力有限,一次只能處理一張圖片,而且比較複雜的影象可能耗時較久。

今天我來向大家展示第三種途徑——用 Python 一鍵批次摳圖。

準備工作

既然要裝逼,準備工作是少不了的。所謂“站在巨人的肩膀上,做事事半功倍”,我們這裡的“巨人”就是 paddlepaddle 了,中文名稱叫“飛槳”,那麼這個 paddlepaddle 是什麼呢?

它是“源於產業實踐的開源深度學習平臺,致力於讓深度學習技術的創新與應用更簡單”,直白點就是我幫你實現了深度學習底層框架,你只要有創意就可以在我平臺上運用少量簡單程式碼輕鬆實現。它的官網是 https://www.paddlepaddle.org.cn/ 。

它的安裝也比較簡單,官網首頁就有安裝指引,我們這裡根據官網的安裝指引,使用 pip 方式來安裝 CPU 版本。

我們首先執行語句:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安裝成功後,我們在 python 環境中測試一下是否安裝成功(這個也是按照官網指引來做),我們切換到 python 環境,執行如下程式碼:

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()
Running Verify Paddle Program ... 
Your Paddle works well on SINGLE GPU or CPU.
I0506 21:47:48.657404 2923565952 parallel_executor.cc:440] The Program will be executed on CPU using ParallelExecutor, 2 cards are used, so 2 programs are executed in parallel.
W0506 21:47:48.658407 2923565952 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.
I0506 21:47:48.658516 2923565952 build_strategy.cc:365] SeqOnlyAllReduceOps:0, num_trainers:1
I0506 21:47:48.659137 2923565952 parallel_executor.cc:307] Inplace strategy is enabled, when build_strategy.enable_inplace = True
I0506 21:47:48.659595 2923565952 parallel_executor.cc:375] Garbage collection strategy is enabled, when FLAGS_eager_delete_tensor_gb = 0
Your Paddle works well on MUTIPLE GPU or CPU.
Your Paddle is installed successfully! Let's start deep Learning with Paddle now
>>> 

看到 Your Paddle is installed successfully 就表示安裝成功了。

我們接下來需要使用的是這個平臺的 paddlehub 工具,所以我們還需要安裝 paddlehub :

pip install -i https://mirror.baidu.com/pypi/simple paddlehub

安裝完成後,我們就可以開始運用了。

程式碼實現

我們的實現步驟很簡單:匯入模組 -> 載入模型 -> 獲取圖片檔案 -> 呼叫模組摳圖。

下面我們看程式碼實現:

import os, paddlehub as hub
huseg = hub.Module(name='deeplabv3p_xception65_humanseg') # 載入模型
path = './imgs/' # 檔案目錄
files = [path + i for i in os.listdir(path)] # 獲取檔案列表
results = huseg.segmentation(data={'image': files}) # 摳圖

我將圖片放在程式碼檔案夾的同級目錄 imgs 資料夾下,執行程式碼後,輸出的摳圖圖片會自動放在程式碼同級目錄的 humanseg_output 目錄下,檔名稱跟原圖片的名稱相同,但是檔案格式是 png 。

我在 imgs 目錄下放了5張圖片,為了便於展示,我將他們放在一起截圖:

原圖片

執行程式後,在 humanseg_output 目錄下生成了5張圖片,同樣的,我將他們放在一起截圖:

摳圖圖片

我們可以看到程式將每張圖片中的人物(可以是一個,也可以是多個)識別出來,並且摳出來成圖,背景是白色。雖然有些細節處還有些許瑕疵,但是看起來還算不錯。

補充:可能遇到的坑

1. 報錯RuntimeError: Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES as cuda_device_id.

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

set CUDA_VISIBLE_DEVICES=0

總結

本文基於 paddlepaddle 平臺,使用簡單的五行程式碼實現了批次摳圖,不僅解放了好多人的雙手和雙眼,而且為某些程式猿/程式媛的裝逼工具箱提供了一件寶器。下次如果碰到某個女生或者閨蜜在為摳圖發愁,別忘了掏出神器,贏得芳心哦!

到此這篇關於如何使用五行Python程式碼輕鬆實現批次摳圖的文章就介紹到這了,更多相關Python批次摳圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com