自媒体影视后期数字助理3--绿幕分割中间件设计

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为SDR与HDR中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。

场景说明


为什么需要绿幕分割

绿幕的主要作用抠像,所以背景色和被摄物体的颜色要区分开来。绿幕是用来抠像的,也就是说在后期处理的时候要进行抠像合成。所以背景色和被摄物体的颜色要区分开来。选中一个颜色进行抠像,在产业领域往往被称为ChromaKey或者色度抠像。

fixed-xl@2x.jpg

纯色键可以使用任何颜色,因为绿色出现在人身上的概率较低,而且摄影机传感器对于绿色的敏感度最高能够节省不少的灯光费用,所以绿色使用的最为广泛。


这个人工智能视觉能力命名是个大乌龙

其实阿里云人工智能视觉生产中的绿幕分割能力是一个亮度键生成器。命名确实没有错,但是描述让人摸不着头脑。


基本概念

色键

色键(英语:Chroma key),又称色彩嵌空,是一种去背合成技术。Chroma为纯色之意,Key则是抽离颜色之意,把被拍摄的人物或物体放置于绿幕的前面,并进行去背后,将其替换成其他的背景。此技术在电影、电视剧及游戏制作中被大量使用,色键也是虚拟摄影棚(Virtual studio)与视觉效果(Visual effects)当中的一个重要环节。

color-fidelity-xl.jpg

亮度键

