做了一个简单的实验,利用modelscope的人像抠图模型对视频流进行抠像并更换背景。


文章目录

  • 1 视频人像抠图(Video human matting)
  • 2 更换背景

1 视频人像抠图(Video human matting)

地址链接:视频人像抠图模型-通用领域
该款模型是window下少数可以使用的,就自己试着玩一下。
视频人像抠图(Video human matting)是计算机视觉的经典任务,输入一个视频(图像序列),得到对应视频中人像的alpha图,其中alpha与分割mask不同,mask将视频分为前景与背景,取值只有0和1,而alpha的取值范围是0到1之间,返回数值代表透明度。VHM模型处理1080P视频每帧计算量为10.6G,参数量只有6.3M。

核心代码:

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasksvideo_matting = pipeline(Tasks.video_human_matting, model='damo/cv_effnetv2_video-human-matting')
result_status = video_matting({'video_input_path':'https://modelscope.oss-cn-beijing.aliyuncs.com/test/videos/video_matting_test.mp4','output_path':'matting_out.mp4'})
result = result_status[OutputKeys.MASKS]
  • video_input_path 为输入视频的路径,示例代码为线上视频路径,可更改为本地视频路径
  • output_path 为输出视频的本地路径

正常情况下,输出路径会返回人像抠图的mask视频结果,算法result返回的是包含每帧narray格式结果的列表,同时打印字符串'matting process done'

所以这里result输出的都是半成品,如果需要背景更换就需要自己再编辑一下

2 更换背景

笔者自己改编成以下:


import cv2
#from PIL import Image
#from matplotlib import pyplot as plt
#base_image = Image.open('mask_backaround.jpg')#.convert('RGB')
#base_image.sizedef video_human_segmentation(video_path,out_path,result_msk,\back_pic = "mask_backaround.jpg"):'''video_path:视频链接URLout_path:导出之后的视频链接result_msk:图像mask 序列'''video_input = cv2.VideoCapture(video_path)fps = video_input.get(cv2.CAP_PROP_FPS)fourcc = cv2.VideoWriter_fourcc(*'mp4v')success, frame = video_input.read()h, w = frame.shape[:2]scale = 512 / max(h, w)video_save = cv2.VideoWriter(out_path, fourcc, fps, (w, h))# 背景图back_ori = cv2.imread(back_pic)n = 0while True:if frame is None:breakmask = result_msk[n]n += 1#print(n)# 人像从原图抠出来#mask = mask / 255.0frame[:,:,0] = frame[:,:,0] * mask[:,:,0]  # 有人像的地方有值frame[:,:,1] = frame[:,:,1] * mask[:,:,0]frame[:,:,2] = frame[:,:,2] * mask[:,:,0]# 背景图,把人像部分扣出去back = cv2.resize(back_ori,(w,h))back[:,:,0] = back[:,:,0] * (1 - mask[:,:,0])   # 有人像的地方 = 0back[:,:,1] = back[:,:,1] * (1 - mask[:,:,0])back[:,:,2] = back[:,:,2] * (1 - mask[:,:,0])# 图片加权合成com = cv2.add(back,frame)video_save.write(com)success, frame = video_input.read()video_input.release()video_save.release()return passvideo_path = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/videos/video_matting_test.mp4'
out_path = 'test_3.mp4'video_human_segmentation(video_path,out_path,result_msk,back_pic = "mask_backaround.jpg")

video_human_segmentation做了几件事情,cv2.VideoCapture读取视频流;读入背景图(固定的),在背景图中将人物位置抠出来;在原图把人物抠出来;然后背景图+原图抠图进行合成,最后写出到视频中。
大致效果:
原图:

背景图:

合成图:

