本申请涉及视频处理技术领域,特别涉及一种视频生成方法。本申请同时涉及一种视频生成装置,一种计算设备,以及一种计算机可读存储介质。
背景技术:
随着视频处理技术的发展,在视频创作领域,人们对于视频中的对象替换有着极高的热情,但是由于对底层算法实现不够了解,且没有平台为用户提供类似的视频创作,因此用户很难实现对视频中的对象进行替换以得到替换视频的创作。
现有的一些软件可以通过简单的操作实现对视频中人脸的替换,即使用用户上传的图像中的人脸将待替换视频中的待替换对象替换掉,得到替换视频。并且,在替换视频生成的过程中,若想要获取视频生成进度,客户端可以向服务器发送进度获取指令,则服务器可以执行该进度获取指令,获取到视频生成进度反馈给客户端。
但上述方法中,服务器不仅要执行视频生成任务,还需要执行进度获取指令,而且由于正在执行视频生成任务,服务器可能无法及时执行进度获取指令,使得获取视频生成进度耗费较长时间,降低了用户体验。
技术实现要素:
有鉴于此,本申请实施例提供了一种视频生成方法。本申请同时涉及一种视频生成装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的获取视频生成进度耗费时间长的问题。
根据本申请实施例的第一方面,提供了一种视频生成方法,包括:
接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;
基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;
在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。根据本申请实施例的第二方面,提供了一种视频生成装置,包括:
接收模块,被配置为接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;
替换模块,被配置为基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;
发送模块,被配置为在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。
根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述视频生成方法的步骤。
根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述视频生成方法的步骤。
本申请提供的视频生成方法,接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。上述方法在生成替换视频的过程中,调用监控线程获取视频生成任务的任务状态,能够在不影响视频生成任务的情况下及时获取到任务状态,不至于在获取任务状态时耗费较长时间,提高了获取任务状态的效率,而且及时获取到任务状态使得用户能够实时地了解到视频生成任务的进度,进而可以提高用户体验。
附图说明
图1是本申请一实施例提供的一种视频生成方法的流程图;
图2是本申请一实施例提供的一种应用于人体替换的视频生成方法的处理流程图;
图3是本申请一实施例提供的一种待替换视频的示意图;
图4是本申请一实施例提供的一种替换视频的示意图;
图5是本申请一实施例提供的一种视频生成装置的结构示意图;
图6是本申请一实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本申请一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本申请一个或多个实施例涉及的名词术语进行解释。
替换视频:使用用户上传的替换图像,将待替换视频中的待替换对象替换后得到的视频。
图像校验:基于深度学习的智能内容审核方案,准确过滤携带违规内容的图像,实现自动化审核功能。
任务队列:任务队列是一个任务列表,一个或多个线程为该列表提供服务。如果任务队列只有一个服务线程,则所有任务按照写入列表的先后顺序执行。如果任务队列有多个服务线程,则任务的执行顺序是未知的。
消息队列:用于存储任务状态的队列。
监控线程:服务器创建的用于获取视频生成任务的任务状态的线程。
人脸驱动:将待替换视频处理生成视频序列,以便根据待替换视频的运动对替换图像中的人脸进行动画处理。
任务调度:是指根据一定的约束条件,安排处理器执行任务或系统命令。例如,若任务队列是和时间相关的,则任务调度可以是按照时间安排处理器执行任务。
网关层:负责任务相关功能接口的调度。
文件存储系统:用于存储上传的替换图像。
ai层:用于采用ai算法对替换图像进行合规合法审核。
算法网关层:用于和算法模型层进行交互,将网关层的请求数据发送至算法模型层,等待算法模型层执行完任务后将任务消息写入消息队列,供网关层进行监听消费。
算法模型层:存储有算法模型,可以根据替换图像和待替换视频执行视频生成任务,生成替换视频。
h5页面:客户端中展示的页面,确定待替换视频和替换图像以及生成合成视频均在该页面完成。
接下来,对本申请实施例提供的应用场景进行简单介绍。
视频创作领域,创作者对于人脸驱动、换脸等有极高的热情,且具有各种脑洞大开的灵感,但是受限于对于底层算法不够了解,很难将自己的创意实践。当前市面上创作人脸驱动视频的门槛比较高,没有一个面向普通用户以较低的学习成本和简单的用户操作来实现人脸驱动视频创作的功能和平台。
为了解决上述问题,本申请提供了一种视频生成方法,对于用户来说学习成本低且操作简单,并且在生成替换视频的过程中,专门调用监控线程获取视频生成任务的任务状态并反馈给客户端,以便于用户能够实时地了解到视频生成任务的进度,进而可以提高用户体验。
在本申请中,提供了一种视频生成方法,本申请同时涉及一种视频生成装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本申请一实施例提供的一种视频生成方法的流程图,该方法应用于服务器,具体可以包括以下步骤:
步骤102:接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识。
具体的,视频标识可以用于唯一标识一个视频,且视频标识可以是字母、数字、符号等。图像标识可以用于唯一标识一张图像,且图像标识可以是字母、数字、符号等。例如,视频标识是v1,图像标识是p2。
具体实现中,服务器可以接收到来自客户端的视频生成任务,且该视频生成任务中包括视频标识和图像标识,以便于服务器可以确定是用图像标识指示的图像对视频标识指示的视频中的待替换对象进行替换。
在本申请一种实施方式中,接收视频生成任务之前,还包括:接收所述替换图像并存储;将所述替换图像的存储地址发送至客户端。
具体实现中,服务器在接收视频生成任务之前,可以接收到来自客户端的替换图像,且可以将该替换图像存储至服务器的文件存储系统中,并且将存储地址返回给客户端,以便于客户端后续可以从服务器中获取到该替换图像。其中,文件存储系统可以用于存储替换图像。
在一些实施例中,若想要对待替换视频中的待替换对象进行替换,用户可以从客户端展示的视频列表中选择待替换视频,并且基于该待替换视频确定替换图像,将替换图像上传至客户端,则客户端可以确定待替换视频和替换图像。具体实现中,用户可以先从视频列表中选择感兴趣的视频作为待替换视频,并且可以点击进入该视频的详情页,并播放该视频以获取视频的内容。然后从相册中选择图像,或者,直接拍摄图像作为替换图像。并且,若用户选择的待替换视频是基于人脸的视频(如演唱视频),则可以选择人脸图像为替换图像;若用户选择的待替换视频是基于人体的视频(如舞蹈视频),则可以选择包含人体的图像作为替换图像。
在另一些实施例中,若想要对待替换视频中的待替换对象进行替换,用户可以自行上传图像作为替换图像。然后客户端可以对替换图像进行特征点提取,以实现对替换图像的目标识别,并且根据识别结果确定待替换视频。示例性地,若识别出替换图像中包括人脸,则可以推荐基于人脸的视频(如演唱视频),若识别出替换图像中包括人体,则可以推荐基于人体的视频(如舞蹈视频)。如此,客户端可以确定待替换视频和替换图像。
作为一种示例,客户端接收到替换图像后,可以将替换图像上传至服务器进行存储。由于此时客户端还没有向服务器发送视频生成任务,因此,服务器是在接收到视频生成任务之前,可以接收到来自客户端的替换图像,并且服务器可以将该替换图像存储至文件存储系统中,将该替换图像的存储地址返回给客户端,则后续客户端可以基于该存储地址从服务器中获取该替换图像。
作为另一种示例,客户端和服务器可以通过网关层进行数据交互。客户端接收到替换图像后,可以将替换图像发送至网关层,由网关层将该替换图像发送至服务器,服务器接收到该替换图像后,可以将该替换图像存储至文件存储系统中,并且将替换图像的存储地址发送至网关层,由网关层将该存储地址返回给客户端,后续生成替换视频后可以从服务器中获取该替换图像作为替换视频的封面。其中,网关层负责调度任务相关功能接口。在上述示例中,网关层负责调用服务器的文件存储系统的接口,用于将替换图像存储至该文件存储系统中。
在本申请一种实施方式中,接收所述替换图像并存储之后,还包括:接收图像校验指令;基于所述图像校验指令对所述替换图像进行校验,获取校验结果并发送至所述客户端。
其中,图像校验指令是对替换图像进行校验的指令。校验结果可以包括通过和不通过两种情况。
具体实现中,接收替换图像并存储后,服务器还可以接收到图像校验指令,该图像校验指令中可以包括图像标识,则服务器可以基于该图像校验指令对该图像标识指示的替换图像进行校验,以判断该替换图像是否合规,是否可以用于进行视频生成,避免生成不合规的替换视频,造成服务器资源的浪费。
在一些实施例中,为了确保使用的替换图像是合法有效的,客户端将替换图像上传至服务器之后,可以生成对该替换图像进行校验的图像校验指令发送至服务器,则服务器可以接收到图像校验指令,基于海量数据的ai算法对替换图像进行图像校验,并将校验结果发送至客户端。或者,服务器中可以配置有ai层,该ai层用于采用ai算法对图像进行合规合法审核,服务器接收到图像校验指令后,可以将替换图像发送至ai层,通过ai层对替换图像进行图像校验,将校验结果发送至客户端。
在另一些实施例中,客户端生成对替换图像进行校验的图像校验指令后可以发送至网关层,则网关层可以调用服务器的ai层,将该图像校验指令发送至ai层,则ai层可以从文件存储系统中获取替换图像,并通过ai算法对该替换图像进行图像校验,将校验结果发送至网关层,由网关层将校验结果发送至客户端。
作为一种示例,可以通过图像分类,目标检测,人脸检测,人脸识别等算法对替换图像进行校验。或者,可以通过pornmodel(色情模型)和politicsmodel(政治模型)对替换图像进行校验,并将校验结果返回给客户端。
本申请实施例中,开放用户自定义上传替换图像的功能,并且可以基于海量的图像信息对用户上传的替换图像进行自动化审核校验,确保用户使用合法有效的替换图像进行视频生成,避免通过无效的替换图像生成无效的替换视频,进而导致服务器资源的浪费。
在本申请一种实施方式中,客户端收到校验结果后,若校验结果是通过,则可以基于待替换视频和替换图像创建视频生成任务并发送至服务器,相应地,服务器可以接收到视频生成任务。若校验结果是不通过,则客户端不能生成视频生成任务。
作为一种示例,客户端和服务器可以通过网关层进行数据通信。客户端可以基于待替换视频和替换图像创建视频生成任务,将该视频生成任务发送至网关层,则网关层可以将该视频生成任务发送至服务器的算法网关层,算法网关层可以和算法模型层进行交互,将该视频生成任务发送至算法模型层,则可以认为服务器接收到该视频生成任务。另外,网关层在接收到视频生成任务后,可以记录该视频生成任务的图像标识和视频标识。
进一步地,算法模型层接收到视频生成任务后,可以生成视频生成任务的任务标识发送至算法网关层,则算法网关层可以将任务标识发送至网关层,网关层可以记录该任务标识。
在本申请一种实施方式中,客户端在创建视频生成任务之前,还可以对替换图像进行图像识别,获取识别结果;在基于识别结果确定识别成功的情况下,确定识别结果与待替换视频的视频类型是否匹配;若识别结果与待替换视频的视频类型匹配,基于待替换视频和替换图像创建视频生成任务。
具体的,识别结果可以是识别出的替换图像中存在的对象。对替换图像进行图像识别,若识别结果是人脸或人体,可以认为识别成功;若无法识别到人脸或人体,则可以认为识别失败。视频类型可以包括人脸视频和人体视频两种类型。
具体实现中,为了避免无法基于获取的替换图像生成替换视频,可以对替换图像进行图像识别,并获取识别结果,若识别结果是识别成功,则可以认为替换图像中包括人脸或人体,是可以进行人脸或人体替换的,但若待替换视频与替换图像匹配不上则无法实现替换,因此,还需确定识别结果与待替换视频的视频类型是否匹配,若识别结果与待替换视频的视频类型匹配,则可以基于该待替换视频和替换图像创建视频生成任务。
进一步地,若所述识别结果与所述待替换视频的视频类型不匹配。即识别结果是人脸,视频类型是人体视频,或者,识别结果是人体,视频类型是人脸视频,则可以认为识别结果与视频类型不匹配。在该种情况下,可以基于待替换视频的视频类型重新获取图像作为新的替换图像,基于待替换视频和新的替换图像创建视频生成任务。示例性地,若待替换视频的视频类型是人脸视频,则可以获取人脸图像作为新的替换图像,若待替换视频的视频类型是人体视频,则可以获取人体图像作为新的替换图像。
本申请实施例中,客户端获取到替换图像后,可以将替换图像上传至服务器进行存储,并且生成图像校验指令发送至服务器,服务器接收到图像校验指令后可以对替换图像进行图像校验,且将校验结果发送至客户端。客户端基于校验结果确定替换图像符合要求后可以创建视频生成任务,将该视频生成任务发送至服务器,则服务器可以接收到视频生成任务。在替换图像符合要求的情况下再创建视频生成任务,可以确保替换图像是合法合规的图像,避免服务器基于违法违规的替换图像生成无效的替换视频,导致服务器资源的浪费。
步骤104:基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态。
具体的,任务状态用于表征视频生成任务的处理进度。作为一种示例,任务状态可以包括等待、执行、取消、成功、失败等状态。
具体实现中,服务器可以通过算法模型,基于待替换视频和替换图像生成替换视频,并且在生成替换视频的过程中,可以调用监控线程获取该视频生成任务的任务状态。例如,该算法模型可以是人脸驱动模型。
作为一种示例,监控线程是服务器创建的用于监控视频生成任务的任务状态的线程。
在本申请一种实施方式中,基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频的具体实现可以包括:对所述待替换视频进行分帧处理,得到多个视频帧;对所述多个视频帧中的每个视频帧进行目标识别,将存在所述待替换对象的视频帧作为目标视频帧;基于所述替换图像对所述目标视频帧中所述待替换对象进行替换,得到替换视频帧;基于所述替换视频帧,以及所述待替换视频中除所述目标视频帧之外的视频帧,生成所述替换视频。
具体的,待替换对象可以是待替换视频中的主体对象。例如,若待替换视频是演唱视频,则待替换对象可以是演唱者。若待替换视频是舞蹈视频,则待替换对象可以是舞者。
具体实现中,可以将待替换视频按帧划分为多个视频帧,并且可以基于深度卷积网络的目标检测器对每个视频帧进行目标检测,将检测到待替换对象的视频帧作为目标视频帧。再将目标视频帧中的待替换对象替换为替换图像,则可以得到替换视频帧,将替换视频帧和待替换视频中除目标视频帧之外的视频帧按照时间顺序进行拼接,则可以得到替换视频。
作为一种示例,可以将待替换视频和替换图像输入服务器的算法模型层,该算法模型层存储有视频生成模型,可以实现根据替换图像和待替换视频进行视频生成任务得到替换视频。即将替换图像和待替换视频输入视频生成模型,可以输出替换视频。
需要说明的是,视频生成模型可以是预先训练好的神经网络模型。
本申请实施例中,通过目标检测从待替换视频中确定出需要进行对象替换的目标视频帧,然后用替换图像替换该目标视频帧中的待替换对象,则可以得到替换视频帧,用该替换视频帧替换该待替换视频中的目标视频帧,则可以得到替换视频。如此,可以实现对待替换视频中待替换对象的替换。
在本申请一种实施方式中,基于所述替换图像对所述目标视频帧中所述待替换对象进行替换,得到替换视频帧的具体实现可以包括:对所述目标视频帧中的待替换对象进行三维重建,得到待替换对象的三维模型,以及对所述替换图像中的替换对象进行三维重建,得到所述替换对象的三维模型;提取所述目标视频帧中所述待替换对象的多个特征点,并基于所述待替换对象的三维模型确定所述待替换对象的特征参数;基于所述替换图像的三维模型、所述多个特征点和所述特征参数,构建目标图像;基于所述目标图像替换所述目标视频帧中所述待替换对象,得到替换视频帧。
其中,特征参数可以包括表情参数和/或动作参数。若待替换对象是人脸,特征参数可以是表情参数,若待替换对象是人体,特征参数可以是动作参数或者动作参数和表情参数。
具体实现中,基于替换图像和待替换视频生成替换视频可以通过视频生成模型来实现,该视频生成模型可以包括三维重建模块、视频预处理模块、二维图像生成模块和视频编辑模块。可以通过三维重建模块对目标视频帧中的待替换对象进行三维重建,可以得到待替换对象的三维模型,并且对替换图像中的替换对象进行三维重建,可以得到替换对象的三维模型。可以通过视频预处理模块提取目标视频帧中待替换对象的多个特征点,并且基于待替换对象的三维模型确定待替换对象的特征参数。通过二维图像生成模块,基于替换图像的三维模型、多个特征点和特征参数,构建目标图像。再通过视频编辑模块将目标图像替换到目标视频帧上,得到替换视频帧。
作为一种示例,对于每个目标视频帧,二维图像生成模块可以将替换对象的三维模型与该目标视频帧中待替换对象通过特征点进行调整、对齐,并且根据该目标视频帧中待替换对象的特征参数对三维模型进行形变调整,将经过对齐、特征调整后的三维模型投射到二维图像上,可以得到目标图像。
作为一种示例,对于每个目标视频帧,视频编辑模块可以将目标视频帧中的待替换对象替换成目标图像,并对目标图像进行平滑及颜色模糊处理,避免出现颜色突变等失真现象,如此,可以得到替换视频帧。
本申请实施例中,可以通过视频生成模型中的三维重建模块、视频预处理模块、二维图像生成模块和视频编辑模块生成替换视频,且视频生成模型是预先训练好的,可以缩短替换视频生成时间,提高替换视频生成效率。
在本申请一种实施方式中,接收视频生成任务之后,还包括:将所述视频生成任务写入任务队列中。
具体实现中,接收到视频生成任务之后,服务器可以将视频生成任务写入任务队列中,该任务队列用于存储视频生成任务。
作为一种示例,服务器可以创建多个服务线程,用于为该任务队列提供服务。在该种情况下,若服务器接收到多个视频生成任务,则可以将该多个视频生成任务按照接收顺序写入任务队列中,且多个服务线程可以并行从该任务队列中获取视频生成任务来执行。即本申请的任务调度是安排服务器的多个服务线程并行执行任务。
如此,在视频生成任务比较多的情况下,通过多个服务线程并行对多个视频生成任务进行处理,可以大大地减少处理视频生成任务的时间,提高服务器的处理效率,进而提高生成替换视频的效率。
在本申请一种实施方式中,基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换之前,还包括:从所述任务队列中获取所述视频生成任务;获取所述视频标识指示的待替换视频,以及获取所述图像标识指示的替换图像。
具体实现中,由于视频生成任务存储至任务队列中,因此在执行视频生成任务之前,可以调用服务线程从任务队列中获取视频生成任务,并且基于视频标识获取待替换视频,以及基于图像标识获取替换图像,以便于后续处理。
作为一种示例,服务器接收到视频生成任务后,可以将视频生成任务存储至任务队列中,若任务队列中存储有多个视频生成任务,可以调用服务器线程从任务队列中并行获取视频生成任务,并且根据视频生成任务中的图像标识从文件存储系统中获取替换图像,以及根据视频标识获取待替换视频,以便于后续基于替换图像和待替换视频进行视频合成,得到替换视频。
在本申请一种实施方式中,在替换过程中调用监控线程获取所述视频生成任务的任务状态的具体实现可以包括:在所述视频生成任务的任务状态发生变化的情况下,调用所述监控线程获取所述视频生成任务的任务状态。
具体实现中,可以由服务器的算法模型层执行视频生成任务,并且在执行视频生成任务的过程中,若任务状态发生变化,算法模型层可以向算法网关层反馈新的任务状态,相应的,服务器可以通过网关层调用监听线程,则网关层可以接收算法网关层发送的视频生成任务的任务状态。
需要说明的是,在该种实现方式中,可以认为网关层是服务器中配置的模块。
作为一种示例,每个视频生成任务在没有从任务队列中取出的时候,其任务状态均可以记录为等待。将视频生成任务从任务队列中取出,且在算法模型层开始执行视频生成任务时,可以调用监控线程获取视频生成任务的任务状态,则记录的任务状态可以是执行,并且在执行过程中可以不断记录任务状态,例如合成进度百分之50,合成进度百分之80等等。若视频生成任务执行完成,成功生成了替换视频,可以调用监控线程获取视频生成任务的任务状态,则记录的任务状态可以是成功。若在执行视频生成任务的过程中由于网络或其他原因导致没有生成替换视频,且无法再继续进行视频合成,可以调用监控线程获取视频生成任务的任务状态,则记录的任务状态可以是失败。若用户临时不想进行进行图像替换,则可以通过客户端向服务器发送任务取消指令,该任务取消指令可以包括任务标识,则在执行视频生成任务的过程中,由于接收到任务取消指令,可以停止生成替换视频,因此在接收到任务取消指令时,可以调用监控线程获取视频生成任务的任务状态,则记录的任务状态可能是取消。
在本申请实施例中,服务器调用一个监控线程专门用于获取视频生成任务的任务状态,可以实时地获取视频生成任务的任务状态信息,并且不会占用执行视频生成任务的服务线程,可以提高服务器的处理效率。
在本申请一种实施方式中,在替换过程中调用监控线程获取所述视频生成任务的任务状态之后,还包括:将所获取的任务状态和所述视频生成任务的任务标识写入消息队列中。
具体实现中,调用监控线程获取视频生成任务的任务状态后,可以将任务状态和该视频生成任务的任务标识写入消息队列中,以便于客户端可以基于任务标识从消息队列中获取视频生成任务的任务状态。
作为一种示例,消息队列中可以包括多个视频生成任务的任务标识以及每个视频生成任务的任务状态,网关层获取到任务状态后,可以从消息队列中确定该任务标识指示的视频生成任务的任务状态,并以获取到的任务状态更新该视频生成任务的任务状态。
在本申请一种实施方式中,将所获取的任务状态和所述视频生成任务的任务标识写入消息队列中之后,还包括:接收任务状态获取指令,其中,所述任务状态获取指令中包括任务标识;从所述消息队列中获取所述任务标识指示的视频生成任务的任务状态并发送至客户端。
具体实现中,服务器可以接收到来自客户端的任务状态获取指令,并且基于该任务状态获取指令中包括的任务标识,从消息队列中获取该任务标识指示的视频生成任务的任务状态,将该任务状态发送至客户端,则客户端可以获取到视频生成任务的任务状态。
作为一种示例,若网关层是服务器中配置的模块,则由网关层接收来自客户端的任务状态获取指令,并且根据任务标识从消息队列中获取对应的视频生成任务的任务状态发送至客户端。
例如,假设任务标识是s1,则可以从消息队列中获取与该任务标识s1对应的任务状态,假设与s1对应的任务状态是执行中,则可以确定视频生成任务s1目前正在执行中。
在一些实施例中,为了便于用户实时了解到替换视频的生成进度,客户端可以轮询视频生成任务的任务状态。作为一种示例,轮询视频生成任务的任务状态的具体实现可以包括:向服务器发送任务状态获取指令,并接收服务器返回的任务状态。基于服务器返回的任务状态对任务列表中任务标识指示的视频生成任务的任务状态进行更新。
具体实现中,客户端生成视频生成任务后,可以创建任务列表,并将视频生成任务发送至网关层,网关层可以记录将该视频生成任务的图像标识和视频标识。并且,服务器接收视频生成任务后,可以为该视频生成任务创建任务标识,并将该任务标识发送至网关,网关可以记录该任务标识,并将该任务标识发送至客户端,则客户端可以在任务列表中存储任务标识。客户端可以周期性地向服务器发送任务状态获取指令,服务器基于该任务状态获取指令中的任务标识,从消息队列中获取任务状态并发送至网关层,网关层再将该任务状态发送至客户端。客户端接收到该网关层发送的任务状态后,可以基于该任务状态对任务列表中该视频生成任务的任务状态进行更新。
本申请实施例中,服务器可以基于待替换视频和替换图像生成替换视频,且在替换过程中,可以单独调用监控线程获取视频生成任务的任务状态,并将该任务状态写入消息队列中,在接收到客户端包括任务标识的任务状态获取指令时,从消息队列中获取该任务标识指示的视频生成任务的任务状态发送至客户端,则客户端可以实时地获取到视频生成任务的任务状态,以便于用户可以实时监控替换视频的生成进度,提升了用户体验。
步骤106:在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。
具体实现中,若确定任务状态是任务成功,则可以认为已经成功地使用替换图像替换了待替换视频中的待替换对象,得到替换视频,因此,可以获取该替换视频并发送至客户端。
进一步地,在确定任务状态是任务成功的情况下,还可以向客户端发送任务成功通知,则客户端接收到该任务成功通知后,可以将任务列表中该任务的任务状态更新为任务成功。
在本申请一种实施方式中,在替换过程中调用监控线程获取所述视频生成任务的任务状态之后,还包括:在确定所述任务状态是任务失败的情况下,向客户端发送任务失败通知。
具体实现中,若任务状态是任务失败,可以认为没有成功地使用替换图像替换了待替换视频中的待替换对象,则没有替换后的视频,可以向客户端发送任务失败通知,客户端接收到该任务失败通知后,可以将任务列表中该任务的任务状态更新为任务失败。
作为一种示例,若在服务器执行视频生成任务的过程中,用户想取消该视频生成任务,则可以点击客户端展示的“取消”选项,则客户端可以生成任务取消指令,该任务取消指令中包括任务标识,将该任务取消指令发送至服务器,则该服务器可以基于该任务标识确定视频生成任务,并停止执行该视频生成任务,且向客户端发送完成通知,以告知客户端该视频生成任务已经取消执行。
本申请提供的视频生成方法,接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。上述方法在生成替换视频的过程中,调用监控线程获取视频生成任务的任务状态,能够在不影响视频生成任务的情况下及时获取到任务状态,不至于在获取任务状态时耗费较长时间,提高了获取任务状态的效率,而且及时获取到任务状态使得用户能够实时地了解到视频生成任务的进度,进而可以提高用户体验。
下述结合附图2,以本申请提供的视频生成方法在人体替换的应用为例,对所述视频生成方法进行进一步说明。其中,图2示出了本申请一实施例提供的一种应用于人体替换的视频生成方法的处理流程图,具体可以包括以下步骤:
步骤202:响应于用户的操作,客户端确定待替换视频。
在本实施例中,客户端执行的操作均可以认为是在h5页面执行的操作。
例如,可以在客户端的h5页面展示多个视频,用户从中选择一个视频作为待替换视频。参见图3,图3是待替换视频的一帧截图。
步骤204:客户端接收替换图像。
例如,用户可以点击图3中添加照片的控件,从相册中选择图像,或者,直接拍摄图像作为替换图像上传至客户端。
步骤206:客户端将接收到的替换图像上传至网关层。
步骤208:网关层将替换图像上传至服务器的文件存储系统。
步骤210:服务器的文件存储系统存储该替换图像并返回该替换图像的存储地址至网关层。
步骤212:网关层将替换图像的存储地址发送至客户端。
步骤214:客户端向网关层发送图像校验指令。
例如,用户可以点击图3中合成视频的控件,则客户端可以接收到视频生成请求,为了避免替换图片不合规导致生成的替换视频无法使用,可以对替换图像进行校验,即客户端可以向网关层发送图像校验指令。
步骤216:网关层将图像校验指令发送至服务器的ai层。
步骤218:服务器的ai层对替换图像进行校验。
步骤220:服务器的ai层将校验结果发送至网关层。
步骤222:网关层将校验结果发送至客户端。
示例性地,为了确保使用的替换图像是合法有效的,客户端通过网关层将替换图像上传至服务器的文件存储系统之后,可以生成对该替换图像进行校验的图像校验指令发送至服务器的ai层,则服务器可以接收到图像校验指令,在ai层基于海量数据的ai算法对替换图像进行图像校验,并将校验结果通过网关层发送至客户端。
步骤224:客户端基于校验结果确定替换图像符合要求,则生成视频生成任务发送至网关层。
步骤226:网关层接收到视频生成任务并记录该视频生成任务的图像标识和视频标识。
步骤228:网关层将视频生成任务发送至服务器的算法网关层。
步骤230:服务器的算法网关层将视频生成任务发送至算法模型层。
步骤232:算法模型层生成视频生成任务的任务标识并返回给算法网关层。
步骤234:算法网关层将任务标识发送至网关层,网关层可以记录该任务标识。
步骤236:网关层将该任务标识发送至客户端。
步骤238:算法模型层执行视频生成任务。
步骤240:服务器通过网关层启动监听线程,用于接收算法网关层发送的视频生成任务的任务状态,根据接收到任务状态包括的任务标识查找对应的视频生成任务并更新任务状态。
例如,假设任务标识是a,该任务标识对应的任务原本是执行中,通过监听线程获取到任务状态,该新的任务状态是成功,则可以将该任务标识a对应的视频生成任务的任务状态修改为成功。
步骤242:客户端向网关层发送任务状态获取指令,该任务状态获取指令包括任务标识。
步骤244:网关层接收任务状态获取指令,根据任务标识查询对应任务状态发送至客户端。
步骤246:在确定任务状态是任务成功的情况下,网关层向客户端发送任务成功通知和替换视频。
例如,参见图4,图4是替换视频的一帧截图。并且,用户可以发布该替换视频,以供其他用户观看。
本申请提供的视频生成方法,接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。上述方法在生成替换视频的过程中,调用监控线程获取视频生成任务的任务状态,能够在不影响视频生成任务的情况下及时获取到任务状态,不至于在获取任务状态时耗费较长时间,提高了获取任务状态的效率,而且及时获取到任务状态使得用户能够实时地了解到视频生成任务的进度,进而可以提高用户体验。
与上述方法实施例相对应,本申请还提供了视频生成装置实施例,图5示出了本申请一实施例提供的一种视频生成装置的结构示意图。如图5所示,该装置包括:
接收模块502,被配置为接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;
替换模块504,被配置为基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;
发送模块506,被配置为在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。
可选地,替换模块504,被配置为:
对所述待替换视频进行分帧处理,得到多个视频帧;
对所述多个视频帧中的每个视频帧进行目标识别,将存在所述待替换对象的视频帧作为目标视频帧;
基于所述替换图像对所述目标视频帧中所述待替换对象进行替换,得到替换视频帧;
基于所述替换视频帧,以及所述待替换视频中除所述目标视频帧之外的视频帧,生成所述替换视频。
可选地,替换模块504,被配置为:
对所述目标视频帧中的待替换对象进行三维重建,得到待替换对象的三维模型,以及对所述替换图像中的替换对象进行三维重建,得到所述替换对象的三维模型;
提取所述目标视频帧中所述待替换对象的多个特征点,并基于所述待替换对象的三维模型确定所述待替换对象的特征参数;
基于所述替换图像的三维模型、所述多个特征点和所述特征参数,构建目标图像;
基于所述目标图像替换所述目标视频帧中所述待替换对象,得到替换视频帧。
可选地,接收模块502还被配置为:
将所述视频生成任务写入任务队列中。
可选地,替换模块504还被配置为:
从所述任务队列中获取所述视频生成任务;
获取所述视频标识指示的待替换视频,以及获取所述图像标识指示的替换图像。
可选地,替换模块504,被配置为:
在所述视频生成任务的任务状态发生变化的情况下,调用所述监控线程获取所述视频生成任务的任务状态。
可选地,替换模块504还被配置为:
将所获取的任务状态和所述视频生成任务的任务标识写入消息队列中。
可选地,替换模块504还被配置为:
接收任务状态获取指令,其中,所述任务状态获取指令中包括任务标识;
从所述消息队列中获取所述任务标识指示的视频生成任务的任务状态并发送至客户端。
可选地,接收模块502还被配置为:
接收所述替换图像并存储;
将所述替换图像的存储地址发送至客户端。
可选地,接收模块502还被配置为:
接收图像校验指令;
基于所述图像校验指令对所述替换图像进行校验,获取校验结果并发送至所述客户端。
可选地,替换模块504还被配置为:
在确定所述任务状态是任务失败的情况下,向客户端发送任务失败通知。
本申请提供的视频生成方法,接收视频生成任务,其中,所述视频生成任务包括视频标识和图像标识;基于所述图像标识指示的替换图像对所述视频标识指示的待替换视频中的待替换对象进行替换,得到替换视频,并在替换过程中调用监控线程获取所述视频生成任务的任务状态;在确定所述任务状态是任务成功的情况下,将所述替换视频发送至客户端。上述方法在生成替换视频的过程中,调用监控线程获取视频生成任务的任务状态,能够在不影响视频生成任务的情况下及时获取到任务状态,不至于在获取任务状态时耗费较长时间,提高了获取任务状态的效率,而且及时获取到任务状态使得用户能够实时地了解到视频生成任务的进度,进而可以提高用户体验。
上述为本实施例的一种视频生成装置的示意性方案。需要说明的是,该视频生成装置的技术方案与上述的视频生成方法的技术方案属于同一构思,视频生成装置的技术方案未详细描述的细节内容,均可以参见上述视频生成方法的技术方案的描述。
图6示出了根据本申请一实施例提供的一种计算设备600的结构框图。该计算设备600的部件包括但不限于存储器610和处理器620。处理器620与存储器610通过总线630相连接,数据库650用于保存数据。
计算设备600还包括接入设备640,接入设备640使得计算设备600能够经由一个或多个网络660通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备640可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
在本申请的一个实施例中,计算设备600的上述部件以及图6中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图6所示的计算设备结构框图仅仅是出于示例的目的,而不是对本申请范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备600可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备600还可以是移动式或静止式的服务器。
其中,处理器620执行所述指令时实现上述所述的视频生成方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的视频生成方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述视频生成方法的技术方案的描述。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述视频生成方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的视频生成方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述视频生成方法的技术方案的描述。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本申请的内容,可作很多的修改和变化。本申请选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。