Python装逼手册——五行编码完成大批量抠图,附

摘要:你是不是以前想将某张相片中的角色抠出去,随后拼凑到别的照片上来,进而能够即便你一直在天崖海角,因为我能够到此一游?...

你是不是以前想将某张相片中的角色抠出去,随后拼凑到别的照片上来,进而能够即便你一直在天崖海角,因为我能够到此一游?

技术专业点的人应用 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 darwinType "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:1I0506 21:47:48.659137 2923565952 parallel_executor.cc:307] Inplace strategy is enabled, when build_strategy.enable_inplace = TrueI0506 21:47:48.659595 2923565952 parallel_executor.cc:375] Garbage collection strategy is enabled, when FLAGS_eager_delete_tensor_gb = 0Your 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 hubhuseg = 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幅图片,一样的,我将她们放到一起截屏:

大家能看到程序将每一张照片中的角色(能够是一个,还可以是好几个)鉴别出去,而且抠出去成图,情况是乳白色。尽管一些关键点处也有一丝缺陷,可是看上去算是非常好。

小结:

文中根据 paddlepaddle 服务平台,应用简易的五行编码完成了大批量抠图,不但释放了许多人的两手和眼睛,并且为一些程序员/程序媛的装逼专用工具箱出示了一件宝器。下一次假如遇到某一女孩或是好闺蜜在为抠图犯愁,别忘记取出武器,获得芳心哦!

在视頻写作全过程中,有时候也会碰到人像图片抠图的要求,最一一样的作法是应用PR、AE等专用工具将视頻中的每一帧图象手动式抠图。那么繁杂的流程在工科男眼前真是不是可存有的,那麼有哪些简易的方式能迅速抠图吗?

自然有啦,接下去给大伙儿详细介绍怎样应用PaddleHub一键视頻人像图片抠图。

实际效果展现

最先展现一些抠图结束的小片断,上一秒我都在家里里的小屋子,下一秒我也出現在了土尔其。

那顺带去看看看埃菲尔铁塔呗。

到洛杉矶市的海滩散散心。

到上海市快乐谷锻练锻练人体。

最终到日本东京的观景平台台子上看个落日

视頻实际效果不是是很真实呢,一天遨游全球并不是梦嘿嘿哈……

实际上这种人像图片素材图片全是在屋子里拍攝,随后应用PaddleHub专用工具库一键抠图,最终应用PR开展中后期写作的,接下去详细介绍下怎样实际操作吧。

它是怎样完成的?

视頻人像图片抠图紧跟面是相近的,要是把视頻的每一帧图象所带有的人像图片获取出去,随后再加情况再次生成视頻便可以啦。大致的流程了解了,那接下去刚开始实践活动吧。

哦正确了,还得有一段带有人像图片的素材图片,小伙子伴们能够自身拍攝或是从互联网收集。

01

安裝必需建立

必须安裝的是飞桨架构和PaddleHub专用工具库,安裝流程能够参照别再用PS了,我用5行Python编码就完成了大批量抠图。或是立即阅读文章全文进到飞桨官方网站查询安裝流程。

02

人像图片抠图制作素材图片

因为现阶段PaddleHub人像图片抠图实体模型API的键入是单幅图像的相对路径,故必须先将视頻的每一帧图象分离出来储存后才可以开展抠图。

自然还可以根据改动实体模型的源代码,将API的键入改动成图象键入,那样就省掉了视頻分离出来储存的流程,实际的源代码能够参照:

https://aistudio.baidu.com/aistudio/projectdetail/370260,

这儿关键详细介绍前一种方式。

2.1 导进全部有关控制模块

import cv2import osimport numpy as npfrom PIL import Imageimport paddlehub as hub

2.2 将视頻内图象分离出来储存

def CutVideo2Image(video_path, img_path):cap = cv2.VideoCapture(video_path) index = 0 while(True): ret,frame = cap.read() if ret: cv2.imwrite(img_path + '%d.jpg' % index, frame) index += 1 else: break cap.release() print('Video cut finish, all %d frame' % index)

该流程可能把每一帧图象储存到当地文件目录。

2.3 导进实体模型开展人像图片抠图

