CN110199323A - 用于定义、捕获、组装和显示定制视频内容的系统和方法 - Google Patents
用于定义、捕获、组装和显示定制视频内容的系统和方法 Download PDFInfo
- Publication number
- CN110199323A CN110199323A CN201780067194.9A CN201780067194A CN110199323A CN 110199323 A CN110199323 A CN 110199323A CN 201780067194 A CN201780067194 A CN 201780067194A CN 110199323 A CN110199323 A CN 110199323A
- Authority
- CN
- China
- Prior art keywords
- video
- data file
- frames
- frame
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000003860 storage Methods 0.000 claims description 28
- 230000015654 memory Effects 0.000 claims description 24
- 238000005286 illumination Methods 0.000 claims 3
- 238000004891 communication Methods 0.000 description 22
- 238000009877 rendering Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 12
- 230000011218 segmentation Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 9
- 230000002452 interceptive effect Effects 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 6
- 239000011800 void material Substances 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000032696 parturition Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B27/00—Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
- G11B27/02—Editing, e.g. varying the order of information signals recorded on, or reproduced from, record carriers
- G11B27/031—Electronic editing of digitised analogue information signals, e.g. audio or video signals
- G11B27/036—Insert-editing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/006—Mixed reality
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B27/00—Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
- G11B27/10—Indexing; Addressing; Timing or synchronising; Measuring tape travel
- G11B27/19—Indexing; Addressing; Timing or synchronising; Measuring tape travel by using information detectable on the record carrier
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/234—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
- H04N21/23418—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving operations for analysing video streams, e.g. detecting features or characteristics
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/235—Processing of additional data, e.g. scrambling of additional data or processing content descriptors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/8146—Monomedia components thereof involving graphical data, e.g. 3D object, 2D graphics
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/816—Monomedia components thereof involving special video data, e.g 3D video
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/8166—Monomedia components thereof involving executable data, e.g. software
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/8547—Content authoring involving timestamps for synchronizing content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/16—Cloth
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Graphics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
提供了一种用于定义、捕获、组装和显示定制视频内容的方法。在实施例中,该方法包括:由服务器计算机接收包括一个或多个视频帧的视频帧序列;由服务器计算机将一个或多个滤波器应用于一个或多个视频帧以生成视频数据文件,该视频数据文件捕获在一个或多个视频帧中描绘的可定制对象的几何形状;由服务器计算机生成用于定制可定制对象的外观的定制指令;从服务器计算机向客户端计算机发送视频数据文件和定制指令,以使客户计算机执行关于视频数据文件的定制指令以渲染定制对象,并将定制对象覆盖在视频帧序列中的可定制对象。
Description
相关专利申请的交叉引用
本申请根据35U.S.C.§119要求2016年10月28日提交的美国临时专利申请62/414,534的权益,其全部内容通过引用结合于此,用于如同在本文中完全阐述的所有目的。
技术领域
本公开的一个技术领域是数字图像处理。另一技术领域是用于使用数字图像处理来定义、捕获、组装和显示定制视频内容的计算机实现的技术,以更有效地并且使用更少的资源来生成可定制的项目的视频。
背景技术
本节中描述的方法是可以采用的方法,但不一定是先前构思或采用的方法。因此,除非另有说明,否则不应认为本节中描述的任何方法仅仅因为它们包含在本节中而有资格作为现有技术。
随着数字计算能力的增长和制造工艺的增强,商品制造根据从客户计算机接收到的个性化定制请求转变为商品生产。例如,制造商通常完成从使用其计算机系统的客户接收到的在线订单,来定制通用商品的描述并且针对单独定制的商品在线下订单。
生成定制视频内容通常需要预先渲染定制内容的多个版本并将预先渲染的定制内容下载到客户的计算机以让客户选择期望的定制。然而,以这种方式预先渲染视频可能是耗时且计算上昂贵的。
发明内容
所附权利要求可以用作本发明的发明内容。
附图说明
在附图中:
图1描绘了用于定义、捕获、组装和显示定制视频内容的示例图像处理计算系统;
图2描绘了用于定义、捕获、组装和显示定制视频内容的示例过程;
图3描绘了示例标记;
图4描绘了包含示例标记的示例视频帧;
图5描绘了具有分割背景的示例视频帧;
图6描绘了具有分割产品区域的示例视频帧;
图7描绘了具有重构示例标记的示例视频帧;
图8描绘了在移除示例标记之前的示例视频帧;
图9描绘了具有示例时间码的示例视频帧;
图10是示出可以利用其实现本文的技术的计算机系统的框图。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对本方法的透彻理解。然而,显而易见的是,可以在没有这些具体细节的情况下实践本方法。在其他情况下,以框图形式示出了公知的结构和设备,以避免不必要地模糊本方法。
根据以下概述在此描述实施例:
I.一般概述
II.示例图像定制渲染系统
III.用于定义、捕获、组装和显示定制视频内容的处理
IV.播放交互式、定制视频内容
V.用于播放交互式、定制视频内容的示例处理
VI.示例标记
VII.包含示例标记的示例视频帧
VIII.具有分割背景的示例视频帧
IX.具有分割产品区域的示例视频帧
X.具有重构标记的示例视频帧
XI.在移除示例标记之前的示例视频帧
XII.具有示例时间代码的示例视频帧
XIII.某些实施例的优点
XIV.实施机制-硬件概述
15.示例代码说明
***
Ⅰ.一般概述
在实施例中,计算机实现的方法使得能够定义、捕获和组装可定制视频内容。在实施例中,服务器计算机生成用于定制包括在原始视频序列中的对象的指令和几何数据。几何数据和指令被发送到客户端计算机以使客户端计算机渲染和定制视频序列中描绘的对象。在实施例中,服务器计算机不向客户端计算机发送整个已定制的视频序列。相反,服务器计算机向客户端计算机发送足够的信息以使客户端计算机能够渲染和定制视频序列中描绘的对象。
在实施例中,响应于接收视频帧序列,在程序控制下,服务器计算机生成视频数据文件和定制指令。视频数据文件指定要在视频帧序列中定制的对象的几何和变形。定制指令指定要渲染的对象、颜色和用于定制渲染对象的外观的阴影。服务器计算机将视频数据文件和定制指令发送到客户端计算机,以使客户端计算机能够对视频数据文件执行定制指令,并使客户端计算机渲染和定制视频帧序列中的对象。
该方法的若干优点之一是缩短了定制视频剪辑所需的渲染时间。由于视频数据文件和定制指令的组合大小通常小于原始视频剪辑的大小,因此从服务器计算机向客户端计算机传输视频数据文件和定制指令使用的带宽小于从服务器到客户端传输整个定制视频剪辑使用的带宽。向客户端计算机提供用于定制产品视频的媒体和指令,将渲染和压缩计算从服务器卸载到客户端,有效地使用分布式处理来减少交互时间和计算成本。
II.示例图像定制渲染系统
图1示出了用于定义、捕获、组装和显示定制视频内容的示例图像处理计算系统。在实施例中,计算系统100包括服务器计算机110和客户端计算机130。服务器计算机110和客户端计算机130可以经由一个或多个通信网络120彼此通信,并且可能与其他服务器和其他客户端通信。服务器计算机110的物理位置并不重要,它可以广泛地代表一个或多个编程的计算机、处理器、核心或集群、或私人或公共云计算环境中的一个或多个虚拟计算实例。
服务器计算机110可以被配置为生成用于定制包括在原始视频序列中的对象几何数据和定制指令。服务器计算机110可以将指令和几何形状发送到客户端计算机130,以使客户端计算机130渲染和定制视频序列中的对象。
服务器计算机110可包括一个或多个计算机处理器112、一个或多个存储器单元113、一个或多个滤波器生成器114、一个或多个标记检测器 115、一个或多个几何形状生成器116、一个或多个定制指令生成器117和一个或多个通信发送器118。滤波生成器114、标记检测器115、几何形状生成器116、定制指令生成器117和通信发送器118每个可包括一个或多个程序指令序列或存储在存储器中的其他软件元素。计算机处理器112可以被配置为执行存储在存储器单元113中的程序指令,和/或将数据存储在一个或多个数据库服务器119中。
滤波生成器114可以被编程或配置为接收视频帧序列,识别序列中的各个帧,以及生成被配置为检测帧中描绘的对象的滤波器。可以基于存储在存储器单元113和/或数据库服务器119中的滤波器模板来生成滤波器。在图2中详细描述了滤波器的示例。
标记检测器115可以被编程或配置为接收视频帧、分析视频帧、以及确定视频帧是否包括标记。标记可以是包括正方网格的数字网格,其中一些网格用点填充。网格中点的组合编码了允许检测标记的唯一掩码。标记可以嵌入在视频帧中描绘的对象中。标记检测器115可以扫描视频帧以查找标记以识别要定制的对象。图3-4描述了标记的示例。
几何形状生成器116被编程或配置为接收视频帧,分析视频帧,确定在帧中要定制的对象,以及确定帧中的对象的矢量数据。要定制的对象在本文中称为可定制对象。视频帧的矢量数据包括关于对象的几何形状的信息。例如,矢量数据可以包括关于定义可定制对象的顶点和多边形的信息。可以针对矢量数据文件中的每个帧存储矢量数据。图2描述了矢量数据文件的示例。
几何形状生成器116还可以被配置为聚合为各个视频帧生成的矢量数据,并将聚合的矢量数据作为视频数据文件存储在存储器113或数据库服务器119中。视频数据文件包含捕获几何形状和对象从一个帧到另一个帧的运动的信息。当对象从一帧到另一帧动画时,它还捕获对象的变形。视频数据文件被从服务器计算机110发送到客户计算机130。客户端计算机 130使用视频数据文件来渲染与帧中的可定制对象相对应的3D对象。
定制指令生成器117被编程或配置为生成将由客户端计算机130执行的定制指令,以定制原始视频帧序列中描绘的可定制对象的外观。定制指令可以包括用于将选择的颜色和/或着色器应用于对象的指令。定制指令从服务器计算机110发送到客户端计算机130,并由客户端计算机130用于渲染和定制3D对象。在客户端计算机130处,定制的3D对象被覆盖在视频帧序列中的可定制对象上。在图2中描述了定制指令的示例。对于给定的产品定制视频,仅需要执行一次用于生成几何形状、视频和定制指令的处理。在处理之后,结果可以由服务器缓存或存储并基于客户端请求来检索。
发送器118被编程或配置成接收视频数据文件和定制指令,并将它们发送到客户端计算机130。视频数据文件可以从例如几何形状生成器116接收。可以从例如定制指令生成器117接收定制指令。视频数据文件和定制指令可以直接发送到客户端计算机130,或者通过一个或多个通信网络120 间接发送到客户端计算机130。
客户端计算机130可以被配置为从服务器计算机110接收用于定制原始视频序列中描绘的对象的几何形状数据和定制指令。在接收到几何形状数据和指令时,客户端计算机130可以执行指令以生成定制对象。定制对象可以被覆盖在原始视频序列中描绘的可定制对象上。
客户端计算机130可以包括一个或多个计算机处理器132、一个或多个存储器单元134、一个或多个渲染管理器136、以及一个或多个显示管理器138。计算机处理器112可以被配置为执行存储在存储器单元134中的程序指令,和/或将数据存储在一个或多个数据库服务器139中。
渲染管理器136可以被编程或配置为从服务器计算机110接收视频数据文件和定制指令。在接收视频数据文件和定制指令时,渲染管理器136 可以解析接收到的数据以识别关于定制对象的几何形状、颜色和阴影的信息。然后,渲染管理器136可以使用所识别的信息来渲染定制对象,并将颜色和着色器应用于渲染对象。一旦对象被定制,渲染管理器136就在视频帧序列中的可定制对象上覆盖定制对象。针对序列中的所有视频帧重复该处理。
在可定制对象上覆盖定制对象的处理包括使描绘定制对象的帧与描绘视频序列中的可定制对象的帧同步。可以通过匹配帧中描绘的数字代码来执行同步。在图2中描绘了同步处理。
显示管理器138可以被编程或配置为显示视频帧序列,其中定制对象覆盖在原始视频帧序列中的可定制对象上。例如,如果原始视频帧序列中的可定制对象是红色T恤,并且定制对象是蓝色T恤,则显示管理器138 将显示以蓝色T恤为特征的视频帧序列。在翘曲、折痕和灯光方面,显示的蓝色T恤与原始视频中的红色T恤外观相同;然而,它将显示为蓝色T 恤。
III.用于定义、捕获、组装和显示定制视频内容的处理
图2示出了定义、捕获、组装和显示定制视频内容的示例处理。在实施例中,步骤210-270由服务器计算机110或服务器侧的被配置为从原始视频序列生成定制指令和视频数据文件以用于定制目的的另一计算机执行。在实施例中,步骤280-298由客户端计算机130或客户端侧的被配置为执行关于视频数据文件的定制指令以定制视频序列并显示定制的视频序列的任何计算机执行。
在步骤210中,服务器计算机110接收视频帧序列。视频帧序列可以包括作为视频剪辑的一部分的一个或多个视频帧。视频剪辑可以是在客户端计算机130上要定制和显示的产品的记录。产品的非限制性示例包括衣服或服装、鞋、玩具、家居用品和家具。视频剪辑的特征可以是例如正在为红色T恤建模的人(模特),该红色T恤将被定制为蓝色T恤。
在步骤220中,服务器计算机110针对接收到的视频帧序列生成滤波器的集合。该集合可以包括一个或多个计算机实现的滤波器。滤波器可以应用于视频帧序列的帧,以确定或识别帧中描绘的对象的某些特性或特征。该集合可以包括例如用于对视频帧执行背景分割以识别帧中描绘的背景的特征的滤波器。该集合还可以包括用于用另一种颜色替换视频帧中的背景的颜色的滤波器。此外,该集合可以包括用于识别视频帧中的标记的滤波器、用于从视频帧中移除设计标记区域的滤波器、和/或用于去除由于在生成视频剪辑时发生的记录不一致所导致的错误的滤波器。为接收到的视频帧序列专门地选择或调谐的滤波器集合也称为调谐滤波器集合。
在步骤230中,服务器计算机110将来自调谐滤波器集合的滤波器应用于来自视频帧序列的视频帧。这可以包括将滤波器应用于视频帧以分割帧中描绘的背景区域。在图5中描绘了分割背景的示例。这还可以包括分割帧中描绘的服装产品。图6示出了分割T恤的描绘的示例。这还可以包括识别帧中的标记。图4描述了识别标记的示例。
在步骤240中,服务器计算机110从视频帧序列生成视频帧的矢量数据。矢量数据捕获将滤波器应用于视频帧的结果。它可以包括关于帧中描绘的可定制对象的顶点和几何形状的信息以及可定制对象的变形参数。矢量数据可以存储在任何类型的数据文件中,包括矢量数据JSON类型文件。
在步骤250中,服务器计算机110确定在视频帧序列中是否存在尚未处理的任何其他帧。如果发现另一帧,则在步骤230中将调谐的滤波器组应用于该帧。否则,执行步骤260。到执行步骤260时,服务器计算机110 完成了针对视频帧序列中的所有视频帧生成矢量数据。
在步骤260中,服务器计算机110生成视频帧序列的视频数据文件和定制指令。从针对视频帧序列中的帧获得的矢量数据文件生成视频数据文件。可以通过例如将矢量数据聚合到一个视频数据文件来生成视频数据文件。
视频数据文件可以被视为运动文件、或者捕获视频帧序列中的可定制对象的几何形状、变形和动画的移动矢量数据文件。视频数据文件可以用于生成定制对象,该定制对象又可以覆盖在视频序列中的可定制对象上。例如,针对几个帧生成的视频数据文件可用于掩蔽其中描绘可定制对象的视频帧中的区域,并生成覆盖在视频序列中的掩蔽区域上的定制对象。视频数据文件可以是JSON类型文件。
可以将产生的覆盖写出到新的视频帧并显示。例如,如果来自视频帧序列的特定视频帧描绘了红色T恤,并且定制请求指示了观众希望看到蓝色T恤,则视频数据文件可以包括用于掩蔽帧中描绘红色T恤的区域的处方。视频数据文件还可以包括用于生成T恤的几何形状、变形和翘曲,用于定制蓝色T恤,以及将定制的蓝色T恤覆盖在原始红色T恤上的处方。
定制指令可以包括用于生成定制对象的指令。定制指令可以包括用于使用视频数据文件来生成定制对象的几何形状、生成定制对象的变形和翘曲、以及使用原始视频帧序列的帧变形所生成的定制对象的指令。定制指令可以包括JavaScript代码、WebGL代码、WebGL着色语言代码、基于 JavaScript库的代码、以及客户端计算机130可以用来渲染和显示定制对象的其他信息。
定制指令可以存储在任何类型的数据文件中,包括HTML5文件。包括定制指令的示例HTML5文件在本文中称为“播放器”。可以在客户端计算机130上执行播放器以通过生成定制对象并将定制对象覆盖在在视频序列中的可定制对象上来定制可定制对象的外观。
在步骤270中,服务器计算机110至少将视频数据文件和定制指令 (播放器)发送到客户端计算机130。服务器计算机110可以直接或者间接将视频数据文件和定制指令发送到客户端计算机130。间接发送包括例如由服务器计算机110将视频数据文件和定制指令存储在特定URL地址的特定位置处的web服务器上,并将特定URL地址发送到客户计算机130。
在步骤280中,客户端计算机130接收视频数据文件和定制指令,其共同可以包括可执行视频播放器。客户端计算机130可以直接从服务器计算机110接收它们,或者可以使用由服务器计算机110提供给客户端计算机130的URL地址来下载它们。
在步骤290中,客户端计算机130对视频数据文件执行定制指令以生成定制对象。定制可以包括读取视频数据文件,使用变形目标实例化几何形状,选择几何形状的着色器,以及按照定制指令中所规定的生成定制对象。这还可以包括在定制对象周围添加背景,并将背景和定制对象的描绘保存为处理后的帧。
在步骤292中,处理后的帧与视频帧序列中的特定视频帧同步。这可以通过识别在处理后的视频帧中的特定位置处描绘的特定代码,以及在视频序列中搜索具有同一特定代码的特定视频帧来执行。该特定代码可以是视频帧序列中的帧编号的图形、二进制、黑白表示。同步允许将处理后的帧与来自图像帧序列的特定视频帧配对。一旦发现该对,则用图像视频序列中的特定视频帧对处理后的帧进行变形。
需要同步处理后的图像和特定图像的原因之一是难以预测在客户端计算机130上播放图像帧序列的帧的速度。例如,客户端计算机130显示以下帧比其他帧更快,因此很难预测在处理后的图像准备好之前来自图像序列的相应帧是否排队。通过识别处理后的帧中的某个代码并扫描具有相同特定代码的特定帧的图像帧序列,可以解决同步问题。
在步骤294中,客户端计算机130用特定的视频帧对处理后的图像进行变形。两个帧的变形可以包括在将处理后的图像覆盖在特定视频帧上。得到的图像称为变形帧。
在步骤296中,客户端计算机130在显示设备上显示变形帧。显示的帧可以描绘定制产品。例如,如果原始图像帧序列描绘了红色T恤,并且定制包括用蓝色替换红色,则所显示的帧描绘蓝色T恤。定制还可以包括定制所显示的对象的结构,在所显示的对象上描绘的纹理图案等。
IV.播放交互式、定制视频内容
播放交互式、定制视频内容可涉及服务器计算机与客户端计算机之间的交互。可以通过向客户端计算机提供功能来使能交互,以允许指定定制视频帧序列中描绘的对象的定制细节,并将定制细节发送到服务器计算机。在服务器侧,可以通过向服务器计算机提供功能以接收定制细节,使用定制细节生成视频数据文件和定制指令,以及将视频数据文件和定制指令发送到客户端计算机来使能交互。在接收到数据文件和指令后,客户端计算机可以使用它们来定制对象并在视频帧序列中显示定制对象。
在实施例中,通过指定要定制视频的哪个部分以及如何定制视频的指定部分来执行定制视频内容。例如,定制可以包括指定要定制的视频帧序列中描绘的T恤,并且定制包括将T恤渲染为蓝色。视频帧序列可以描绘稍后描述的正在建模白色T恤的人,如图4所示。定制允许用蓝色T恤的描绘取代白色T恤的描绘。然而,由于将使用3D渲染技术生成T恤,因此T恤的所有翘曲和折痕将具有比T恤的其他部分更深的蓝色。此外,描绘将捕获所有高光和反射,如果这些在T恤上显示。因此,该方法远远超出仅用视频中描绘的对象的另一种颜色替换一种颜色。
该方法的另一个独特特性是定制视频内容的实际渲染发生在客户端计算机上,而不是在服务器计算机上。服务器计算机被配置为生成定制处方,并将处方发送到客户端计算机。客户端计算机正在为查看者预先形成定制内容的实际渲染。在实施例中,处方可以包括视频数据文件和定制指令。
形成鲜明对比的是,其他方法要求在服务器侧定制视频内容,并且将整个定制视频内容从服务器计算机发送到客户端计算机。这对通信带宽提出了很高的要求,因此可能效率低且速度慢。
在实施例中,由于定制指令和视频数据文件的大小通常比实际渲染的定制视频内容小得多,因此在带宽方面实现了显著的节省。将定制指令和视频数据文件从服务器计算机传输到客户端计算机对带宽的负担比传输整个定制视频内容要少。
V.用于播放交互式、定制视频内容的示例处理
在实施例中,当客户端计算机接收到定制视频剪辑的请求时,处理开始。可以经由任何类型的用户界面(包括图形用户界面或命令行界面)来接收请求。客户端计算机可以接收视频剪辑的标识符、定制选项的标识符、定制颜色的标识符等。
在接收到定制请求时,客户端计算机将定制请求发送到服务器计算机。客户端计算机还可以将视频剪辑发送到服务器计算机,或者提供视频剪辑的标识符,使得服务器计算机可以从内容存储库中检索视频剪辑。
在接收到定制请求时,服务器计算机下载视频剪辑并解析定制请求。视频剪辑可以描绘具有嵌入式标记的可定制对象。可定制对象可以是例如视频剪辑中显示的红色T恤,并且定制请求可以指定观看者希望看到该蓝色T恤。
基于请求的内容和视频剪辑的内容,服务器计算机可以生成用于视频剪辑的帧的矢量数据文件。对于给定视频帧,矢量数据文件可包括指示其中描绘可定制对象的设计区域的顶点的信息。矢量数据文件还可以包括所描绘的设计区域的变形参数。矢量数据文件可以是任何类型的数据文件,包括矢量数据JSON类型文件。
服务器可以将矢量数据文件聚合到视频数据文件中,并生成用于生成定制对象的定制指令。视频数据文件可以是视频数据JSON文件。定制指令可以包括HTML5指令、JavaScript代码、WebGL着色语言代码、WebGL 代码和某些JavaScript库的集合。
可以使用例如图2中描绘的步骤210-260来生成视频数据文件和定制指令。
视频数据文件和定制指令可以直接发送到客户端计算机。可选地,服务器计算机可以将视频数据文件和定制指令存储在特定URL地址的基于 web的数据库中,并将指向存储的视频数据文件和定制指令的URL地址发送到客户计算机。
在接收或检索视频数据文件和定制指令时,客户端计算机存储该信息,并开始在视频数据文件上执行定制指令。该信息可以存储在客户端计算机的高速缓存中,并且可以缓冲视频剪辑。
执行定制指令可以包括使用视频数据文件来生成定制对象的几何形状,生成几何形状的变形,以及将颜色和着色器应用于定制对象。例如,可以读取视频数据JSON文件,并且可以实例化具有变形目标的几何形状。然后构造纹理和着色器,并绑定到选择的着色器。
对产生的视频帧(也称为处理后的帧)进行分析以识别嵌入在帧的内容中的某个数字代码。某个代码也称为格雷码(gray code)。它可以是位于视频帧右下角的黑白二进制码,如图9所示。
格雷码允许将处理后的帧与具有相同格雷码的视频片段中的特定帧同步。例如,一旦生成了处理后的帧,就扫描处理后的帧以识别格雷码,提取格雷码并将格雷码用于在帧序列中查找具有相同等级代码的特定视频帧。
一旦处理后的帧与视频剪辑中的特定视频帧同步,就开始渲染定制帧。这可以包括用特定视频帧变形处理后的帧以生成定制帧。可以使用WebGL 库和基于WebGL的代码来执行该处理。
继续上述示例,产生的定制帧将描绘蓝色T恤。产生的定制帧还将描绘原始T恤中示出的所有翘曲和折痕,但是在定制帧中它们是不同的蓝色阴影。
VI.示例标记
由服务器计算机接收到的视频帧可以描绘一件衣服,并且该件衣服可以具有嵌入的标记。标记是包含正方网格的网格。一些正方网格包括点,一些其他正方网格是空的。网格中点的组合创建了唯一图案。
图3描绘了示例标记310。示例标记310是包括12行和10列的网格;然而,标记的大小可能不同。
标记的独特属性之一是标记包括唯一图案。可以以这样的方式设计标记网格,使得网格内的任何4×4的正方网格子集是唯一的。即使滤波器仅找到网格的角,该角也足以猜测整个网格的位置。基于找到的角,滤波器可以猜测图案的其他部分和整个标记。
在所描绘的示例中,网格的任何部分的任何4×4区域中的点图案是唯一的。因此,可以通过确定点是否是任何4×4区域的一部分来确定点是否是标记的一部分。例如,可以使用滤波器来扫描视频帧以查找点。一旦找到至少一些点,滤波器可以确定点是否形成图案的至少一部分。如果是这样,则滤波器可以将所识别的图案部分与参考图案匹配。这样,滤波器可以识别整个图案,并识别标记中的图案的位置以及视频帧中的标记的位置。图案可能在例如正在建模T恤的人周围会变形并扭曲。因此,可能很难识别整个图案。然而,如果找到一些点,则可以猜测剩余点的位置,并且可以近似地估计标记的位置。
标记可用于识别印在视频帧中描绘的对象上的某些对象的位置。标记还可以用于识别帧中描绘的对象中的颜色区域的某些颜色。
可以使用调谐滤波器集合来确定帧内标记的位置。该集合可以包括被配置为识别帧中描绘的标记的一个或多个滤波器。基于识别的标记和预定义的所谓的颜色脱落,滤波器可以确定帧中的一个或多个颜色区域和/或段。例如,可以使用一个滤波器来识别视频帧中的标记,并且可以将另一个滤波器用于其中要应用颜色的帧中的颜色和颜色区域。关于颜色和颜色区域的信息可以存储在数据矢量中。
VII.包含示例标记的示例视频帧
图4描绘了包含示例标记430的示例视频帧410。图4描绘了建模T恤 420的人。T恤420具有嵌入T恤420的前部的标记430。标记430是具有行和列的网格的矩形。它还具有遍布标记430的点。标记430中的翘曲和折痕对应于T恤420中的翘曲和折痕。
滤波器可用于扫描视频帧410并检测帧中所示的标记430。在检测到标记430时,可以使用同一滤波器或另一滤波器来识别由标记430标记的区域。在所描绘的示例中,该区域可以包括整个T恤420。同一滤波器或另一滤波器可以用于分析所识别的区域,并确定可用于渲染T恤420以捕捉T恤的形状的一组顶点和/或多边形,包括织物的翘曲和折痕。可以使用另一个滤波器来确定要用于定制T恤420的颜色或多种颜色。可以使用其他滤波器来生成矢量数据。矢量数据可以包括用于定制T恤420的顶点、多边形和颜色之间的关联或绑定。
VIII.具有分割背景的示例视频帧
在视频帧中分割背景包括识别帧中属于帧中的背景区域的像素。分割还包括将一种颜色分配给包括在背景区域中的像素,并将另一种颜色分配给不包括在背景区域中的像素。颜色的选择取决于实施方式。例如,分割背景可以包括将白色分配给背景像素,将黑色分配给帧中的剩余像素。其他实施方式可以使用其他颜色方案。
图5描绘了具有分割背景的示例视频帧。所描绘的示例示出了包含背景520的帧510。帧510还描绘了建模T恤530的人。通过识别对应于背景 520的像素,用白色替换分配给这些像素的颜色,并用黑色替换所有剩余像素的颜色,来从图4中的帧生成帧510。因此,帧510中的背景520是白色的,并且建模T恤的人的轮廓是黑色的。
IX.具有分割产品区域的示例视频帧
分割视频帧中的产品区域与分割视频帧中的背景相反。它包括识别帧中属于帧中的产品区域的像素,将一种颜色分配给包括在产品区域中的像素,以及将另一种颜色分配给不包括在产品区域中的像素。颜色的选择取决于实施方式。例如,分割产品区域可以包括将白色分配给产品区域像素,将黑色分配给帧中的剩余像素。其他实施方式可以使用其他颜色方案。
图6描绘了具有分割产品区域的示例视频帧。所描绘的示例示出了包含背景620的帧610。帧610还描绘了产品区域630。通过识别对应于产品区域630的像素,用白色替换分配给这些像素的颜色,并用黑色替换所有剩余像素的颜色,来由图4中的帧410生成帧610。因此,帧610中的产品区域630是白色的,而背景620是黑色的。
X.具有重构标记的示例视频帧
图7描绘了具有重构示例标记的示例视频帧。所描绘的示例示出了描绘产品区域720的帧710。产品区域720由一个或多个滤波器分析以识别标记的至少一部分。由于产品区域720中描绘的T恤的翘曲和折痕,可能仅识别出标记的一部分。然而,由于标记中每个4×4子网格的唯一属性,如果识别出标记的至少一部分,则可以近似地估计标记的剩余部分。在图7 中将重构的标记描绘为标记730。
XI.在移除示例标记之前的示例视频帧
图8描绘了在移除示例标记之前的示例视频帧。所描绘的示例示出了描绘产品区域820的帧810。产品区域820包括重构标记830。重构标记 830可以用于确定要定制的对象的产品区域。一旦确定了产品区域和对象,就可以移除重构标记830。
一旦移除了重构标记830,就可以如图2中所述定制产品区域。一旦定制了产品区域,就可以应用基于分割产品区域的掩码以从帧810提取定制产品的图像。
XII.具有示例时间代码的示例视频帧
图9描绘了具有示例时间代码的示例视频帧。示例视频帧包括特定视频帧910和定制视频帧920。两个帧都分别包括格雷码912和922,并且在相应的右角中。通常,代码912、922仅包括几个像素。然而,为了使代码在图9中可见,代码912、922已被放大。
代码912、922用于使定制视频帧920与特定视频帧910同步,特定视频帧910用于生成定制视频帧920。由于在生成定制视频帧920时,还不知道特定视频帧910是否排队等待显示,因此需要同步帧。在定制帧920可以包括在视频帧序列中之前,客户端计算机需要在原始视频帧序列中查找用于生成定制视频帧920的特定视频帧910。代码912和922用于此目的。由于代码对应于帧序列号并且代码很小,因此可以快速且有效地执行扫描视频帧序列中的帧以获得代码。
XIII.某些实施方案的益处
实施例的一个益处是能够快速定制交互式视频中描绘的产品。这是可以实现的,因为在服务器计算机和客户端计算机之间交换的信息很小。服务器计算机仅向客户端计算机发送定制处方,例如视频数据文件和定制指令,用于定制视频中所示出的产品的外观,并且所发送的文件和指令相对较小。将处方从服务器计算机传输到客户端计算机比发送整个定制视频内容需要更少的带宽。由于可以快速执行视频的定制,因此该技术可以在诸如游戏应用的性能敏感应用中广泛实现。
实施例的另一益处是能够将交互式视频的非定制内容与交互式视频的定制内容分离。可以在客户端计算机上高速缓存大的非定制内容,并且可以由服务器计算机有效地向客户端提供定制内容。定制内容的帧可以覆盖在客户端侧的非定制内容的帧上,并且可以在客户端的显示器上有效地渲染所得到的定制交互式视频。
由实施例提供的又一改进是基于代码的帧同步,其允许将非定制内容的帧与具有定制内容的帧同步。可以使用嵌入在帧中的代码来实现帧的同步。代码可以用于将具有定制内容的帧与非定制内容的帧进行匹配。代码匹配方法允许同步帧而不管它们之间的延迟。
此外,实施例改进了需要为3D模型构建几何形状和使3D模型动画化的方法。创建3D模型并使其动画化是耗时且计算成本高的。与此形成鲜明对比的是,所提出的方法允许生成高质量的定制内容,而无需使模型动画化。
XIV.实施例-硬件概述
根据实施例,这里描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备 (诸如被持久地编程以执行技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为根据固件、存储器、其他存储器或组合中的程序指令执行技术的一个或多个通用硬件处理器其。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、网络设备或包含硬连线和/或程序逻辑以实现这些技术的任何其他设备。
例如,图10是示出其上可以实现该方法的实施例的计算机系统1000 的框图。计算机系统1000包括总线1002或用于传递信息的其他通信机制,以及与总线1002耦合以处理信息的硬件处理器1004。硬件处理器1004可以是例如通用微处理器。
计算机系统1000还包括耦合到总线1002的主存储器1006(例如随机存取存储器(RAM)或其他动态存储设备)用于存储将由处理器1004执行的信息和指令。主存储器1006也可以用于在执行由处理器1004执行的指令期间存储临时变量或其他中间信息。这些指令当存储在处理器1004可访问的非暂时性存储介质中时,使计算机系统1000成为被定制为执行指令中指定的操作的专用机器。
计算机系统1000还包括只读存储器(ROM)1008或耦合到总线1002 的其他静态存储设备,用于存储处理器1004的静态信息和指令。存储设备 1010(例如磁盘、光盘或固态驱动器)被耦合到总线1002并用于存储信息和指令。
计算机系统1000可以经由总线1002耦合到显示器1012(例如阴极射线管(CRT))用于向计算机用户显示信息。包括字母数字键和其他键的输入设备1014耦合到总线1002,用于将信息和命令选择传送到处理器1004。另一种类型的用户输入设备是光标控制1016(例如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器1004并用于控制显示器1012上的光标移动。该输入设备通常在两个轴(第一轴(例如x) 和第二轴(例如y))上具有两个自由度,允许设备指定平面中的位置。
计算机系统1000可以使用定制的硬连线逻辑、一个或多个ASIC或 FPGA、固件和/或程序逻辑来实现本文所述的技术,所述固件和/或程序逻辑与计算机系统相结合使计算机系统1000成为专用机器。根据一个实施例,这里的技术由计算机系统1000响应于处理器1004执行包含在主存储器 1006中的一个或多个指令的一个或多个序列来执行。这些指令可以从另一存储介质(例如存储设备1010)读入主存储器1006。包含在主存储器1006 中的指令序列的执行使处理器1004执行这里描述的处理步骤。在替代实施例中,可以使用硬连线电路代替软件指令或与软件指令组合。
这里使用的术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂时性介质。这种存储介质可以包括非易失性介质和/ 或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器(例如存储设备1010)。易失性介质包括动态存储器,例如主存储器1006。常见形式的存储介质包括例如软盘、磁盘、硬盘、固态硬盘、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他内存芯片或盒式磁带。
存储介质不同于但可以与传输介质结合使用。传输介质参与在存储介质之间传输信息。例如,传输介质包括同轴电缆、铜线和光纤(包括包含总线1002的导线)。传输介质也可以采用声波或光波的形式,例如在无线电波和红外数据通信期间产生的那些波。
在将一个或多个指令的一个或多个序列传送到处理器1004以供执行时可以涉及各种形式的介质。例如,指令最初可以承载在远程计算机的磁盘或固态驱动器上。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统1000本地的调制解调器可以在电话线上接收数据并使用红外发射器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路可以将数据放置在总线1002上。总线1002将数据传送到主存储器1006,处理器1004从主存储器1006检索并执行指令。主存储器1006接收到的指令可以可选地在由处理器1004执行之前或之后存储在存储设备1010上。
计算机系统1000还包括耦合到总线1002的通信接口1018。通信接口 1018提供耦合到与本地网络1022连接的网络链路1020的双向数据通信。例如,通信接口1018可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或提供与相应类型电话线的数据通信连接的调制解调器。作为另一示例,通信接口1018可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何这样的实施方式,通信接口1018发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光学信号。
网络链路1020通常通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路1020可以通过本地网络1022提供到主计算机1024或由因特网服务提供商(ISP)1026操作的数据设备的连接。ISP 1026又通过全球分组数据通信网络(现在通常被称为“因特网”)1028提供数据通信服务。本地网络1022和因特网1028都使用承载数字数据流的电信号、电磁信号或光学信号。通过各种网络的信号和网络链路1020上的信号以及通过通信接口1018的信号(其将数字数据传送到计算机系统1000和从计算机系统 1000传送数字数据)是传输介质的示例形式。
计算机系统1000可以通过网络、网络链路1020和通信接口1018发送消息和接收数据(包括程序代码)。在因特网示例中,服务器1030可以通过因特网1028、ISP 1026、本地网络1022和通信接口1018发送用于应用程序的请求代码。
接收到的代码可以被接收时由处理器1004执行,和/或存储在存储设备1010或其他非易失性存储器中以供稍后执行。
在前面的说明书中,参考许多具体细节描述了该方法的实施例,这些细节可以根据实施方式而变化。因此,说明书和附图应被视为说明性的而非限制性的。该方法范围的唯一和排他性指标,以及申请人打算作为该方法范围的内容,是本申请中公开的多组权利要求的字面和等同范围,具体形式为这些权利要求公开,包括任何后续更正。
XV.示例代码指令
以下是用于将图像划分为多个区域的示例指令集。至少一部分指令可以包括在区域识别指令210的一个实施例中。
附录A
播放器的HTML 5代码
<!DOCTYPE html>
<html>
<head>
<title>PlayerOne</title>
<script type="text/javascript"src="../libs/three.js"></script>
<script type="text/javascript"src="../libs/dat.gui.js"></script>
<style>
body{
/*set margin to 0and overflow to hidden,to go fullscreen*/
margin:0;
overflow:hidden;
}
</style>
</head>
<body>
<video id="video"style="display:none;position:absolute;left:15px;top: 75px;"
src="../assets/video/videoTest.mp4"controls="false" autoplay="false"></video>
<!--Div which will hold the Output-->
<div id="WebGL-output">
</div>
<!--vertex-video,sets vUvSec to the vertex uv,transforms vertexposition into model space and projects it.-->
<script id="vertex-video"type="x-shader/x-vertex">
//VERTEX SHADER
varying vec2 vUvSec;
void main()
{
vUvSec=uv;//vUvSec is used to map the video for the background plate
vec4 mvPosition=modelViewMatrix*vec4(position,1.0);
gl_Position=projectionMatrix*mvPosition;
}
</script>
<!--fragment-video,renders the left side of the video to thebackground plate -->
<script id="fragment-video"type="x-shader/x-fragment">
//FRAGMENT_SHADER
#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D tVideo;
uniform sampler2D tColorCurve;
uniform float specularBias;
uniform float specularScale;
varying vec2 vUvSec;
void main(void)
{
vec2 uvLeft;
vec2 uvRight;
vec2 uvCurve;
uvLeft.x=vUvSec.x*0.5;
uvLeft.y=vUvSec.y;
uvRight.x=(vUvSec.x*0.5)+0.5;
uvRight.y=vUvSec.y;
vec4 Ca=texture2D(tVideo,uvLeft);
vec4 Cb=texture2D(tVideo,uvRight);
float alpha=Cb.g;
if(vUvSec.y<0.1)
{
alpha=0.0;
}
uvCurve.x=Ca.g;
uvCurve.y=0.0;
vec4 Cc=texture2D(tColorCurve,uvCurve);
float specular=(Ca.g+specularBias)*specularScale;
specular=clamp(specular,0.0,1.0);
Cc=Cc+specular;
gl_FragColor=(Ca*(1.0-alpha))+(Cc*alpha);
}
</script>
<!--vertex-design,vertex shader for drawing the design-->
<script id="vertex-design"type="x-shader/x-vertex">
//VERTEX SHADER
uniform float morphTargetInfluences[4];
uniform float uvScale;
varying vec2 vUvOne;
varying vec2 vUvSec;
void main()
{
//apply morph targets set up by threejs
vec3 morphed=vec3(0.0);
morphed+=(morphTarget0-position)*morphTargetInfluences[0];
morphed+=(morphTarget1-position)*morphTargetInfluences[1];
morphed+=(morphTarget2-position)*morphTargetInfluences[2];
morphed+=(morphTarget3-position)*morphTargetInfluences[3];
morphed+=position;
vUvSec=uv;//vUvSec is used to map the design
//Transform the vertex position into screen space
vec4 mvPosition=modelViewMatrix*vec4(morphed,1.0);
gl_Position=projectionMatrix*mvPosition;
//vUvOne is used to map the video frame for lighting the design
//This can be calculated from the vertex position using the uvScale.
vUvOne.x=(mvPosition.x*uvScale)+0.5;
vUvOne.y=(mvPosition.y*uvScale)+0.5;
}
</script>
<!--fragment-design0,fragment shader for drawing the design0-->
<script id="fragment-design0"type="x-shader/x-fragment">
//FRAGMENT_SHADER
#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D tVideo;
uniform sampler2D tDesign0;
uniform float designAmbient;
uniform float specularBias;
uniform float specularScale;
varying vec2 vUvOne;
varying vec2 vUvSec;
uniform sampler2D tColorCurve;
void main(void)
{
vec2 uvLeft;
vec2 uvMark;
vec2 uvRight;
vec2 uvCurve;
uvLeft.x=vUvOne.x*0.5;
uvLeft.y=vUvOne.y;
uvRight.x=(vUvOne.x*0.5)+0.5;
uvRight.y=vUvOne.y;
uvMark.x=vUvSec.x;
uvMark.y=1.0-vUvSec.y;
vec4 Ca=texture2D(tVideo,uvLeft);
vec4 Cb=texture2D(tDesign0,uvMark);
vec4 Cc=texture2D(tVideo,uvRight);
float lum=Ca.g;
float alpha=Cb.a;
float shirtAlpha=Cc.g;
float designAlpha=Cc.r;
alpha=alpha*designAlpha;
uvCurve.x=lum;
uvCurve.y=0.0;
vec4 Ce=texture2D(tColorCurve,uvCurve);
Ca=(Ca*(1.0-shirtAlpha))+(Ce*shirtAlpha);
float ambientScale=1.0-designAmbient;
float specular=((lum+specularBias)*specularScale)*shirtAlpha;
specular=clamp(specular,0.0,1.0);
Cb.r=(((Cb.r*ambientScale)+designAmbient)*lum);
Cb.g=(((Cb.g*ambientScale)+designAmbient)*lum);
Cb.b=(((Cb.b*ambientScale)+designAmbient)*lum);
Cb=(Cb*alpha)+Ca*(1.0-alpha);
Cb=Cb+specular;
Cb.a=1.0;
gl_FragColor=Cb;
}
</script>
<!--Javascript for running PlayerOne-->
<script type="text/javascript">
var texture;
//once everything is loaded,we run our Three.js stuff.
function init(){
//variables for sizing the render
var renderLeft='15px';
var renderTop='15px';
var renderSize=1024;
//variables for lighting
var ambientLevel=0.2;
var specularBias=-0.87;
var specularScale=0.13;
//variables and classes for handling time code.
//time code is embedded as a Gray code in the lower left corner ofthe video frame
var timeCodeCanvas=document.createElement('canvas');
timeCodeCanvas.width=128;
timeCodeCanvas.height=8;
var timeCode=0;
var lastCode=0;
var frameCount=0;
var morphTargetFrame=1000.0/15;//frame time for morph targets
var timeCodeFrame=morphTargetFrame*0.995;//frame time for timeCode,slightly less for hysteresis
//variables for camera and geometry scales
//these are calculated so the video will fit the frame properly
var cameraDist=28.0;
var geomScale=23.0;
var geomUVScale=1.0/geomScale;
var cameraFov=45.0;
//managing time
var clock=new THREE.Clock();
var currentTime=0;
var lastTime=0;
//create the new scene.
var scene=new THREE.Scene();
//create a camera,which defines where we're looking at.
var camera=new THREE.PerspectiveCamera(cameraFov,1,0.1,1000);
//position and point the camera to the center of the scene
camera.position.x=00;
camera.position.y=0;
camera.position.z=cameraDist;
camera.lookAt(new THREE.Vector3(0,0,0));
//create a render and set the size
var webGLRenderer=new THREE.WebGLRenderer({alpha:true,antialias:true});
webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE,1.0));
webGLRenderer.setSize(renderSize,renderSize);
webGLRenderer.shadowMapEnabled=false;
//add the output of the renderer to the html element
document.getElementById("WebGL-
output").appendChild(webGLRenderer.domElement);
webGLRenderer.domElement.style.position='absolute';
webGLRenderer.domElement.style.left=renderLeft;
webGLRenderer.domElement.style.top=renderTop;
//set up the Textures for rendering as shaders
var video=document.getElementById('video');
var videoTexture=new THREE.VideoTexture(video);
var designTexture0= THREE.ImageUtils.loadTexture("../assets/texture/designTest.png");
var colorCurve= THREE.ImageUtils.loadTexture("../assets/texture/colorCurveTest.png");
//Setup the background plate which renders the video
{
var vertPlateShader=document.getElementById('vertex- video').innerHTML;
var fragPlateShader=document.getElementById('fragment- video').innerHTML;
}
//Setup the markup mesh which renders the markup as morph targets
{
var mesh;
var meshAnim;
var loader=new THREE.JSONLoader();
var designName="";
loader.load('../assets/model/morphTest.js',function(geometry,mat){
console.log(mat);
console.log(geometry);
if(mat)
{
if(mat[0])
{
ambientLevel=mat[0].ambient.g;
specularBias=-mat[0].color.r;
specularScale=mat[0].color.g;
designName=mat[0].name;
}
}
var attributes={};//custom attributes
var uniforms={//custom uniforms(your textures)
tVideo:{type:"t",value:videoTexture},
tDesign0:{type:"t",value:designTexture0},
tColorCurve:{type:"t",value:colorCurve},
uvScale:{type:'1f',value:geomUVScale},
designAmbient:{type:'1f',value:ambientLevel},
specularBias:{type:'1f',value:specularBias},
specularScale:{type:'1f',value:specularScale}
};
var plateMaterial=new THREE.ShaderMaterial({
uniforms:uniforms,
attributes:attributes,
vertexShader:vertPlateShader,
fragmentShader:fragPlateShader
});
var plate=new THREE.Mesh(new THREE.PlaneGeometry(geomScale,geomScale,geomScale),plateMaterial);
scene.add(plate);
//console.log(plate);
var designMat0=new THREE.ShaderMaterial({
morphTargets:true,
uniforms:uniforms,
attributes:attributes,
vertexShader:document.getElementById('vertex-design').innerHTML,
fragmentShader:document.getElementById('fragment- design0').innerHTML
});
var faceMat=new THREE.MeshFaceMaterial();
faceMat.materials.push(designMat0);
mesh=new THREE.Mesh(geometry,faceMat);
mesh.position.x=-1000;
mesh.position.z=0;
mesh.scale.x=geomScale;
mesh.scale.y=geomScale;
mesh.scale.z=geomScale;
scene.add(mesh);
meshAnim=new THREE.MorphAnimMesh(geometry,faceMat);
meshAnim.duration=geometry.morphTargets.length*morphTargetFrame;
meshAnim.position.x=0;
meshAnim.position.z=0;
meshAnim.scale.x=geomScale;
meshAnim.scale.y=geomScale;
meshAnim.scale.z=geomScale;
scene.add(meshAnim);
},'../assets/model');
}
//call the render function
render();
/**
*Gets the current gray code embedded in the video frame.
*The code is rendered into the lower right corner of the video whenit is created.
*/
function getGrayCode(){
var grayCode=0;
//fetch the size of the timeCodeCanvas and the video
var tcodeWidth=timeCodeCanvas.width;
var tcodeHeight=timeCodeCanvas.height;
var videoWidth=video.videoWidth;
var videoHeight=video.videoHeight;
//create the context to pull the pixel data
var context=timeCodeCanvas.getContext('2d');
//only draw the lower right corner of the video to timeCodeCanvas
context.drawImage(video,videoWidth-tcodeWidth,
videoHeight-tcodeHeight,
tcodeWidth,tcodeHeight,
0,0,tcodeWidth,tcodeHeight);
var cleanframe=true;//only pull timecode from a frame with a cleansignal
var codeStep=tcodeWidth/16;//the step to read a bit of gray code
var codeOffset=codeStep/2;//offset to middle of sample
var codeOversample=codeOffset/2;//offset to middle of sample
//fetch the image data from the context
var imagedata=context.getImageData(0,0,tcodeWidth,tcodeHeight);
var mask=1<<16;
//step through 16 bits of gray code.
var offset00=((-codeOversample+imagedata.width*-codeOversample)* 4)+1;
var offset01=((codeOversample+imagedata.width*-codeOversample)* 4)+1;
var offset10=((-codeOversample+imagedata.width*codeOversample)* 4)+1;
var offset11=((codeOversample+imagedata.width*codeOversample)*4) +1;
for(var i=0;i<16;i++){
mask=mask>>1;
var position=(((i*codeStep)+codeOffset)+imagedata.width*codeOffset)*4;
var data=imagedata.data;
var green=data[position+offset00];
green+=data[position+offset01];
green+=data[position+offset10];
green+=data[position+offset11];
if(green>=840){
grayCode+=mask;
}
if(green>25&&green<840)
{
cleanframe=false;
}
}
//if we found a clean frame of gray code...
if(cleanframe)
{
grayCode=grayCode^(grayCode>>16);
grayCode=grayCode^(grayCode>>8);
grayCode=grayCode^(grayCode>>4);
grayCode=grayCode^(grayCode>>2);
grayCode=grayCode^(grayCode>>1);
timeCode=grayCode;
console.log(timeCode);
}
}
/**
*Render a frame for ThreeJS.
*/
function render(){
getGrayCode();//fetch the time code for the video
{
webGLRenderer.clear();
//dwell on the first video frame for 30 render frames/ //this helpsto sync the video
if(frameCount<30)
{
currentTime=0;
video.currentTime=0;
}
else
{
//get the milliseconds since the last render frame.
var delta=0;
//if the timeCode has changed,use it to sync the delta
if(lastCode<timeCode){
lastCode=timeCode;
var thisTime=timeCode*timeCodeFrame;
delta=thisTime-lastTime;
lastTime=thisTime;
}
//update the time for the mesh animation.
currentTime+=delta;
//update the mesh animation
if(meshAnim){
if(currentTime<meshAnim.duration){
meshAnim.updateAnimation(delta);
}
}
}
webGLRenderer.render(scene,camera);
requestAnimationFrame(render);
}
frameCount++;
}
}
//release the video reference,since
function release(){
var video=document.getElementById('video');
video.remove();
}
//once everything is loaded,we run our Three.js stuff.
window.onload=init;
window.onunload=release;
</script>
</body>
</html>
附录B
矢量数据的JSON文件
{"metadata":{"formatVersion":3,
"description":"Output:cvThreeJSON::cvThreeJSON Date:Sep 2 2016 Time:15:17:51"},
"scale":1,
"vertices":[-0.0826355,0.109686,0,-0.0640445,0.116467,0,- 0.0401443,0.121826,0,- 0.0163707,0.124923,0,0.00844073,0.123864,0,0.0339527,0.122344,0,0.059426 7,0.120257,0,0.0847544,0.11633,0,0.109159,0.110085,0,0.132466,0.100162,0,0 .149348,0.0896114,0,-0.0806137,0.0888012,0,-0.0634713,0.0954543,0,- 0.0425391,0.10033,0,- 0.0184961,0.101741,0,0.00609714,0.101355,0,0.0313099,0.0997559,0,0.05649 51,0.0976812,0,0.0813441,0.0937345,0,0.105421,0.0866807{"metadata": {"formatVersion":3,
"description":"Output:cvThreeJSON::cvThreeJSON Date:Sep 2 2016 Time:15:17:51"},
"scale":1,
"vertices":[-0.0826355,0.109686,0,-0.0640445,0.116467,0,- 0.0401443,0.121826,0,- 0.0163707,0.124923,0,0.00844073,0.123864,0,0.0339527,0.122344,0,0.059426 7,0.120257,0,0.0847544,0.11633,0,0.109159,0.110085,0,0.132466,0.100162,0,0 .149348,0.0896114,0,-0.0806137,0.0888012,0,-0.0634713,0.0954543,0,- 0.0425391,0.10033,0,-
[…]
Claims (20)
1.一种用于定义可定制视频内容的方法,该方法包括:
由服务器计算机接收包括一个或多个视频帧的视频帧序列;
由所述服务器计算机将一个或多个滤波器应用于所述一个或多个视频帧以生成视频数据文件,该视频数据文件捕获在所述一个或多个视频帧中描绘的可定制对象的几何形状;
由所述服务器计算机生成用于定制所述可定制对象的外观的定制指令;
从所述服务器计算机向客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机执行关于所述视频数据文件的所述定制指令以渲染定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
2.根据权利要求1所述的方法,还包括:
由所述服务器计算机从所述客户端计算机接收定制所述一个或多个视频帧中描绘的所述可定制对象的请求;
针对所述一个或多个视频帧的每个帧生成所述可定制对象的矢量数据文件;
其中,帧的所述矢量数据文件包括关于所述帧中描绘的所述可定制对象的顶点和几何形状的信息;
基于针对所述视频帧序列中的每个帧生成的所述矢量数据文件,生成所述视频数据文件;
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机渲染所述定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
3.根据权利要求1所述的方法,还包括:
由所述服务器计算机识别所述视频帧序列的帧中嵌入的数字代码;
将所述数字代码嵌入所述视频数据文件中的定制帧中;
其中,所述数字代码是用于对所述视频帧序列中的帧进行计时的时间代码;
使所述客户端计算机使用所述数字代码将来自所述视频帧序列的帧与来自所述视频数据文件的所述定制帧同步。
4.根据权利要求1所述的方法,还包括:
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机用所述视频帧序列中的所述可定制对象来变形所述视频数据文件中的所述定制对象。
5.根据权利要求1所述的方法,其中,所述视频数据文件是JavaScript对象表示法(JSON)文件。
6.根据权利要求1所述的方法,其中,所述定制指令包括下列项中的一个或多个:几何形状渲染指令、颜色应用指令、阴影应用指令、照明应用指令或反射应用指令。
7.根据权利要求1所述的方法,还包括:
由所述服务器计算机将所述视频数据文件和所述定制指令存储在特定位置的数据库中;
由所述服务器计算机向所述客户端计算机发送到所述特定位置的地址。
8.一种服务器计算机,包括:
一个或多个处理器;
一个或多个存储器单元;以及
一个或多个非暂时性计算机可读存储介质,存储一个或多个计算机指令的,所述一个或多个计算机指令在由所述一个或多个处理器执行时使得:
由服务器计算机接收包括一个或多个视频帧的视频帧序列;
由所述服务器计算机将一个或多个滤波器应用于所述一个或多个视频帧以生成视频数据文件,该视频数据文件捕获在所述一个或多个视频帧中描绘的可定制对象的几何形状;
由所述服务器计算机生成用于定制所述可定制对象的外观的定制指令;
从所述服务器计算机向客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机执行关于所述视频数据文件的所述定制指令以渲染定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
9.根据权利要求8所述的服务器计算机,其中,所述一个或多个非暂时性计算机可读存储介质包括附加指令用于:
由所述服务器计算机从所述客户端计算机接收定制所述一个或多个视频帧中描绘的所述可定制对象的请求;
针对所述一个或多个视频帧的每个帧生成所述可定制对象的矢量数据文件;
其中,帧的所述矢量数据文件包括关于所述帧中描绘的所述可定制对象的顶点和几何形状的信息;
基于针对所述视频帧序列中的每个帧生成的所述矢量数据文件,生成所述视频数据文件;
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机渲染所述定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
10.根据权利要求8所述的服务器计算机,其中,所述一个或多个非暂时性计算机可读存储介质包括附加指令用于:
由所述服务器计算机识别所述视频帧序列的帧中嵌入的数字代码;
将所述数字代码嵌入所述视频数据文件中的定制帧中;
其中,所述数字代码是用于对所述视频帧序列中的帧进行计时的时间代码;
使所述客户端计算机使用所述数字代码将来自所述视频帧序列的帧与来自所述视频数据文件的所述定制帧同步。
11.根据权利要求8所述的服务器计算机,其中,所述一个或多个非暂时性计算机可读存储介质包括附加指令用于:
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机用所述视频帧序列中的所述可定制对象来变形所述视频数据文件中的所述定制对象。
12.根据权利要求8所述的服务器计算机,其中,所述视频数据文件是JavaScript对象表示法(JSON)文件。
13.根据权利要求8所述的服务器计算机,其中,所述定制指令包括下列项中的一个或多个:几何形状渲染指令、颜色应用指令、阴影应用指令、照明应用指令或反射应用指令。
14.根据权利要求8所述的服务器计算机,其中,所述一个或多个非暂时性计算机可读存储介质包括附加指令用于:
由所述服务器计算机将所述视频数据文件和所述定制指令存储在特定位置的数据库中;
由所述服务器计算机向所述客户端计算机发送到所述特定位置的地址。
15.一种或多种非暂时性计算机可读存储介质,存储一个或多个指令序列,所述一个或多个指令序列在被执行时使得:
由服务器计算机接收包括一个或多个视频帧的视频帧序列;
由所述服务器计算机将一个或多个滤波器应用于所述一个或多个视频帧以生成视频数据文件,该视频数据文件捕获在所述一个或多个视频帧中描绘的可定制对象的几何形状;
由所述服务器计算机生成用于定制所述可定制对象的外观的定制指令;
从所述服务器计算机向客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机执行关于所述视频数据文件的所述定制指令以渲染定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
16.根据权利要求15所述的一种或多种非暂时性计算机可读存储介质,存储附加指令用于:
由所述服务器计算机从所述客户端计算机接收定制所述一个或多个视频帧中描绘的所述可定制对象的请求;
针对所述一个或多个视频帧的每个帧生成所述可定制对象的矢量数据文件;
其中,帧的所述矢量数据文件包括关于所述帧中描绘的所述可定制对象的顶点和几何形状的信息;
基于针对所述视频帧序列中的每个帧生成的所述矢量数据文件,生成所述视频数据文件;
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机渲染所述定制对象,并将所述定制对象覆盖在所述视频帧序列中的所述可定制对象上。
17.根据权利要求15所述的一种或多种非暂时性计算机可读存储介质,存储附加指令用于:
由所述服务器计算机识别所述视频帧序列的帧中嵌入的数字代码;
将所述数字代码嵌入所述视频数据文件中的定制帧中;
其中,所述数字代码是用于对所述视频帧序列中的帧进行计时的时间代码;
使所述客户端计算机使用所述数字代码将来自所述视频帧序列的帧与来自所述视频数据文件的所述定制帧同步。
18.根据权利要求15所述的一种或多种非暂时性计算机可读存储介质,存储附加指令用于:
从所述服务器计算机向所述客户端计算机发送所述视频数据文件和所述定制指令,以使所述客户端计算机用所述视频帧序列中的所述可定制对象来变形所述视频数据文件中的所述定制对象。
19.根据权利要求15所述的一种或多种非暂时性计算机可读存储介质,其中,所述视频数据文件是JavaScript对象表示法(JSON)文件。
20.根据权利要求15所述的一种或多种非暂时性计算机可读存储介质,其中,所述定制指令包括下列项中的一个或多个:几何形状渲染指令、颜色应用指令、阴影应用指令、照明应用指令或反射应用指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662414534P | 2016-10-28 | 2016-10-28 | |
US62/414,534 | 2016-10-28 | ||
PCT/US2017/056787 WO2018080826A1 (en) | 2016-10-28 | 2017-10-16 | System and method for definition, capture, assembly and display of customized video content |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110199323A true CN110199323A (zh) | 2019-09-03 |
CN110199323B CN110199323B (zh) | 2023-08-15 |
Family
ID=62019940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780067194.9A Active CN110199323B (zh) | 2016-10-28 | 2017-10-16 | 用于定义、捕获、组装和显示定制视频内容的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (7) | US10283165B2 (zh) |
EP (1) | EP3533033A4 (zh) |
CN (1) | CN110199323B (zh) |
CA (1) | CA3041791C (zh) |
WO (1) | WO2018080826A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11831960B2 (en) * | 2013-03-06 | 2023-11-28 | David A. Taylor | Media sharing and communication system |
EP4071704A1 (en) | 2015-08-10 | 2022-10-12 | Zazzle Inc. | System and method for digital markups of custom products |
CA3041791C (en) | 2016-10-28 | 2023-12-12 | Zazzle Inc. | Process for defining, capturing, assembling, and displaying customized video content |
US20230386196A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20230385467A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20230384922A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20230385465A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20230386108A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20240020430A1 (en) | 2022-05-29 | 2024-01-18 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
US20230385466A1 (en) | 2022-05-29 | 2023-11-30 | Zazzle Inc. | System and method for authoring high quality renderings and generating manufacturing output of custom products |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593353A (zh) * | 2008-05-28 | 2009-12-02 | 日电(中国)有限公司 | 图像处理方法和设备以及视频系统 |
US20100122286A1 (en) * | 2008-11-07 | 2010-05-13 | At&T Intellectual Property I, L.P. | System and method for dynamically constructing personalized contextual video programs |
US20130272679A1 (en) * | 2012-04-12 | 2013-10-17 | Mario Luis Gomes Cavalcanti | Video Generator System |
CN103606182A (zh) * | 2013-11-19 | 2014-02-26 | 华为技术有限公司 | 图像渲染方法及装置 |
CN104050657A (zh) * | 2013-03-14 | 2014-09-17 | 彩滋公司 | 基于颜色和颜色差异的对图像的分割 |
US20150006751A1 (en) * | 2013-06-26 | 2015-01-01 | Echostar Technologies L.L.C. | Custom video content |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080062322A1 (en) * | 2006-08-28 | 2008-03-13 | Ortiva Wireless | Digital video content customization |
US8639661B2 (en) * | 2008-12-01 | 2014-01-28 | Microsoft Corporation | Supporting media content revert functionality across multiple devices |
US8463848B2 (en) * | 2009-07-15 | 2013-06-11 | Hippocrene Llc | System and method of transmitting data over a computer network including for presentations over multiple channels in parallel |
WO2012060803A1 (en) * | 2010-11-05 | 2012-05-10 | Thomson Licensing | System and method for providing object substitution in video |
US9626798B2 (en) * | 2011-12-05 | 2017-04-18 | At&T Intellectual Property I, L.P. | System and method to digitally replace objects in images or video |
US20130162766A1 (en) * | 2011-12-22 | 2013-06-27 | 2Dinto3D LLC | Overlaying frames of a modified video stream produced from a source video stream onto the source video stream in a first output type format to generate a supplemental video stream used to produce an output video stream in a second output type format |
JP5983941B2 (ja) * | 2012-01-30 | 2016-09-06 | パナソニックIpマネジメント株式会社 | 画像編集装置およびサムネイル生成方法 |
RU2014143783A (ru) * | 2012-03-30 | 2016-05-27 | Конинклейке Филипс Н.В. | Начальное давление для устройств респираторной терапии |
US9747727B2 (en) * | 2014-03-11 | 2017-08-29 | Amazon Technologies, Inc. | Object customization and accessorization in video content |
US10430664B2 (en) * | 2015-03-16 | 2019-10-01 | Rohan Sanil | System for automatically editing video |
WO2018035196A1 (en) * | 2016-08-16 | 2018-02-22 | Visbit Inc. | Interactive 360° vr video streaming |
US11412312B2 (en) * | 2016-09-28 | 2022-08-09 | Idomoo Ltd | System and method for generating customizable encapsulated media files |
CA3041791C (en) | 2016-10-28 | 2023-12-12 | Zazzle Inc. | Process for defining, capturing, assembling, and displaying customized video content |
-
2017
- 2017-10-16 CA CA3041791A patent/CA3041791C/en active Active
- 2017-10-16 US US15/785,015 patent/US10283165B2/en active Active
- 2017-10-16 EP EP17864273.2A patent/EP3533033A4/en not_active Withdrawn
- 2017-10-16 WO PCT/US2017/056787 patent/WO2018080826A1/en unknown
- 2017-10-16 CN CN201780067194.9A patent/CN110199323B/zh active Active
-
2019
- 2019-04-30 US US16/399,076 patent/US10553251B2/en active Active
-
2020
- 2020-01-03 US US16/733,904 patent/US10726875B2/en active Active
- 2020-07-23 US US16/936,988 patent/US11062737B2/en active Active
-
2021
- 2021-06-09 US US17/342,856 patent/US11443773B2/en active Active
-
2022
- 2022-08-16 US US17/888,945 patent/US11756589B2/en active Active
- 2022-08-16 US US17/888,934 patent/US11749310B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593353A (zh) * | 2008-05-28 | 2009-12-02 | 日电(中国)有限公司 | 图像处理方法和设备以及视频系统 |
US20100122286A1 (en) * | 2008-11-07 | 2010-05-13 | At&T Intellectual Property I, L.P. | System and method for dynamically constructing personalized contextual video programs |
US20130272679A1 (en) * | 2012-04-12 | 2013-10-17 | Mario Luis Gomes Cavalcanti | Video Generator System |
CN104050657A (zh) * | 2013-03-14 | 2014-09-17 | 彩滋公司 | 基于颜色和颜色差异的对图像的分割 |
US20150006751A1 (en) * | 2013-06-26 | 2015-01-01 | Echostar Technologies L.L.C. | Custom video content |
CN103606182A (zh) * | 2013-11-19 | 2014-02-26 | 华为技术有限公司 | 图像渲染方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20190259422A1 (en) | 2019-08-22 |
US11443773B2 (en) | 2022-09-13 |
US11756589B2 (en) | 2023-09-12 |
US20180122424A1 (en) | 2018-05-03 |
US10553251B2 (en) | 2020-02-04 |
US20200357443A1 (en) | 2020-11-12 |
CA3041791C (en) | 2023-12-12 |
EP3533033A1 (en) | 2019-09-04 |
CA3041791A1 (en) | 2018-05-03 |
US20220399043A1 (en) | 2022-12-15 |
US20200143840A1 (en) | 2020-05-07 |
US20220392494A1 (en) | 2022-12-08 |
US10283165B2 (en) | 2019-05-07 |
US11062737B2 (en) | 2021-07-13 |
US20210295873A1 (en) | 2021-09-23 |
US11749310B2 (en) | 2023-09-05 |
CN110199323B (zh) | 2023-08-15 |
EP3533033A4 (en) | 2020-07-01 |
US10726875B2 (en) | 2020-07-28 |
WO2018080826A1 (en) | 2018-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110199323A (zh) | 用于定义、捕获、组装和显示定制视频内容的系统和方法 | |
CN100437453C (zh) | 标签信息显示控制设备及方法、信息处理设备和显示设备 | |
US20170032568A1 (en) | Methods and Systems for Providing a Preloader Animation for Image Viewers | |
US20080012988A1 (en) | System and method for virtual content placement | |
CN106713988A (zh) | 一种对虚拟场景直播进行美颜处理的方法及系统 | |
CN109964255B (zh) | 使用3d视频数据的3d打印 | |
CN105959814B (zh) | 基于场景识别的视频弹幕显示方法及其显示装置 | |
CN110166757A (zh) | 用计算机实现的压缩数据的方法、系统、存储介质 | |
US11481948B2 (en) | Method, device and storage medium for generating animation group by synthesizing animation layers based on tree structure relation between behavior information and sub-behavior information | |
CN112933597A (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
US20200327838A1 (en) | Two-dimensional compositing | |
Allard et al. | A shader-based parallel rendering framework | |
CN102089786A (zh) | 在性能分析期间将图形指令映射到相关联的图形数据 | |
CN112073794B (zh) | 动画处理方法、装置、计算机可读存储介质和计算机设备 | |
CN106447756A (zh) | 用于生成用户定制的计算机生成动画的方法和系统 | |
CN106599010A (zh) | 图码搜索法 | |
US20070100592A1 (en) | Virtual sampling system | |
CN116489424A (zh) | 直播背景的生成方法、装置、电子设备及计算机可读介质 | |
CN112866748B (zh) | 基于ai的视频广告植入方法和装置、设备及存储介质 | |
CN114827722A (zh) | 视频预览方法、装置、设备及存储介质 | |
KR20000024334A (ko) | 3차원 가상 작동 시뮬레이션 방법 | |
CN116302296B (zh) | 资源预览方法、装置、设备及存储介质 | |
CN115019019B (zh) | 一种实现3d特效编辑器的方法 | |
CN115345971A (zh) | 一种模型纹理切换方法及装置 | |
Hogue et al. | Volumetric kombat: a case study on developing a VR game with Volumetric Video |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |