[0001]技术领域
[0002]本发明涉及计算机技术领域,尤其涉及一种异地多人实时云合影的方法和系统。
[0003]背景技术
[0004]现如今,随着电子技术的快速发展。拍合照的方式一般都需要参与者在现场,根据排位依次站好位置后,在摄影师的引导下再进行拍摄,后期再进行修图处理。如果部分人因其它情况无法到场参与,则会遗憾错失与大家的合影,当然也有可能通过后期P图处理加入。此种拍合照拍摄的方式不灵活,不能满足用户的个性化需求。特别是在当下的环境中,各种活动一般都在线上进行,无法外出参与,导致云合影的需求也越来越旺盛。
[0005]目前市面上也有云合影方式,但基本上都是要求每个人自拍一张静态图像,上传到服务器中进行拼接融合。例如疫情期间,学校的云毕业照的实现方式。这些方式都有一个共同的特点,即用户选择一个特定的位置,然后通过自拍后上传自己照片,后台进行缩放与背景融合。这个合成过程中用户是无法看到的,用户只能看到最终的效果。如果用户觉得效果不好,只能找好角度、做好表情后重新的拍摄再重新上传。在这过程中,每个人都是自己拍自己的图片,全程没有交流,也没有摄影师的指引,缺少了拍摄集体合影的热闹氛围。
[0006]发明内容
[0007]本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明公开了一种异地多人实时云合影的方法,基于人像分割与图像融合技术,将图像数据采用RTMP协议编码推流至流媒体服务器,另从所述流媒体服务器拉流各路客户端的实时视频流解码已经进行人像分割后进行图像融合处理得到合照的图像数据,对该数据进行编码推流客户端对应拉取视频,将所述异地多人实时云合影的方法包括如下步骤:
[0008]步骤1,在接收到用户提交的合影请求时,实时云合影平台建立合影任务,所述合影任务为创建一单独的房间号避免同一时刻存在多个合影任务存在冲突,其中,所述实时云合影平台的服务器下发每个房间内参与合影的用户id以及视频推流地址以及合影后的流地址;
[0009]步骤2,用户的客户端通过视频数据采集装置采集实时图像数据,所述客户端在采集到实时图像数据后,采用H264或者H265编码方式进行编码后再采用流媒体协议对编码后的视频数据发送,根据分配的房间号以及与后端进行通信后,将采集的视频数据编码处理后按照指定的流地址,采用RTMP协议推流至流媒体服务器上;
[0010]步骤3,对客户端推送的实时视频流,基于ffmpeg进行拉取以及解码成正常的视频数据,然后调用人像分割算法进行实时抠图,同一房间内会存在多个客户端推送的视频流,在获取到图像的mask数据后,则进行多路人像的融合;
[0011]步骤4,通过每个用户的优先级,每个用户设置的参与合照的人数,人的缩放比例参数,来进行在背景中计算合照的初始区域位置,然后按照排位策略将所述步骤3中扣好的人像数据在指定背景上进行融合;
[0012]步骤5,由于已获取所述实时云合影平台的后端下发的参与合照的用户信息、房间信息以及融合后的推理地址,针对融合好的图像数据,即实时合照图片,采用与客户端相同的方案需要进行视频编码压缩后按照指定的流地址,使用RTMP协议推流至流媒体服务器上,客户端拉取该视频流地址,即可实时看到融合后的合影图像。
[0013]更进一步地,所述客户端为window PC设备,所述视频数据采集装置为采集实时图像数据的USB摄像头。
[0014]更进一步地,所述实时抠图进一步包括:为了提升人像抠图的效果,基于Mobilenet-v3或者Resnet50深度学习算法设计出人像抠图matting算法,并利用TensorRT推理引擎部署所述人像抠图matting算法。
[0015]更进一步地,所述步骤4进一步包括:首先由客户端将相关用户信息告知所述实时云合影平台的后端,所述后端再下发给服务器说明共有几个用户参与合照,每个用户的合照人数是多少,然后计算每个用户在背景中合照的区域,以及根据可调整的缩放比例系数,以及自动裁剪超出背景合照区域边界的人物区域,若判断多个用户的视频数据采集装置具有不同的相机环境,则通过通知后台管理平台人工去动态更新相应的系数,以达到一个相对协调、自然的画面,减少突兀;针对多路视频流的合照排位逻辑,按从中间往两边排的逻辑,且左边优先于右边先排位置,无论视频路数是奇数还是偶数,都是居中放置。
[0016]更进一步地,对实时采集的图像加入了卡尔曼跟踪,减少人形框的抖动以减缓由于人像抠图人物来回走动导致的画面抖动,通过当前帧分割的最小矩形框与上一帧跟踪框的iou进行比较,以及两个框的横向宽度比,当不超过一定系数时,则使用上一帧的框,作为当前帧的人像框,画面会减少一定的抖动。
[0017]更进一步地,所述步骤4中的计算排位处理方式包括如下步骤:
[0018]步骤401,计算用户画面在背景区域的宽度,其中,通过后端指定的背景图像的宽长bg_width,然后乘以一个默认比例系数group_photo_ratio,最后再乘以当前用户合照人数user_camera_num占参与合照的总人数total_camera_num的比例,得出用户画面在背景区域的所占的宽度user_group_photo_w,所述user_group_photo_w的计算公式为:
[0019]user_group_photo_w=bg_width*group_photo_ratio*(user_camera_num/total_camera_num);
[0020]步骤402,用户相机画面image按统一比例缩放,超出user_group_photo_w则裁剪掉,当相机画面人物比例在背景区域过大过小时,所诉实时云合影平台可动态调整人物缩放比例scale,使人物达到协调,当用户相机画面超过了相机宽度user_group_photo_w,则会重新计算裁剪的位置,crop_x表示的是裁剪相机画面左上角x坐标,crop_y表示的是裁剪相机画面左上角y坐标,crop_width代表的是裁剪相机画面的宽度,crop_height表示的裁剪相机画面的高度,则用户相机画面image表示为:
[0021]image=resize(image,scale)
[0022]image=crop(image,crop_x,crop_y,crop_width,crop_height);
[0023]步骤403,通过参加合照用户的相机总宽度,求出每个相机画面在背景区域的起始点坐标locate_x和locate_y,使融合后的总体画面保持居中以得到用户画面的排放位置,其中,所述起始点坐标locate_x和locate_y表示为:
[0024]locate_x=total_camera_width-user_group_photo_w
[0025]locate_y=bg_height-distance_from_bottom-height;
[0026]步骤404,通过图像像素加权的方式,将原图与背景合并在一起。
[0027]bg_b=src_b*cls+(1-cls)*bg_b
[0028]bg_g=src_g*cls+(1-cls)*bg_g
[0029]bg_r=src_r*cls+(1-cls)*bg_r
[0030]其中,src为原图像,cls为AI算法分割得到概率图,bg为背景图像。
[0031]本发明还公开了一种异地多人实时云合影的系统,基于人像分割与图像融合技术,将图像数据采用RTMP协议编码推流至流媒体服务器,另从所述流媒体服务器拉流各路客户端的实时视频流解码已经进行人像分割后进行图像融合处理得到合照的图像数据,对该数据进行编码推流客户端对应拉取视频,将所述异地多人实时云合影的系统包括如下模块:
[0032]连接建立模块,在接收到用户提交的合影请求时,实时云合影平台建立合影任务,所述合影任务为创建一单独的房间号避免同一时刻存在多个合影任务存在冲突,其中,所述实时云合影平台的服务器下发每个房间内参与合影的用户id以及视频推流地址以及合影后的流地址;
[0033]图像采集及上传模块,用户的客户端通过视频数据采集装置采集实时图像数据,所述客户端在采集到实时图像数据后,采用H264或者H265编码方式进行编码后再采用流媒体协议对编码后的视频数据发送,根据分配的房间号以及与后端进行通信后,将采集的视频数据编码处理后按照指定的流地址,采用RTMP协议推流至流媒体服务器上;
[0034]图像实时分割模块,对客户端推送的实时视频流,基于ffmpeg进行拉取以及解码成正常的视频数据,然后调用人像分割算法进行实时抠图,同一房间内会存在多个客户端推送的视频流,在获取到图像的mask数据后,则进行多路人像的融合;
[0035]图像实时融合模块,通过每个用户的优先级,每个用户设置的参与合照的人数,人的缩放比例参数,来进行在背景中计算合照的初始区域位置,然后按照排位策略将扣好的人像数据在指定背景上进行融合;
[0036]图像下发模块,由于已获取所述实时云合影平台的后端下发的参与合照的用户信息、房间信息以及融合后的推理地址,针对融合好的图像数据,即实时合照图片,采用与客户端相同的方案需要进行视频编码压缩后按照指定的流地址,使用RTMP协议推流至流媒体服务器上,客户端拉取该视频流地址,即可实时看到融合后的合影图像。
[0037]更进一步地,所述客户端为window PC设备,所述视频数据采集装置为采集实时图像数据的USB摄像头。
[0038]更进一步地,所述实时抠图进一步包括:为了提升人像抠图的效果,基于Mobilenet-v3或者Resnet50深度学习算法设计出人像抠图matting算法,并利用TensorRT推理引擎部署所述人像抠图matting算法。
[0039]更进一步地,所述图像实时分割模块进一步包括:首先由客户端将相关用户信息告知所述实时云合影平台的后端,所述后端再下发给服务器说明共有几个用户参与合照,每个用户的合照人数是多少,然后计算每个用户在背景中合照的区域,以及根据可调整的缩放比例系数,以及自动裁剪超出背景合照区域边界的人物区域,若判断多个用户的视频数据采集装置具有不同的相机环境,则通过通知后台管理平台人工去动态更新相应的系数,以达到一个相对协调、自然的画面,减少突兀;针对多路视频流的合照排位逻辑,按从中间往两边排的逻辑,且左边优先于右边先排位置,无论视频路数是奇数还是偶数,都是居中放置。
[0040]更进一步地,对实时采集的图像加入了卡尔曼跟踪,减少人形框的抖动以减缓由于人像抠图人物来回走动导致的画面抖动,通过当前帧分割的最小矩形框与上一帧跟踪框的iou进行比较,以及两个框的横向宽度比,当不超过一定系数时,则使用上一帧的框,作为当前帧的人像框,画面会减少一定的抖动。
[0041]与现有技术相比,本发明的有益效果为:本发明依托AI人像分割与背景融合技术以及流媒体技术,仅需要使用摄像头采集个人全身人像视频数据后推送到服务端,再拉取新的融合后的视频流,即可实时看到每个人在画面融合后的同框合影情况。此外为了保证效果,还可各自动态调整自己的站位,后台也可实时切换合照的背景,设置前后站位,人物缩放比例,甚至将背景替换为动态视频等,前端即可随之动态更新。此种方式,极大方便人们在异地快速合影,甚至在风景名胜地方云打卡。还可加上音频功能,实现异地合影的时候面对面语音通话交流,相互指导对方的站位情况等。不仅快捷方便,也高效,也可互动。
[0042]附图说明
[0043]从以下结合附图的描述可以进一步理解本发明。图中的部件不一定按比例绘制,而是将重点放在示出实施例的原理上。在图中,在不同的视图中,相同的附图标记指定对应的部分。
[0044]图1是本发明的一种异地多人实时云合影方法的整体流程图。
[0045]图2是本发明中一实施例的模型转换与部署流程图。
[0046]图3是本发明的一种异地多人实时云合影的系统中多人合照简要流程示意图。
[0047]具体实施方式
[0048]如图1-3所示,本发明依托人像分割与图像融合技术,将图像数据采用RTMP协议编码推流至流媒体服务器,另从该流媒体服务器拉流各路客户端的实时视频流解码已经进行人像分割后进行图像融合处理,即得到合照的图像数据,对该数据进行编码推流客户端对应拉取视频流。
[0049]针对每个合影任务,需要创建一个单独的房间号,避免同一时刻存在多个合影任务存在冲突。每个房间内参与合影的用户id以及视频推流地址以及合影后的流地址,也均由服务器下发,确保唯一。
[0050]整体方案流程图详见图1,具体的方法和流程如下:
[0051]1、视频数据采集与传输
[0052]由于视频图像数据较大,按照一帧帧的方式进行发送将会耗用较大的带宽资源,一般采用H264或者H265等方式进行编码后再采用流媒体协议对编码后的视频数据发送。客户端一般采用window PC设备,使用USB摄像头采集实时图像数据。基于ffmpeg强大的音视频处理能力,本模块主要根据分配的房间号以及与后端进行通信后,将采集的视频数据编码处理后按照指定的流地址,采用RTMP协议推流至流媒体服务器上。
[0053]2、数据拉流与人像分割
[0054]对客户端推送的实时视频流,基于ffmpeg进行拉取以及解码成正常的视频数据,然后调用人像分割算法进行实时抠图。
[0055]为了提升人像抠图的效果,本产品利用深度学习算法,基于Mobilenet-v3、Resnet50等backbone设计出人像抠图matting算法,Mobilenet-v3比Resnet50快个几毫秒,且精度相差不大,可视化效果看Resnet50稍微好一点,但Resnet50模型却大很多。本发明利用TensorRT推理引擎部署该算法,在英伟达P40、RTX3060、RTX2080Ti等显卡上可达到较好的实时性和抠图效果,具体模型转换部署如图2所示。
[0056]同一房间内会存在多个客户端推送的视频流,在获取到图像的mask数据后,则需要进行多路人像的融合。
[0057]3、人像融合方案
[0058]针对2中扣好的人像数据,需要在指定背景上进行融合。如何确保参与合影的用户,可以彼此看到都出现同在一个背景画面中,而且效果较好呢?
[0059]通过每个用户的优先级,每个用户设置的参与合照的人数,人的缩放比例等参数,来进行在背景中计算合照的大概区域位置,大致的计算排位处理逻辑文字描述如下:
[0060]首先由客户端将相关用户信息告知后端,后端再下发给服务器说明共有几个用户参与合照,每个用户的合照人数是多少,然后计算每个用户在背景中合照的区域,以及根据可调整的缩放比例系数,以及自动裁剪超出背景合照区域边界的人物区域。根据不同的相机环境,可通过后台管理平台人工去动态更新相应的系数,以达到一个相对协调、自然的画面,减少突兀感。
[0061]针对多路视频流的合照排位逻辑,采用了相对简单的排位算法,按从中间往两边排的逻辑,且左边优先于右边先排位置,无论视频路数是奇数还是偶数,都是居中放置。
[0062]为了减缓由于人像抠图人物来回走动导致画面抖动的问题,本产品仍加入了卡尔曼跟踪,减少人形框的抖动。通过当前帧分割的最小矩形框与上一帧跟踪框的iou进行比较,以及两个框的横向宽度比,当不超过一定系数时,则使用上一帧的框,作为当前帧的人像框,画面会减少一定的抖动。
[0063]大致的计算排位处理方式如下:
[0064]1.计算用户画面在背景区域的宽度。
[0065]通过后端指定的背景图像的宽长bg_width,然后乘以一个默认比例系数group_photo_ratio,最后再乘以当前用户合照人数user_camera_num占参与合照的总人数total_camera_num的比例,得出用户画面在背景区域的所占的宽度user_group_photo_w。
[0066]user_group_photo_w=bg_width*group_photo_ratio*(user_camera_num/total_camera_num)
[0067]total_camera_width+=user_group_photo_w
[0068]2.用户相机画面image按统一比例缩放,超出user_group_photo_w则裁剪掉。当相机画面人物比例在背景区域过大过小时,管理端可动态调整人物缩放比例scale,使人物达到协调。当用户相机画面超过了相机宽度user_group_photo_w,则会重新计算裁剪的位置,crop_x表示的是裁剪相机画面左上角x坐标,crop_y表示的是裁剪相机画面左上角y坐标,crop_width代表的是裁剪相机画面的宽度,crop_height表示的裁剪相机画面的高度。
[0069]image=resize(image,scale)
[0070]image=crop(image,crop_x,crop_y,crop_width,crop_height)
[0071]3.用户画面的排放位置。通过参加合照用户的相机总宽度,求出每个相机画面在背景区域的起始点坐标locate_x和locate_y。尽量使融合后的总体画面保持居中。
[0072]locate_x=total_camera_width-user_group_photo_w
[0073]locate_y=bg_height-distance_from_bottom-height
[0074]4.背景融合。其中src为原图像,cls为AI算法分割得到概率图,bg为背景图像,通过图像像素加权的方式,将原图与背景合并在一起。
[0075]bg_b=src_b*cls+(1-cls)*bg_b
[0076]bg_g=src_g*cls+(1-cls)*bg_g
[0077]bg_r=src_r*cls+(1-cls)*bg_r
[0078]4、合照数据输出
[0079]由于已获取后端下发的参与合照的用户信息、房间信息以及融合后的推理地址等,针对融合好的图像数据,即实时合照图片,采用与客户端相同的方案需要进行视频编码压缩后按照指定的流地址,使用RTMP协议推流至流媒体服务器上。客户端拉取该视频流地址,即可实时看到融合后的合影图像。
[0080]当用户前后左右移动时,合影中的人像也会实时变化。
[0081]还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0082]本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0083]虽然上面已经参考各种实施例描述了本发明,但是应当理解,在不脱离本发明的范围的情况下,可以进行许多改变和修改。因此,其旨在上述详细描述被认为是例示性的而非限制性的,并且应当理解,以下权利要求(包括所有等同物)旨在限定本发明的精神和范围。以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。