def GetHumanSeg(frame_path, out_path):# 载入实体模型 module = hub.Module(name="deeplabv3p_xception65_humanseg") # 配备 test_img_path = [os.path.join(frame_path, fname) for fname in os.listdir(in_path)] input_dict = {"image": test_img_path} results = module.segmentation(data=input_dict, output_dir=out_path) # Tips:应用GPU加快需安裝paddlepaddle-gpu # results = module.segmentation(data=input_dict, use_gpu = gpu, batch_size = 10,output_dir=out_path)

该流程可能把人像图片获取并储存为png至当地

2.4 转化成绿幕并和人像生成

为何要应用绿幕呢,关键是以便事后在视頻中后期手机软件里便捷应用素材图片。自然了解Python的同学们还可以立即应用一些Python控制模块开展视頻中后期。可是在这里里還是强烈推荐应用PR、AE这种技术专业手机软件,能够便捷地对素材图片开展放缩、变速、部位解决、及其加上动画特效等实际操作。更关键的是,能够对素材图片开展调色,与新的情况更强地结合。

def init_canvas(width, height, color=(255, 255, 255)):canvas = np.ones((height, width, 3), dtype="uint8") canvas[:] = color return canvas# 转化成绿幕def GetGreenScreen(size, out_path): canvas = init_canvas(size[0], size[1], color=(0, 255, 0)) cv2.imwrite(out_path, canvas)def BlendImg(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) # 照片加权生成 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(output_path)def BlendHumanImg(in_path, screen_path, out_path): humanseg_png = [filename for filename in os.listdir(in_path)] for i, img in enumerate(humanseg_png): img_path = os.path.join(in_path + '%d.png' % (i)) output_path_img = out_path + '%d.png' % i BlendImg(img_path, screen_path, output_path_img)

该流程进行后可能获得相近那样的绿幕照片:

2.5 视頻生成

def CompVideo(in_path, out_path, size):fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(out_path,fourcc, 30.0, size) files = os.listdir(in_path) for i in range(len(files)): img = cv2.imread(in_path + '%d.png' % i) out.write(img) # 储存帧 out.release()

该流程进行后就可以获得相近下面的图的身体绿幕素材图片

2.6 主程序

# ConfigVideo_Path = 'video/0.mp4'Video_Size = (1920, 1080)FrameCut_Path = 'video/frame/'FrameSeg_Path = 'video/frame_seg/'FrameCom_Path = 'video/frame_com/'GreenScreen_Path = 'video/green.jpg'ComOut_Path = 'output.mp4'if __name__ == "__main__":# 第一步:视頻->图象 if not os.path.exists(FrameCut_Path): os.mkdir(FrameCut_Path) CutVideo2Image(Video_Path, FrameCut_Path) # 第二步:抠图 if not os.path.exists(FrameSeg_Path): os.mkdir(FrameSeg_Path) GetHumanSeg(FrameCut_Path, FrameSeg_Path) # 第三步:转化成绿幕并生成 if not os.path.exists(GreenScreen_Path): GetGreenScreen(Video_Size, GreenScreen_Path) if not os.path.exists(FrameCom_Path): os.mkdir(FrameCom_Path) BlendHumanImg(FrameSeg_Path, GreenScreen_Path, FrameCom_Path) # 第四步:生成视頻 if not os.path.exists(ComOut_Path): CompVideo(FrameCom_Path, ComOut_Path, Video_Size)

OK,绿幕素材图片早已经制作结束,下一步便可以导进到中后期手机软件内开展写作啦,这儿以PR为例子。

03

中后期写作

将绿幕素材图片和情况素材图片导进PR,在绿幕素材图片上应用`非常键`实际效果,并将关键色调选择为绿幕的色调,就可以轻轻松松除去绿幕色调。

再往后面的各种各样骚实际操作全看诸位小伙子伴的想像力啦!

这儿另附我的著作:[AI人像图片抠图]|百度搜索PaddleHub抠图艺术创意赛[附实例教程、编码]:

https://www.bilibili.com/video/BV1cA411b7r2

现阶段存有的难题:

秀发、手指头等关键点一部分还必须进一步健全。身体姿势力度大造成图象帧模糊不清,会导致获取不成功。实体模型的API插口尚需再次丰富多彩。



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503