PaddlePaddle : AI摳圖及圖片合成

u_d5610d79507e發表於2020-01-18

透過預訓練模型進行影像的自動摳圖及整合。

程式碼已經共享在AIStudio上,連結:

模型概述 DeepLabv3+ 是Google DeepLab語義分割系列網路的最新作,其前作有 DeepLabv1,DeepLabv2, DeepLabv3。在最新作中,作者透過encoder-decoder進行多尺度資訊的融合,同時保留了原來的空洞卷積和ASSP層, 其骨幹網路使用了Xception模型,提高了語義分割的健壯性和執行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance。該PaddleHub Module使用百度自建資料集進行訓練,可用於人像分割,支援任意大小的圖片輸入。

命令列預測示例 $ hub run deeplabv3p_xception65_humanseg --input_path "/PATH/TO/IMAGE" $ hub run deeplabv3p_xception65_humanseg --input_file test.txt test.txt 存放待分割圖片的存放路徑

API def segmentation(data) 用於人像分割

引數

data:dict型別,key為image,str型別;value為待分割的圖片路徑,list型別。 output_dir:生成圖片的儲存路徑,預設為 humanseg_output

返回

result:list型別,每個元素為對應輸入圖片的預測結果。預測結果為dict型別,有以下欄位:

origin 原輸入圖片路徑 processed 分割圖片的路徑。

In[1]

cd work

/home/aistudio/work

先定義摳圖的函式,透過呼叫影像分割模型摳圖

In[7]

def body_seg_fore(imgname):

    module = hub.Module(name="deeplabv3p_xception65_humanseg")

    test_img_path = "./"+imgname+".jpg"

    # 預測結果展示

    img = mpimg.imread(test_img_path)

    plt.imshow(img)

    plt.axis('off')

    plt.show()

    # set input dict

    input_dict = {"image": [test_img_path]}


    # execute predict and print the result

    results = module.segmentation(data=input_dict)

    for result in results:

        print(result)

    test_img_path = "./humanseg_output/"+imgname+".png"

    img = mpimg.imread(test_img_path)

    plt.imshow(img)

    plt.axis('off')

    plt.show()

    return test_img_path

In[8]

body_seg_fore('body2')

[2020-01-10 06:39:53,705] [    INFO] - Installing deeplabv3p_xception65_humanseg module

2020-01-10 06:39:53,705-INFO: Installing deeplabv3p_xception65_humanseg module

[2020-01-10 06:39:53,753] [    INFO] - Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

2020-01-10 06:39:53,753-INFO: Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

PaddlePaddle : AI摳圖及圖片合成

[2020-01-10 06:39:54,539] [    INFO] - 0 pretrained paramaters loaded by PaddleHub

2020-01-10 06:39:54,539-INFO: 0 pretrained paramaters loaded by PaddleHub

{'origin': './body2.jpg', 'processed': 'humanseg_output/body2.png'}

PaddlePaddle : AI摳圖及圖片合成

'./humanseg_output/body2.png'

定義圖片合成函式。

In[12]

#圖片整合

#foreimage:前景照片,baseimage:景區照片,outputimage:資料結果,rate:前景照片縮放比例

def combine_image(foreimage,baseimage,outputimage,rate):

    from PIL import Image

    base_img = Image.open(baseimage)

    BL, BH = base_img.size

    #讀取要貼上的圖片 RGBA模式   

    #當需要將一張有透明部分的圖片貼上到一張底片上時,如果用Python處理,可能會用到PIL,

    #但是PIL中 有說明,在貼上RGBA模式的圖片是,alpha通道不會被帖上,也就是不會有透明的效果,

    #當然也給出瞭解決方法,就是貼上的時候,將RGBA的的alpha通道提取出來做為mask傳入。

    fore_image = Image.open(foreimage)

    L, H = fore_image.size

    #縮放

    fore_image = fore_image.resize((int(L * rate), int(H * rate)))

    L, H = fore_image.size

    #分離通道   

    r,g,b,a = fore_image.split()    #貼上


    box=(int(BL/2-L/2), BH-H, int(BL/2+L/2) ,BH)


    base_img.paste(fore_image,box,mask = a)

    base_img.save(outputimage)  # 儲存圖片


#輸出程式

def show_image(originimage,baseimage,outputimage,rate):

    segname=body_seg_fore(originimage)

    combine_image(segname,baseimage,outputimage,rate)


    img = mpimg.imread(outputimage)

    plt.imshow(img)

    plt.axis('off')

    plt.show()

    return test_img_path

結果展示:

In[14]

show_image('body2','./desert.jpg','body2_desert.jpg',2)

[2020-01-10 06:42:43,724] [    INFO] - Installing deeplabv3p_xception65_humanseg module

2020-01-10 06:42:43,724-INFO: Installing deeplabv3p_xception65_humanseg module

[2020-01-10 06:42:43,746] [    INFO] - Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

2020-01-10 06:42:43,746-INFO: Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

PaddlePaddle : AI摳圖及圖片合成

[2020-01-10 06:42:44,629] [    INFO] - 0 pretrained paramaters loaded by PaddleHub

2020-01-10 06:42:44,629-INFO: 0 pretrained paramaters loaded by PaddleHub

{'origin': './body2.jpg', 'processed': 'humanseg_output/body2.png'}

PaddlePaddle : AI摳圖及圖片合成

PaddlePaddle : AI摳圖及圖片合成

'./humanseg_output/body2.png'

In[18]

show_image('body1','./desert.jpg','body2_desert.jpg',0.3)

[2020-01-10 06:44:26,397] [    INFO] - Installing deeplabv3p_xception65_humanseg module

2020-01-10 06:44:26,397-INFO: Installing deeplabv3p_xception65_humanseg module

[2020-01-10 06:44:26,423] [    INFO] - Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

2020-01-10 06:44:26,423-INFO: Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg

PaddlePaddle : AI摳圖及圖片合成

[2020-01-10 06:44:27,592] [    INFO] - 0 pretrained paramaters loaded by PaddleHub

2020-01-10 06:44:27,592-INFO: 0 pretrained paramaters loaded by PaddleHub

{'origin': './body1.jpg', 'processed': 'humanseg_output/body1.png'}

PaddlePaddle : AI摳圖及圖片合成

PaddlePaddle : AI摳圖及圖片合成

'./humanseg_output/body2.png'


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69922494/viewspace-2673934/,如需轉載,請註明出處,否則將追究法律責任。

相關文章