视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)相关推荐

  1. 语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复(四)

    终于有时间更新语音识别系列了,之前的几篇: 语音识别系列︱用python进行音频解析(一) 语音识别系列︱paddlehub的开源语音识别模型测试(二) 语音识别系列︱paddlespeech的开源语 ...

  2. 【达摩院OpenVI】视频目标渐进式Transformer跟踪器ProContEXT

    论文&代码 论文链接:[arxiv] 代码&应用: 开源代码:[github code] 开源应用:[modelscope] 背景介绍 视频目标跟踪(Video Object Trac ...

  3. 音视频开发系列(14):将视频和音频同时推流到nginx服务器上

    上次分享了视频录制代码的封装,这次分享一下同时将视频和音频推流到服务器上,注意(这次分享的内容不包括音视频同步方面的),所以会出现音视频不同步的情 音视频同时发送的策略主要是:利用一个链表存储音视频帧 ...

  4. 达摩院python教程视频_Python400集大型视频,无偿分享,从正确方向学习python,全套python入门完整视频...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 本 ...

  5. 阿里达摩院python视频教学_阿里达摩院出品的758集的python教程,据说懂中文就能入门高清版...

    小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 为了吸取教训,小编一定要分享一下攻略,"怎样获得小编分享的教程 ...

  6. java mcu视频_如何利用MCU流畅的播放视频?

    Cortex-M7处理器的核心本质为微控制器,却拥有高达600MHz的主频,高密度的512KB TCM SRAM和16MB的高速SDRAM,超快的实时响应,超强处理性能赋予了RT1052视频编解码的能 ...

  7. 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战

    乾明 李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 刚刚,5G领域来了巨鳄玩家: 阿里巴巴,正式官宣进军5G,明确进一步加快技术研发,还要制定相关标准. 扛旗先锋,正是马云寄予厚望的达 ...

  8. 阿里AI解锁车场景:达摩院技术输出,天猫精灵进驻奔驰、奥迪和沃尔沃

    李根 发自 大山子  量子位 报道 | 公众号 QbitAI 阿里AI今日又解锁了新场景,首次进入车空间. 首批合作伙伴也来头不小:奔驰.奥迪和沃尔沃.今年6月开始,奔驰.沃尔沃相关的车中,就会集成阿 ...

  9. C# 视频监控系列(7):服务器端——封装API(下)(1)

    前言 写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<&l ...

最新文章

  1. Java程序员应该知道的10个Eclipse调试技巧
  2. .NET Core很酷,你不得不知
  3. 求2个数的最大公约数
  4. Java ObjectStreamClass lookup()方法与示例
  5. unity发布Android按钮灰色,Unity3d应用中的Android菜单按钮
  6. 软件项目成员的业绩考核
  7. 小孔怎么用_奶粉罐我再也不扔了,在盖子上打几个孔放床边,全家人都抢着用...
  8. unity可以直接转h5吗_瞎折腾:用Unity撸纯HTML5移动游戏/应用
  9. 线段树基础操作--单点or区间更新+查询
  10. SQL语句中exists/not exists的用法分析
  11. Installing third-party firmware on x3-55 letv (by quqi99)
  12. Tomcat发布项目时,浏览器地址栏图标的问题
  13. emu8086:汇编语言复制数组案例
  14. 光猫修改rms服务器地址大全,光猫服务器dns怎么设置教程
  15. Kaldi的关键词搜索(Keyword Search,KWS)
  16. 创新未来,走进元宇宙,创造不可思议的数字体验!
  17. 7-111 福到了 (15 分)(c语言)
  18. python爬取豆瓣电影信息
  19. 灾备系统与备用服务器区别,服务器灾备方案是什么
  20. OpenCV学习记录 三 (傅里叶逆变换原理及实现)

热门文章

  1. failed to push some refs to 'git@xxx.xxx.xxx.xxx:finger-shoot/shoot-admin.git'
  2. 招行数据岗笔试题- 信用卡推荐客户列表
  3. 怎么找到公众微信上的视频链接
  4. Hive练习-面试题
  5. 复旦情商课魅力女教师上课实录笔记
  6. 中国移动手机支付须走自主创新之路
  7. 网站劫持 网站(域名)被劫持怎么检测 遇到网站恶意跳转不要慌(干货)
  8. RRC连接、RL、RB、RAB的本质是什么?
  9. 单独聊一聊CTWing软硬交互
  10. 集团信息化“润物细无声”