亮度键控(Luma key),简单来说就是根据亮度把部分视频图像抠出(即 抠像 的功能。亮度键控可设置为“亮部抠出”“暗部抠出”等。它的本质就是“抠”和“填”。 “抠”就是利用前景物体轮廓作为遮挡控制填平,将背景画面沿该轮廓线抠出,使背景变成黑色;“填”就是将所要叠加的视频信号填到被抠掉的无图像区域(也可以在两层中插入需合成的部分),最终生成前景物体与叠加背景相合成的图像。

亮度键控是利用键源视频信号中的亮度成分来产生键信号,由于键源视频信号的来源不同,它又可以分为内键和外键两种。它要求键源图像要有较高的亮度反差,即键源中作前景的图像部分要亮,其余部分要暗(黑),要形成明显的黑白反差。亮度键又称黑白键。

现代的键控器能够支持黑白之间的灰色,表现为透明度。

色键与亮度键对比

亮度键配合现代键控器能够较好实现透明效果,并且边缘清晰。但需要输入一路原始信号和亮度键信号才能实现抠像。

色键则只需要输入绿幕一路信号即可使用,但边缘容易收到影响,抠像时需要进行色彩溢出矫正否则人物会发绿。高切、低切、边缘融合需要调整合适的参数才能获得较好的边缘。


传统方式

 后期制作软件打关键帧的方式手动跟踪被抠图对象获得亮度蒙版,或利用本地人工智能能力进行人物追踪抠像。


云服务优势

不改变现有工作流的前提下,快速生成亮度键文件,结合其他中间件可实现延时直播。或者批量处理来自媒体资产管理系统的绿幕文件。


准备工作

绿幕 -- 平直而远大

微信图片_20191028112849.png

绿幕要平整,拍摄主体要远离绿幕,尽量保持2m以上的距离。为了获得较大的视场,需要较大的绿幕。

打光 -- 分别给光

osogoo120613533962380.jpg

打光之前,被拍摄主体先入镜,打好灯光之后。在开始给绿幕打光。人物尽量不要有暗面。背景需要均匀。使用示波器检查背景40%亮度,确保人物不进画面时绿幕的示波器器保持平直。


白平衡与色调 -- 抠像魔术

Datacolor-Spyder-Cube_1120x572.jpg

立方蜘蛛

Datacolor-SpyderCheckr24-front-back_1120x572.jpg右侧为灰卡


使用立方蜘蛛或灰卡进行手动白平衡调整,并且色调也需要正确设置,BMD的摄影机往往需要将int值设置成50。


光圈 -- 景深充分的大光圈

保证人物前后活动的景深超过30厘米,人物远离背景的情况下,尽量使用大光圈。可以让前后景有效分离,并且背景失焦后绿幕上的褶皱和不平整会被减弱。


快门 -- 非一般的动态模糊

通常快门设置为帧率的两倍分之一秒,在摄影机上设置快门角度为180度。为保证快速挥动的人物手臂或其他位置能干净地与绿幕分离,快门角度可设置为90度,或者帧率四倍分之一秒。


录制规格 -- 120MB限制

为保证画质,1080p60画面需要保证8Mbps以上的码率,也就是每段视频的长度不能超过2分钟。


如何搭建影视后期数字助理的中间件

函数计算

选择指定存储桶作为绿幕分割API的触发器,一旦出现新文件上传并完成哈希校验后立即出发该函数容器。

该函数容器调用阿里云人工智能->视觉生产->绿幕分割能力的API。以下引入阿里云API调试中心的Python实例代码。

# -*- coding: utf-8 -*-# This file is auto-generated, don't edit it. Thanks.importsysfromtypingimportListfromalibabacloud_videoseg20200320.clientimportClientasvideoseg20200320Clientfromalibabacloud_tea_openapiimportmodelsasopen_api_modelsfromalibabacloud_videoseg20200320importmodelsasvideoseg_20200320_modelsfromalibabacloud_tea_utilimportmodelsasutil_modelsfromalibabacloud_tea_util.clientimportClientasUtilClientclassSample:
def__init__(self):
pass@staticmethoddefcreate_client(
access_key_id: str,
access_key_secret: str,
    ) ->videoseg20200320Client:
"""        使用AK&SK初始化账号Client        @param access_key_id:        @param access_key_secret:        @return: Client        @throws Exception        """config=open_api_models.Config(
# 必填,您的 AccessKey ID,access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,access_key_secret=access_key_secret        )
# 访问的域名config.endpoint=f'videoseg.cn-shanghai.aliyuncs.com'returnvideoseg20200320Client(config)
@staticmethoddefmain(
args: List[str],
    ) ->None:
# 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret')
segment_green_screen_video_request=videoseg_20200320_models.SegmentGreenScreenVideoRequest()
runtime=util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值client.segment_green_screen_video_with_options(segment_green_screen_video_request, runtime)
exceptExceptionaserror:
# 如有需要,请打印 errorUtilClient.assert_as_string(error.message)
@staticmethodasyncdefmain_async(
args: List[str],
    ) ->None:
# 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret')
segment_green_screen_video_request=videoseg_20200320_models.SegmentGreenScreenVideoRequest()
runtime=util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值awaitclient.segment_green_screen_video_with_options_async(segment_green_screen_video_request, runtime)
exceptExceptionaserror:
# 如有需要,请打印 errorUtilClient.assert_as_string(error.message)
if__name__=='__main__':
Sample.main(sys.argv[1:])

根据该项目特点,可以考虑使用TS或Python较为适合。由于转换过程需要时间,也需要单独编写异步状态部分。


工作流

为实现流程整合,将该部分AI能力以函数计算形式封装为中间件,该函数可以被Serverless工作流掉用,当需要将该中间件加入到工作流时,应当取消OSS触发器。

在Serverless工作流的任务步骤中,异步调用函数计算可以更灵活地适应当前任务场景,避免限流等错误,同时可以简化流程中的错误处理和重试逻辑。

工作流中可以集成其他工作流,也可以整合消息服务,以便与现有的本地或云端的媒体资产管理系统结合。

返回的文件仅能保存30分钟,实现异步消息处理后应立即保存到OSS的结果桶当中,并触发其他函数计算容器或其他工作流。

OSS

在阿里云OSS上搭建媒体资产存储系统,与本地NAS进行同步。需要对待上传文件进行哈希校验,并使用断点续传能力。

应当选择华东2的OSS作为该项目存储桶,原因文末解释。

绿幕分割

绿幕视频分割结果.png

该图为阿里云官方示例截图,可看到该结果为亮度键,并含有透明度的灰色过渡,并非黑白遮罩。


影视后期特效制作:绿幕分割算法能力可以提供一键替换特效的能力,将前期制作时用绿幕做背景,然后在后期将背景替换成特效。创意短视频制作:为制作更吸引人的、更有创意的短视频,在短视频制作前期也采用绿幕背景。后期编辑时,使用绿幕分割算法能力,替换成特效视频,帮助制作更有创意的视频作品。

精准分割:可对人体边缘进行精准分割。稳定边缘:每一帧的分割边缘持续稳定。快速低延迟:可快速实现分割,延迟低。

以上内容摘自阿里云的技术文档,一大堆语言,没说中要点。

“为绿幕拍摄的视频文件生成亮度键”才是这个能力的正确描述。


亮度抠像环境部署

原始画面输出

采用绿幕拍摄的原始文件输出给OBS或硬件色键器

分割后亮度键输出

亮度键文件需要与原始文件进行时间码和播放控制同步

亮度抠像硬件需求

atem-1me-constellation-hd-xl.jpg

测试可使用OBS软件,一般生产环境可采用ATEM Mini等设备进行两路信号的输入,在亮度键中配置即可。


写在最后

我会陆续针对在产业场景中的许多应用分享如何利用阿里云的AI能力结合函数计算进行中间件的开发心得与实战总结。不会公布源代码,但从基本原理到架构方式都会做较为细致的介绍。

适合有一定行业开发经验的开发者阅读,也非常欢迎具体行业的从业者与我交流,无论是否从事开发。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
存储 编解码 人工智能
自媒体影视后期数字助理2--SDR与HDR中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为SDR与HDR中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
400 3
自媒体影视后期数字助理2--SDR与HDR中间件设计
|
存储 编解码 人工智能
自媒体影视后期数字助理--视频调色中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为调色中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云人工智能视觉生产的API细节进行了分析。
377 0
自媒体影视后期数字助理--视频调色中间件设计
|
SQL 消息中间件 中间件
分布式事务中间件Seata的设计原理
因为待过的几家公司,用的都是微服务架构,但是在解决分布式事务的问题上都不太优雅,所以我也在一直关注 Seata 的发展,今天就简要说说它的一些设计上的原理,后续我将会对它的各个模块进行深入源码分析,感兴趣的可以持续关注我的公众号或者博客,不要跟丢。
287 4
分布式事务中间件Seata的设计原理
|
SQL 中间件 调度
分布式事务解决方案,中间件 Seata 的设计原理详解
分布式事务解决方案,中间件 Seata 的设计原理详解
|
数据库 微服务 SQL
开发者说 | 分布式事务中间件 Seata 的设计原理
导读 微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时也不会影响其它服务的正常运行。
5097 3
|
算法 关系型数据库 MySQL
最新天猫面试题(含总结):线程池+并发编程+分布式设计+中间件
一面: HashMap实现原理,ConcurrentHashMap实现原理 红黑树,为什么允许局部不平衡 TCP,UDP区别,为什么可靠和不可靠 一次HTTP请求的全过程,包括域名解析、定位主机等 TCP三次握手 MySQL事务是什么?四大特性,四大隔离级别 Concurr...
1775 5
|
中间件 应用服务中间件 数据库
设计一个中间件的访问日志组件
对任何一个系统,一个强大的日志记录功能是相当重要且必要的,根据日志的记录可以及时掌握系统运行时的健康状态及故障定位。然而作为web容器存在另外一种日志——访问日志。
1293 7
|
网络协议 中间件 应用服务中间件
《分布式系统:概念与设计》一2.3.3 相关的中间件解决方案
本节书摘来华章计算机《分布式系统:概念与设计》一书中的第2章 ,第2.3节,(英) George Coulouris Jean DollimoreTim Kindberg Gordon Blair 著 金蓓弘 马应龙 等译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1362 1
|
4月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
85 0