(记录)PaddleHub创意赛:AI人像抠图及图像合成
文章目錄
- PaddleHub創(chuàng)意賽:AI人像摳圖及圖像合成
- 一、安裝環(huán)境(這里面有幾個坑)
- 二、接下來就``開始P圖
- 1. 引入包
- 2. 加載預訓練模型(挺厲害的不得不說)
- 3. 圖像合成
PaddleHub創(chuàng)意賽:AI人像摳圖及圖像合成
本項目根據(jù)DeepLabv3+模型一鍵摳圖示例,主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)和python圖像處理庫opencv、PIL等完成。在最新作中,作者通過encoder-decoder進行多尺度信息的融合,同時保留了原來的空洞卷積和ASSP層, 其骨干網(wǎng)絡(luò)使用了Xception模型,提高了語義分割的健壯性和運行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,該PaddleHub Module使用百度自建數(shù)據(jù)集進行訓練,可用于人像分割,支持任意大小的圖片輸入。在完成一鍵摳圖之后,通過圖像合成,實現(xiàn)扣圖比賽任務。
PaddleHub 是基于 PaddlePaddle 開發(fā)的預訓練模型管理工具,可以借助預訓練模型更便捷地開展遷移學習工作,目前的預訓練模型涵蓋了圖像分類、目標檢測、詞法分析、語義模型、情感分析、視頻分類、圖像生成、圖像分割、文本審核、關(guān)鍵點檢測等主流模型。
PaddleHub官網(wǎng):PaddleHub官網(wǎng)
PaddleHub項目地址:PaddleHub github
更多PaddleHub預訓練模型應用可見:教程合集課程
NOTE: 如果您在本地運行該項目示例,需要首先安裝PaddleHub。如果您在線運行,需要首先fork該項目示例。之后按照該示例操作即可。
一、安裝環(huán)境(這里面有幾個坑)
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple !hub install deeplabv3p_xception65_humanseg==1.0.0雖然說這樣就可以了,但是你會發(fā)現(xiàn),你打開本地運行環(huán)境以后會出錯???
以下為出錯的內(nèi)容
既然如此我們就進源碼看一下到底怎么回事
最主要就是這個東西出了問題,在Github上的issue里面說了,在最新版里面已經(jīng)解決,但其實在windows里面,仍然存在該類問題
然后分析代碼后我得知,原來在C盤當中,缺失了config.json文件,然后把這個放到這個根目錄的文件里面去.paddle/conf/config.json,如果沒有就自己建立一個
然后還有一個坑就是,虛擬環(huán)境里面運行可能會出錯,所以最好在Pycharm真實環(huán)境運行
二、接下來就``開始P圖
1. 引入包
# 測試圖片路徑和輸出路徑 test_path = 'image/test/' output_path = 'image/out/'# 待預測圖片 test_img_path = ["test.jpg"] test_img_path = [test_path + img for img in test_img_path] img = mpimg.imread(test_img_path[0]) # 展示待預測圖片 plt.figure(figsize=(10,10)) plt.imshow(img) plt.axis('off') plt.show()這是效果圖!!
2. 加載預訓練模型(挺厲害的不得不說)
通過加載PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)實現(xiàn)一鍵摳圖
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)# 預測結(jié)果展示 out_img_path = 'humanseg_output/' + os.path.basename(test_img_path[0]).split('.')[0] + '.png' img = mpimg.imread(out_img_path) plt.figure(figsize=(10,10)) plt.imshow(img) plt.axis('off') plt.show()測試結(jié)果還挺不錯的!!!但是在處理其他圖片還有瑕疵,比如手里拿了手機,可能會給你P調(diào)
3. 圖像合成
# 合成函數(shù) def blend_images(fore_image, base_image, output_path):"""將摳出的人物圖像換背景fore_image: 前景圖片,摳出的人物圖片base_image: 背景圖片"""# 讀入圖片base_image = Image.open(base_image).convert('RGB')fore_image = Image.open(fore_image).resize(base_image.size)# 圖片加權(quán)合成scope_map = np.array(fore_image)[:,:,-1] / 255scope_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(output_path)return res_imageoutput_path_img = output_path + 'blend_res_img.jpg'blend_images('humanseg_output/test.png', 'image/test/bg.jpg', output_path_img)# 展示合成圖片plt.figure(figsize=(10,10))img = mpimg.imread(output_path_img)plt.imshow(img) plt.axis('off') plt.show()結(jié)束了,就當一次娛樂!!!
總結(jié)
以上是生活随笔為你收集整理的(记录)PaddleHub创意赛:AI人像抠图及图像合成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIKP20N60CT INFINEON
- 下一篇: 如何组建和激励工程师团队