對于百度的Paddlepaddle深度學習框架的關注已經有一段時間,未來是希望能運用深度學習摳圖和合成技術為跨境電商提供有價值的服務,今天剛好可以用傻瓜化的方式來測試一下摳圖和合成的效果,對未來的生產應用,做一下技術可行性的探索。
最開始的圖片:
找到需要摳圖的圖片:
待摳圖人像
找到背景圖片:
背景圖片
圖片合成的最終效果:
合成效果
項目代碼地址:
https://aistudio.baidu.com/aistudio/projectdetail/370800
下面是執行的代碼和步驟:
1.先安裝相關的依賴包
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.上傳或拷貝需要摳圖的圖片和背景圖片放到對應的文件夾中,并通過代碼加載需要摳圖的圖片,進行展示。
# 待預測圖片
test_img_path = ["./girl.jpg"]
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread(test_img_path[0])
# 展示待預測圖片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
image.png
二、 加載預訓練模型
通過加載PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)實現一鍵摳圖
import paddlehub as hub
module = hub.Module(name="deeplabv3p_xception65_humanseg")
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/girl.png"
img = mpimg.imread(test_img_path)
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
三、圖像合成
將摳出的人物圖片合成在想要的背景圖片當中。
from PIL import Image
import numpy as np
def blend_images(fore_image, base_image):
"""
將摳出的人物圖像換背景
fore_image: 前景圖片,摳出的人物圖片
base_image: 背景圖片
"""
# 讀入圖片
base_image = Image.open(base_image).convert('RGB')
fore_image = Image.open(fore_image).resize(base_image.size)
# 圖片加權合成
scope_map = np.array(fore_image)[:,:,-1] / 255
scope_map = scope_map[:,:,np.newaxis]
scope_map = np.repeat(scope_map, repeats=3, axis=2)
res_image = np.multiply(scope_map, np.array(fore_image)[:,:,:3]) + np.multiply((1-scope_map), np.array(base_image))
#保存圖片
res_image = Image.fromarray(np.uint8(res_image))
res_image.save("blend_res_img2.jpg")
blend_images('./humanseg_output/girl.png', 'bg.jpg')
# 展示合成圖片
plt.figure(figsize=(10,10))
img = mpimg.imread("./blend_res_img.jpg")
plt.imshow(img)
plt.axis('off')
plt.show()
image.png
項目遇到的問題:
1.記載的模型對圖片進行了一定的限制,需要摳圖的圖片,只能是給他們定義好的 512 * 341 ,上傳了一個其他尺寸的時候,報錯了。 未來在真正運用上需要自己來定義這個尺寸。
2.模型目前只支持人像摳圖,未來需要自己訓練支持不同商品的模型,進行摳圖和識別。