CN112041887A - 高效的并行光流算法和gpu实现 - Google Patents
高效的并行光流算法和gpu实现 Download PDFInfo
- Publication number
- CN112041887A CN112041887A CN201980027763.6A CN201980027763A CN112041887A CN 112041887 A CN112041887 A CN 112041887A CN 201980027763 A CN201980027763 A CN 201980027763A CN 112041887 A CN112041887 A CN 112041887A
- Authority
- CN
- China
- Prior art keywords
- optical flow
- block
- computing device
- image
- level
- 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
- 230000003287 optical effect Effects 0.000 title claims abstract description 141
- 238000004422 calculation algorithm Methods 0.000 title description 15
- 238000000034 method Methods 0.000 claims abstract description 51
- 238000012545 processing Methods 0.000 claims abstract description 51
- 230000005540 biological transmission Effects 0.000 claims abstract description 12
- 230000000977 initiatory effect Effects 0.000 claims abstract 4
- 230000033001 locomotion Effects 0.000 claims description 31
- 230000006870 function Effects 0.000 claims description 29
- 239000013598 vector Substances 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 17
- 239000011159 matrix material Substances 0.000 claims description 5
- 238000007781 pre-processing Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 22
- 230000011218 segmentation Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 21
- 230000000694 effects Effects 0.000 description 13
- 238000007726 management method Methods 0.000 description 10
- 230000002452 interceptive effect Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 230000008878 coupling Effects 0.000 description 8
- 238000010168 coupling process Methods 0.000 description 8
- 238000005859 coupling reaction Methods 0.000 description 8
- 230000000007 visual effect Effects 0.000 description 8
- 230000001413 cellular effect Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000006855 networking Effects 0.000 description 5
- 238000005457 optimization Methods 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 239000007789 gas Substances 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 241001465754 Metazoa Species 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000000280 densification Methods 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 230000001815 facial effect Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 239000011435 rock Substances 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 241000282326 Felis catus Species 0.000 description 1
- 241000282320 Panthera leo Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000036772 blood pressure Effects 0.000 description 1
- 230000036760 body temperature Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000003344 environmental pollutant Substances 0.000 description 1
- 230000008921 facial expression Effects 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 231100000719 pollutant Toxicity 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004266 retinal recognition Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000008786 sensory perception of smell Effects 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 210000004243 sweat Anatomy 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001755 vocal effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
- G06T3/4053—Scaling of whole images or parts thereof, e.g. expanding or contracting based on super-resolution, i.e. the output image resolution being higher than the sensor resolution
- G06T3/4076—Scaling of whole images or parts thereof, e.g. expanding or contracting based on super-resolution, i.e. the output image resolution being higher than the sensor resolution using the original low-resolution images to iteratively correct the high-resolution images
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/207—Analysis of motion for motion estimation over a hierarchy of resolutions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/50—Image enhancement or restoration using two or more images, e.g. averaging or subtraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/11—Region-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/174—Segmentation; Edge detection involving the use of two or more images
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/223—Analysis of motion using block-matching
- G06T7/238—Analysis of motion using block-matching using non-full search, e.g. three-step search
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/269—Analysis of motion using gradient-based methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20016—Hierarchical, coarse-to-fine, multiscale or multiresolution image processing; Pyramid transform
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20172—Image enhancement details
- G06T2207/20201—Motion blur correction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20212—Image combination
- G06T2207/20224—Image subtraction
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Multimedia (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
提供了系统和方法,其用于:启动与图像金字塔的包括更高分辨率的至少一个预定级别相对应的图像数据到计算设备的图形处理单元(GPU)的传输,由计算机的中央处理单元(CPU)计算图像金字塔的至少一个预定粗略级别的光流,由计算设备的CPU将所计算的图像金字塔的至少一个预定粗略级别的光流传输到GPU,由计算设备的GPU计算图像金字塔的包括更高分辨率的至少一个预定级别的光流,以及由计算设备的GPU输出图像数据的光流。
Description
优先权
本申请要求于2018年4月24日提交的序列号为62/661,958的美国临时专利申请的优先权的权益,在此要求其权益,并且其全部内容通过引用合并于此。
背景技术
光流是一种重要的计算机视觉算法,其用于对象检测和跟踪,运动估计,视觉测距等。但是,典型的光流算法的计算量很大,并且需要大量的计算资源和时间。这防止了光流算法在某些设备(例如,移动设备)上使用和部署。
附图说明
附图中的各个附图仅示出了本公开的示例实施例,并且不应被认为是对其范围的限制。
图1是示出根据一些示例实施例的图像处理系统的工作流程的框图。
图2示出了根据一些示例实施例的示例移动设备。
图3示出了根据一些示例实施例的图像金字塔。
图4是示出根据一些示例实施例的方法的各方面的流程图。
图5示出了根据一些示例实施例的用于CPU和GPU之间的任务分离的时序图。
图6是示出根据一些示例实施例的方法的各方面的流程图。
图7示出了根据一些示例实施例的图像金字塔中的CPU与GPU之间的示例任务分离。
图8示出了根据一些示例实施例的在CPU上的光流计算的工作流程。
图9示出了根据一些示例实施例的在GPU上的光流计算的工作流程。
图10是示出根据一些示例实施例的,用于在网络上交换数据(例如,消息和相关内容)的示例消息系统的框图。
图11是示出根据一些示例实施例的关于消息收发系统的更多细节的框图。
图12是示出根据一些示例实施例的可被存储在消息收发服务器系统的数据库中的数据的示意图。
图13是示出根据一些实施例的由消息收发客户端应用生成以用于通信的消息的结构的示意图。
图14是示出根据一些示例实施例的可安装在机器上的软件体系结构的示例的框图。
图15示出了根据示例实施例的具有计算机系统形式的机器的图解表示,在该机器中可以执行指令集以使机器执行本文所讨论的方法中的任何一个或多个。
具体实施方式
本文描述的系统和方法使用现代移动处理器的并行架构,并在移动中央处理单元(CPU)上使用SLAM(同时定位和映射)指令以及在移动图形处理单元(GPU)上使用OpenCL来加速基于DIS(稠密逆搜索)的光流(DIS-OF)算法。通过利用算法的并行性,示例实施例优化DIS-OF算法以提高处理速度。通过进一步利用现代移动处理器的异构架构,示例实施例对工作负载进行划分并将它们分配到CPU和GPU二者上。在示例实施例中,优化使得能够在移动设备上进行实时光流计算,并且可以应用于广泛的移动用例,诸如移动增强现实、视频分割、对象跟踪等。
光流在计算机视觉中有许多应用,从面部跟踪到SLAM(同时定位和映射)。异步分割是光流的此类应用之一。分割系统使用DNN(深度神经网络)生成分割的掩膜(mask)。由于计算复杂性,中端和低端移动设备上的DNN运行时性能非常低。由于性能低下,很难在视频流上实现实时分割。异步分割系统通过在后台线程中运行DNN分割并使用光流生成插值分割掩膜来解决此问题。
在一个示例中,移动设备包括至少一个相机,用于经由该移动设备采集图像(例如,照片)和视频。该移动设备可进一步包括基于相机的应用,以提供将创意工具(例如,特殊效果,媒体叠加等)应用于图像或视频的功能。例如,创意工具可提供向整个图像或视频或者图像或视频流中的特定对象(例如,面部,汽车,树木,天空,身体,猫等)添加特殊效果、媒体叠加等的功能。
在一个示例中,基于相机的应用可使用分割来识别对象(例如,要向其应用创意工具)。分割的一个问题是,这需要大量时间。因此,在基于相机的应用中,特别是在诸如移动设备的计算设备上,如果使用分割算法,则难以维持高的每秒帧速率。因此,一些示例实施例在关键帧上应用分割,并且在关键帧之间应用光流以跟踪先前生成的掩膜,从而可减少分割所需的计算。例如,关键帧可以由帧处理调度器或由分割引擎的可用性来确定(无论何时分割引擎已经完成了对最后一个关键帧的处理,示例实施例都开始对新帧的处理),然后光流将被应用于所确定的关键帧之间的帧。使用光流算法的一个原因是,与分割相比,它的计算强度相对更低。通过这种方式,光流用于通过将对象与其先前的对象(例如,从一帧到下一帧)进行比较,并确定对象向哪个方向移动,移动了多少等,来跟踪视频中对象的运动。通过替换针对每个帧的分割,使用光流可减少计算,并且可以在大多数移动设备(例如,包括低端或中端移动电话)上实现实时(或近实时)处理。在图1的示例系统100中示出了使用光流和分割的该系统。
尽管光流比分割更简单并且计算强度更低,但是光流仍然需要相对较长的时间。例如,在中低端移动设备上,可能需要15到20毫秒。因此,例如为了达到每秒30帧的帧速率,每帧不应花费少于33毫秒来完成任何其他处理。如果光流需要20毫秒,则没有足够的余地进行其他处理,例如后处理或渲染。因此,尽管光流改善了计算开销,但是对于其总共花费了多少时间仍然存在问题。示例实施例还提供了通过将计算设备的CPU和GPU的组合用于加速算法来提高光流的速度。如本文进一步描述的,这加速了图像/视频的整体处理。
图1是示出根据一些示例实施例的使用分割和光流的系统100的工作流程的框图。系统100包括数据存储器102,该数据存储器102包括一个或多个图像帧(例如,视频流的图像帧)。例如,这些图像帧可以是由诸如移动电话的计算设备中的相机采集的视频流的一部分。在一个示例中,可以在采集视频时将图像帧存储在数据存储器102中。系统100还包括如上所述的应用于图像帧102的关键帧的分割(DNN)108。分割108可将与一个或多个对象相关联的一个或多个掩膜(例如,标识每个对象的掩膜)输出至掩膜存储设备110。
系统100包括如上所述的光流104,用于在关键帧之间的插值。将由光流104进行的插值掩膜生成和由分割108生成并存储在掩膜存储设备110中的掩膜输入到插值掩膜生成106中。然后,在一个示例中,可以对图像帧102施加可选的后处理,例如,(例如,用于增强或改善掩膜质量的)引导滤波器(guided filter)112以及效果或渲染114(例如,将特殊效果或其他创意工具应用于视频中的一个或多个对象)。然后可将最终帧输出到计算设备的显示器。示例实施例优化系统100的光流104。
可以使用诸如图2所示的示例移动设备200的计算设备来实现系统100的各方面。移动设备是便携式计算设备,例如智能手机、平板电脑、个人数字助理(PDA)等。移动设备200可包括一个或多个处理器202。一个或多个处理器202可以是适用于移动设备的各种不同类型的商用处理器202中的任何一个(例如,XScale架构微处理器、没有互锁流水线阶段(MIPS)架构处理器或其他类型处理器的微处理器)。在示例实施例中,移动设备200可包括CPU 220和GPU 222。如下文进一步详细解释,可使用移动设备200的CPU 220、移动设备200的GPU 222、或者CPU 220和GPU 222的组合来实现示例实施例。
一个或多个处理器202通常可访问诸如随机存取存储器(RAM)、闪存或其它类型存储器的存储器204。存储器204可适于存储操作系统(OS)206以及应用208,例如可以在图像(例如,照片)或视频上提供图像效果的基于相机的应用或图像处理应用。移动设备200可进一步包括一个或多个相机设备(未示出)和/或可以与一个或多个相机设备耦接。
一个或多个处理器202可直接或经由适当的中间硬件耦接到显示器210和一个或多个输入/输出(I/O)设备212,例如小键盘、触摸面板传感器、麦克风等。类似地,在一些实施例中,一个或多个处理器202可耦接到与天线216接口连接的收发机214。收发机214可被配置为取决于移动设备200的性质,经由天线216既发送又接收蜂窝网络信号、无线数据信号、或其他类型的信号。此外,在一些配置中,GPS接收机218也可利用天线216来接收GPS信号。
光流假设移动物体的亮度在两个帧之间保持恒定。光流方程具有两个未知数(例如,X和Y方向的光流),因此它没有来自一个方程的唯一解。基于块(patch)的光流假定块中的所有像素的光流相同,因此,它推导出了多个光流方程来找到两个未知数。在一个示例中,图像(例如,视频的帧)可被划分为多个块,每个块包括预定数量的像素。将对每个块进行光流计算,以确定运动方向和运动距离。例如,如果块大小为8×8像素,则可将图像划分为8×8大小的块。
在图像金字塔的所有级别上执行光流计算。例如,可以为包括针对每个级别以多个分辨率被二次采样的多层图像数据的图像生成图像金字塔。光流计算从图像金字塔的最高级别(最粗略的级别-具有最小的图像分辨率)开始。在最粗略的级别上,光流计算从一些初始光流开始。初始光流可以是零运动矢量,也可以是前一帧光流开始的运动矢量。
在图3中示出了示例图像金字塔300。图3中的图像金字塔300被示为包括四个级别。例如,第一级别302可以是具有最大图像分辨率的原始图像,第二级别304包括更小的图像分辨率,第三级别306包括再更小的图像分辨率,第四级别308包括最小或最粗略的图像分辨率。因此,每个级别可以是图像的先前级别的更粗略版本。尽管图3中的图像金字塔300被示为包括四个级别,但是可以理解,图像金字塔可以具有任何数量的级别。
一旦知道了最粗略级别的光流,则在下一级别对该光流进行上采样,这用于查找下一级别的光流。重复此过程,直到达到最后一级的光流。
图4是示出根据一些示例实施例的用于在图像金字塔的每个级别上的光流算法的方法400的各方面的流程图。在操作402中,计算设备(例如,图2的计算设备200)针对每个像素计算在X和Y方向上的源图像梯度(Ix,Iy),其中I是图像。在操作404中,计算设备基于预定块大小和块步幅将源图像(例如,视频的图像帧)划分为块网格。例如,预定的块大小可以是8个像素,并且预定的块步幅(例如,两个块之间的起点)可以是4个像素。在此示例中,图像将被分成8×8块,并且块将在X和Y中的每4个像素处开始(例如,块将重叠)。
在操作406中,计算设备计算每个块的梯度之和。例如,计算设备计算每个块的以下梯度之和:
a.∑Ix2:块像素上的Ix 2之和
b.∑Iy2:块像素上的Iy 2之和
c.∑Ixy:块像素上Ix和Iy的乘积之和
d.∑Ix:块像素上的Ix之和
e.∑Iy:块像素上的Iy之和
在操作408中,计算设备计算黑塞(Hessian)矩阵(H)的逆:H=[∑Ix2 ∑Ixy;∑Ixy ∑Iy2]。
在操作410中,计算设备设置初始流场。例如,取决于零运动的成本和使用前一帧的光流的成本,计算设备为图像金字塔的最粗略级别(例如,图3中的图像金字塔300的级别0(308))设置初始流场。对于图像金字塔的其他级别,初始流由上一个级别设置。
在操作412中,计算设备执行迭代逆块搜索。例如,计算设备基于针对每个块的逆成分(inverse composition)来执行迭代逆块搜索,以找到X和Y中的增量光流(例如,增量运动矢量)。该方法包括:
a.确定任何块的两个不同帧(例如,先前(源)帧和当前(目的地)帧)之间的像素差。像素差=目的地图像像素-源图像像素。使用X和Y处的双线性插值来计算目标图像像素。
i.目标图像像素使用X和Y采样
b.使用像素差来计算X和Y运动矢量中的差。[△x;△y]=H-1*∑([Ix;Iy]*(像素差))
c.更新X和Y。[X,Y]:=[X,Y]-[△x,△y]。
d.如果像素成本(例如,ZSSD)小于预定阈值,则迭代过程停止。否则,通过返回到步骤a而继续。
在操作412之后,计算设备将知道块从前一帧移动到当前帧的方向(块流)。块流可以是运动矢量的形式。在操作414中,计算设备执行致密化(densification)以使用块流来计算逐像素(pixel-wise)流场(例如,找到每个像素的流)。为此,计算设备使用以下方程式查找每个像素处的稠密流,如果相应的块与像素重叠并且di(x)是目的地图像中在(x+ui)处的像素与源图像中在(x)处的像素之间的像素差,则λi,x为1。
操作412的输出是每个像素具有X,Y的运动矢量。
图5-7示出了利用计算设备的CPU和GPU二者来有效实现光流的方法。第一有效实现方式包括neon SIMD(单指令多数据)优化。如上所述,光流是非常计算密集的算法。逐块光流对一行像素执行许多类似的计算,因此,它是SIMD的理想候选者。在光流的块逆搜索过程中(例如,图4中的操作412),需要针对迭代的每个步骤来计算块匹配的成本。此成本函数可以是SSD(平方差之和),ZSSD(零均值SSD),NCC(归一化互相关)或其他成本函数。计算成本可以在SIMD上有效地实现。在一个示例实施例中,在SIMD上实现ZSSD(例如,操作412的步骤d)。例如,对于每一行像素,在一组SIMD指令中处理4个像素的组块(chunk)。这样,块的4个像素的计算可以并行发生,并且因此操作412的步骤d被优化。
在根据逐块光流的稠密光流计算(例如,图4的操作414)期间,需要评估使用相邻光流输出的像素差成本。该计算需要使用运动矢量的分数部分进行双线性插值,以在下一帧中生成插值像素。通过一次生成四个双线性插值像素,可以在SIMD中有效地实现此过程。因此,操作414被优化。
第二有效实现方式包括GPU实现方式。首先,对于将要在GPU上运行的任何算法,它应具有足够的并行工作负载以有效利用GPU硬件资源。基于块的光流(例如,图4的操作412)在块之间具有串行依赖性,并且由于该串行依赖性,需要以光栅扫描顺序一个接一个地计算每个块的块逆搜索。示例实施例打破了这种串行依赖性,同时保持了光流的相似质量(例如,平均端点误差)。对于GPU实现方式,独立执行每个块的块逆搜索,然后有一个同步阶段,该阶段检查相邻块的光流输出。同步之后,如果相邻光流产生更好质量的(ZSSD)光流,则可以使用相邻光流来更新块的光流结果。在同步之后,再次执行块逆搜索以进一步收敛。这样,迭代收敛和同步阶段被多次迭代,以实现更好质量的光流。
第二,在光流的有效并行实现期间面临的另一个问题是金字塔的最粗略级别具有较小的图像分辨率,因此它没有足够的工作量来在GPU上处理。在GPU端为小图像分辨率计算光流会产生调度任务的开销,因此在计算效率方面表现不佳。示例实施例在CPU侧处理粗略级别(如图8所示),在GPU侧处理大图像级别(如图9所示)。
在一个示例中,计算设备可基于计算设备能力来确定哪些级别(例如,粗级别)将在CPU侧被处理以及哪些级别将在GPU侧被处理。这在计算设备之间可能有所不同。例如,计算设备可执行调整步骤以选择图像金字塔中GPU将从其开始接管的级别。该调整步骤可能是一次性成本(例如,在构造对象时)。在另一个示例中,可以基于某些参数(例如,计算设备能力)或基于将要在CPU上处理的默认预定级别来预先确定将要在CPU上处理的级别。
此外,在执行粗略级别的处理的同时,可以并行完成针对GPU的存储器传输。这将隐藏存储器传输成本,并实现CPU-GPU共享。这在图5的时序图500中示出,在图5中,针对GPU起始级别的存储器传输与粗级别上的光流计算并行发生。
第三,在完成图像金字塔的任何级别的光流计算之后,需要对光流矩阵进行上采样以产生用于下一级别的更大分辨率的初始光流,这为下一级别提供了收敛的起点。此上采样操作将需要读取小分辨率的光流矩阵,执行双线性插值,然后将其存储(写入)到更大分辨率矩阵中。通过利用GPU的存储器读取操作可避免这整个操作,该存储器读取操作支持即时进行双线性插值,而不会影响性能。因此,示例实施例通过对位置(x,y)进行下采样来读取先前的金字塔级别的光流,并且利用动态双线性插值来读取来自先前级别的光流结果。
图6是示出根据一些示例实施例的用于使用利用了CPU和GPU二者的光流算法来处理图像数据的方法600的各方面的流程图。如上所述,诸如图2的移动设备200的计算设备可包括允许采集图像(例如,照片)和/或视频的一个或多个相机(或与该一个或多个相机耦接)。在一个示例中,计算设备从相机接收图像数据,该图像数据包括由相机采集的图像或视频。计算设备可将图像数据存储在一个或多个数据存储器(例如,数据存储器102)中。计算设备对图像数据执行图像处理,例如图1所示的图像处理,包括图4所示的光流过程。如上所述,示例实施例通过使用计算设备的CPU和GPU二者来提供光流过程的优化。
在一个示例中,对于由计算设备的相机采集的视频,图像数据可包括视频流的一帧或多帧。在从一个或多个相机接收到图像数据之后,计算设备生成图像金字塔,该图像金字塔包括图像数据中的图像的多个级别(例如,视频的帧),针对每个级别,该图像数据以多个分辨率被二次采样。一个示例图像金字塔300被示出在图3中并在上面已经描述。另一个示例图像金字塔700被示出在图7中。
图7的图像金字塔示出了四个级别。第一级别702可包括最高分辨率的原始图像(例如,视频的帧),第二级别704可以是具有更小分辨率的图像,第三级别706可以是具有再更小图像分辨率的图像,第四级别708可以是具有最小或最粗略图像分辨率的图像。因此,每个级别可以是图像的先前级别的更粗略版本。虽然在图7中的图像金字塔700被示为包括四个级别,但是应当理解,图像金字塔可具有任何数量的层。在一个示例中,如先前所解释的,一个或多个更粗略的级别可被指定为由CPU处理,而一个或多个更高分辨率的级别可被指定为由GPU处理。在该示例中,第一级别702和第二级别704可包括更高的分辨率,因此被指定为由GPU处理,第三级别706和第四级别708可包括更粗略的分辨率,并且因此被指定为由CPU处理。在其他示例中,不同级别可被指定为由CPU和GPU处理。
返回图6,在操作602中,计算设备(例如,图2的计算设备200)启动GPU起始级别的存储器传输。例如,如果图像金字塔的包括更高分辨率的第一级别和第二级别被指定为由GPU处理(例如,图7的第一级别702和第二级别704),则针对这两个级别的图像数据被传输到GPU。因此,与图像金字塔的包括更高分辨率的至少一个预定级别相对应的图像数据被传输到计算设备的GPU。
如操作604所示,在图像数据的初始化和向GPU的传输期间,计算设备的CPU计算图像金字塔的至少一个预定粗略级别的光流。图5示出了在GPU的存储器传输期间如何完成CPU处理。CPU可使用在图4所示并在上面已经描述的过程来计算图像金字塔的至少一个预定粗略级别的光流。
图8示出了在CPU处的光流计算(例如,如上所述的用于粗略级别计算的neon(SIMD)优化)。如上关于图4进一步详细解释的,计算设备在操作802中对图像梯度820进行预处理(例如,在操作406中的梯度之和以及在图4的操作408中的逆黑塞计算),在操作804中执行逐块光流(例如,图4的操作412),以及然后在操作806(例如,图4的操作414)中根据逐块光流执行稠密光流。在一个示例中,用于粗略级别的光流计算由CPU串行完成。
返回图6,在CPU计算出图像金字塔的至少一个预定粗略级别的光流之后,计算设备的CPU向GPU传输输出(例如,所计算的图像金字塔的至少一个预定粗略级别的光流),如操作606所示。例如,计算设备的CPU传输针对GPU将开始使用的级别之前的级别的光流。在图5的时序图500中也示出了该过程。
在操作608中,计算设备的GPU使用由CPU计算的光流来计算图像金字塔的包括更高分辨率的至少一个预定级别(例如,图7的级别706和708)的光流。例如,一旦CPU结果的最后一个级别被传输到GPU,则针对GPU的第一级别设置初始流字段。GPU将使用动态双线性插值对该初始流场进行上采样,并在该级别开始光流计算。
图9示出了在GPU处的光流计算。在图9中的过程类似于在图8中针对CPU的过程(例如,在操作902中预处理图像梯度922,在操作904中执行逐块光流,在操作908中根据块光流执行稠密光),除了GPU正在从CPU接收更粗略级别的光流之外,并且由于GPU并行地执行逐块光流,因此它还包括同步阶段(例如,相邻同步906)。对于图像金字塔的层中的多个块的给定块,相邻同步906包括确定给定块的所有相邻块。相邻块是在给定块附近的块或紧邻给定块的块。例如,给定块上方的块,给定块右侧的块,给定块左侧的块以及给定块下方的块。根据给定块的位置,给定块可能在右侧,左侧,下方和上方不具有块,而是仅具有这些相邻块的子集。
接下来,计算设备确定每个相邻块运动矢量值。运动矢量值可包括(X,Y)值,例如(4.5,-5.5)。计算设备将每个相邻块运动矢量值与给定块的运动矢量值进行比较。如果任何相邻块运动矢量的成本(例如,由成本函数给定的值,例如ZSSD)比使用给定块的运动矢量的成本低,则使用该相邻块的运动矢量更新给定块的运动矢量。成本越低,来自两个帧的两个块是同一块的可能性就越高。在一个示例中,给定块以具有最低成本的相邻块运动矢量值来更新。
GPU可输出图像数据的光流。GPU的输出是图像的光流(例如,视频流的帧)。光流指示每个像素如何在X方向上移动,并且移动了多少,以及如何在Y方向上移动,并且移动了多少。这然后被用于图像的进一步处理(例如,基于在下一帧中将要应用创意工具的对象已移动/将移动到的位置来确定将创意工具放置在何处)。以这种方式,计算设备可以通过使用光流运动矢量值使旧掩膜变形(warp)来生成新掩膜。
本文描述的示例实施例已经由发明人测试了性能。下表示出了仅CPU实现方式与示例实施例之间的性能比较。性能数据是在三星盖乐世(Samsung Galaxy)S7设备上生成的。为了进行性能测量,光流在两个图像帧之间运行大约100次,并平均性能被报告在此处。如结果所示,它实现了大约4倍的加速。
版本 | 180×320图像的执行时间(毫秒) |
仅CPU | 97毫秒 |
仅CPU(采用SIMD) | 75毫秒 |
CPU+GPU | 18毫秒 |
示例实施例可以在多种使用情况下使用。例如,示例实施例可以在相机应用中使用,以将诸如特殊效果和媒体叠加的创意工具应用于照片或视频。在另一示例中,示例实施例可在消息传递系统或应用中使用,以将创意工具应用于将经由消息传递系统与一个或多个用户共享的照片或视频。例如,具有创意工具的照片或视频可作为消息发送给一个或多个用户,添加到媒体集合等。
图10是示出了用于通过网络交换数据(例如,消息和相关联内容)的网络系统1000(例如,消息传递系统)的框图。网络系统1000包括多个客户端设备1010,每个客户端设备1010托管多个客户端应用1014。每个客户端应用1014经由网络1004通信地耦接到客户端应用1014和服务器系统1008的其他实例。
客户端设备1010可包括但不限于:移动电话、台式计算机、笔记本电脑、个人数字助理(PDA)、智能电话、平板电脑、超级本、上网本、笔记本电脑、多处理器系统、基于微处理器的或可编程的消费电子系统、游戏机、机顶盒、车载计算机、可佩戴设备、或用户可用于访问网络系统1000的任何其他通信设备。在一些实施例中,客户端设备1010可包括显示信息(例如以用户界面的形式)的显示模块(未示出)。在进一步的实施例中,客户端设备1010可包括触摸屏、加速度计、陀螺仪、相机、麦克风、全球定位系统(GPS)设备等中的一个或多个。在一些实施例中,客户端设备1010是图2的移动设备200。
客户端设备1010可以是用于创建诸如视频、图像(例如,照片)、和音频的媒体内容项并且向其他用户发送包含此类媒体内容项、文本等的消息和从其他用户接收包含此类媒体内容项、文本等的消息的用户的设备。客户端设备1010可以是用于创建和编辑媒体叠加并访问多个媒体集合的用户的设备。客户端设备1010可以是如上所述用于向照片或视频施加背景虚化效果的用户的设备。
一个或多个用户可以是人、机器、或与客户端设备1010接口连接的其他装置。在示例实施例中,用户可以不是系统1000的一部分,但是可经由客户端设备1010或其他装置与系统1000接口连接。例如,用户可向客户端设备1010提供输入(例如,触摸屏输入或字母数字输入),并且输入可经由网络1040传递到系统1000中的其他实体(例如,第三方服务器、服务器系统1080等)。在该实例中,响应于接收到来自用户的输入,系统1000中的其他实体可经由网络1004将信息传递到客户端设备1010以呈现给用户。以这种方式,用户可使用客户端设备1010与系统1000中的多个实体接口连接。
系统1000还可包括网络1004。网络1004的一个或多个部分可以是自组网、内联网、外联网、虚拟专用网(VPN)、局域网(LAN)、无线LAN(WLAN)、广域网(WAN)、无线广域网(WWAN)、城域网(MAN)、互联网的一部分、公共交换电话网络(PSTN)的一部分、蜂窝电话网络、无线网络、WI-FI网络、WiMax网络、另一类型的网络、或者两个或更多个此类网络的组合。
客户端设备1010可经由网络客户端(例如浏览器,诸如由华盛顿州雷德蒙德的公司开发的Internet浏览器)或一个或多个客户端应用1014访问由系统1000中的其他实体提供的多个数据和应用。客户端设备1010可包括一个或多个客户端应用1014(也称为“app”),诸如但不限于:网络浏览器、消息传递应用、电子邮件(email)应用、电子商务网站应用、地图绘制或定位应用、媒体叠加应用、交互式消息传递应用、向图像施加背景虚化效果的应用等。
在一些实施例中,一个或多个客户端应用1014可被包括在客户端设备1010中的给定客户端设备中,并且被配置为本地提供用户接口和功能中的至少一些功能,其中,客户端应用1014被配置为针对非本地可用的数据和/或处理能力在按需基础上与系统1000中的其他实体(例如,第三方服务器、服务器系统1008等)进行通信(例如,以处理用户查询、认证用户、验证支付方法等)。相反地,一个或多个客户端应用1014可不被包括在客户端设备1010中,并且然后客户端设备1010可使用其网络浏览器访问托管在系统1000中的其他实体(例如,第三方服务器、服务器系统1008等)上的一个或多个应用。
在一个示例中,客户端应用1014可以是允许用户拍照片或视频、添加标题或以其他方式编辑照片或视频、和然后将照片或视频(例如,在一些实施例中施加背景虚化效果)发送给另一个用户的消息传递应用。在一个示例中,消息可以是短暂的并且在观看之后或者在预定时间量(例如,10秒、24小时等)之后从接收用户设备移除。短暂消息是指在时间受限的持续时间内可访问的消息。短暂消息可以是可根据本文所描述的实施例合并在一起的文本、图像、视频和其他此类内容。短暂消息的访问时间可由消息发送器设置。替代地,访问时间可以是默认设置,也可以是接收方指定的设置。不管设置技术如何,消息都是暂时的。
消息传递应用还可允许用户创建图库或消息集合(在本文中也称为“媒体集合”)。图库可以是由“正在关注”用户的图库(例如订阅观看和接收用户的图库中的更新)的其他用户观看的照片和视频的集合。在一个示例中,图库也可以是短暂的(例如,持续24小时、持续事件的持续时间(例如,在音乐会、体育事件等期间)、或者持续另一个预定时间)。
短暂消息可与消息持续时间参数相关联,消息持续时间参数的值确定短暂消息将被客户端应用1014显示给短暂消息的接收用户的时间量。短暂消息还可与消息接收者标识符和消息计时器相关联。消息计时器可负责确定短暂消息被显示给由消息接收者标识符标识的特定接收用户的时间量。例如,短暂消息可仅在由消息持续时间参数的值所确定的时间段内显示给相关的接收用户。
在另一个示例中,消息传递应用可允许用户存储照片和视频并且创建不短暂并可被发送给其他用户的图库。例如,用户可组合来自最近假期的照片和视频以与朋友和家庭共享。
服务器系统1008可经由网络1004(例如,互联网或者广域网(WAN))向一个或多个客户端设备1010和/或一个或多个第三方服务器(未示出)提供服务器端功能。服务器系统1008可包括应用编程接口(API)服务器1002、应用服务器1012、消息传递应用服务器1016、媒体内容处理系统1018、和社交网络系统1022,其可各自彼此通信耦接并与一个或多个数据存储设备(诸如,数据库1020)通信耦接。
根据一些示例实施例,服务器系统1008可以是云计算环境。在一个示例实施例中,服务器系统1008、以及与服务器系统1008相关联的任何服务器可与基于云的应用相关联。
一个或多个数据库1020可以是存储信息的存储设备,该信息诸如是:未处理的媒体内容、来自用户的原始媒体内容(例如,高质量媒体内容)、经处理的媒体内容(例如,被格式化以与客户端设备1010共享并在客户端设备1010上观看的媒体内容)、与媒体内容项有关的上下文数据、与用户设备(例如,计算或者客户端设备1010)有关的上下文数据、媒体叠加、媒体叠加智能小工具或智能元件、用户数据、用户设备信息、媒体内容(例如,视频和图像)、媒体内容数据(例如,与视频和图像相关联的数据)、计算设备上下文数据、序列化数据、会话数据项等。一个或多个数据库1020还可存储与第三方服务器、第三方应用、客户端设备1010、客户端应用1014、用户等有关的信息。
一个或多个数据库1020可包括服务器系统1008外部的基于云的存储设备(例如由服务器系统1008外部的一个或多个第三方实体托管的)。尽管存储设备被示出为数据库1020,但是应当理解,系统1000可访问并存储存储设备中的数据,诸如数据库1020、云端存储设备、和其他类型的存储方法。
系统1000还可包括一个或多个第三方服务器(未示出)。一个或多个第三方服务器可包括一个或多个第三方应用。在第三方服务器上执行的一个或多个第三方应用可经由API服务器1002提供的编程接口经由API服务器1002与服务器系统1008交互。例如,第三方应用中的一个或多个可经由API服务器1002请求和利用来自服务器系统1008的信息以支持由第三方托管的网站或者由第三方托管的应用上的一个或多个特征或者功能。第三方网站或者应用例如可提供由服务器系统1008中的相关功能和数据支持的功能。
因此,每个客户端应用1014可经由网络1004与其他客户端应用1014和服务器系统1008进行通信并交换数据。在客户端应用1014之间交换的数据以及在客户端应用1014和服务器系统1008之间交换的数据包括功能(例如,调用函数的命令)以及有效载荷数据(例如,文本、音频、视频或其他多媒体数据)。
服务器系统1008经由网络1004向特定客户端应用1014提供服务器端功能。尽管在本文中将系统1000的某些功能描述为由客户端应用1014或由服务器系统1008执行,但是应当理解,某些功能在客户端应用1014或服务器系统1008中的位置是设计选择。例如,在技术上优选地是首先在服务器系统1008内部署某些技术和功能,然后将该技术和功能迁移到其中客户端设备1010具有足够处理能力的客户端应用1014。
服务器系统1008支持提供给客户端应用1014的多种服务和操作。此类操作包括向客户端应用1014发送数据,从客户端应用1014接收数据,以及处理由客户端应用1014生成的数据。作为示例,该数据可包括消息内容、客户端设备信息、地理位置信息、媒体注释和叠加、消息内容持续条件、社交网络信息、现场活动信息、日期和时间戳、媒体内容(例如,视频和图像)、媒体内容数据(例如,与视频和图像相关联的数据)、和用户数据(例如,用户点击数据)。联网系统1000中的数据交换通过经由客户端应用1014的用户界面(UI)可用的功能来调用和控制。
在服务器系统1008中,API服务器1002耦接到应用服务器1012并向应用服务器1012提供编程接口。应用服务器1012通信地耦接到数据库服务器1024,数据库服务器1024促进对一个或多个数据库1020的访问,数据库1020中存储有与由应用服务器1012处理的消息相关联的数据。
API服务器1002在客户端设备1010和应用服务器1012之间接收和发送消息数据(例如,命令和消息有效载荷)。具体地,API服务器1002提供可被客户端应用1014调用或查询的一组接口(例如,例程和协议),以便调用应用服务器1012的功能。API服务器1002暴露由应用服务器1012支持的各种功能,包括:帐户注册;登录功能;经由应用服务器1012从特定客户端应用1014向另一客户端应用1014发送消息;从客户端应用1014向消息传递应用服务器1016发送媒体文件(例如,图像或视频),以供另一客户端应用1014进行可能的访问;媒体数据的集合(例如,图库、故事、消息集合、或媒体集合)的设置;客户端设备1010的用户的好友列表的取得;此类集合的取得;消息和内容的取得;在社交图中添加和删除好友;好友在社交图中的位置;打开应用事件(例如,与客户端应用1014有关);等。
应用服务器1012托管多个应用和子系统,包括消息传递应用服务器1016、媒体内容处理系统1018、和社交网络系统1022。消息传递应用服务器1016实现多个消息处理技术和功能,其特别涉及包括在从客户端应用1014的多个实例接收的消息中的内容(例如,文本和多媒体内容)的聚合和其他处理。来自多个源的文本和媒体内容可被聚合成内容的集合(例如,被称为故事、图库、或媒体集合)。然后,消息传递应用服务器1016使得这些集合对于客户端应用1014可用。考虑到此类处理的硬件要求,对数据的其他处理器和存储器密集型处理还可以在服务器端由消息传递应用服务器1016来执行。
应用服务器1012还包括媒体内容处理系统1018,该媒体内容处理系统1018专用于通常关于在消息传递应用服务器1016处的消息的有效载荷内接收到的图像或视频来执行多种媒体内容处理操作。媒体内容处理系统1018可访问一个或多个数据存储设备(例如数据库1020)来取得所存储的数据以在处理媒体内容中使用并存储经处理的媒体内容的结果。
社交网络系统1022支持各种社交网络功能和服务,并使这些功能和服务可用于消息传递应用服务器1016。为此,社交网络系统1022维护并访问数据库1020内的实体图1204(图12所描绘的)。社交网络系统1022支持的功能和服务的示例包括识别特定用户与其具有关系或者该特定用户“正在关注”其的联网系统1000的其他用户,以及还识别特定用户的其他实体和兴趣。
消息传递应用服务器1016可负责在客户端设备1010的用户之间生成和递送消息。消息传递应用服务器1016可利用多个消息递送网络和平台中的任一个将消息递送给用户。例如,消息传递应用服务器1016可使用电子邮件(email)、即时消息(IM)、短消息服务(SMS)、文本、传真、或经由有线网络(例如,互联网)的语音(例如,IP语音(VoIP))消息、老式电话服务(POTS)、或无线网络(例如,移动、蜂窝、WIFI、长期演进(LTE)、或蓝牙)来传递消息。
图11是示出根据示例实施例的关于联网系统1000的更多细节的框图1100。具体地,系统1100被示为包括消息传递客户端应用1014和应用服务器1012,它们又进而体现了多个子系统,即,短暂计时器系统1102、集合管理系统1104、和注释系统1106。
短暂计时器系统1102负责对由消息传递客户端应用1014和消息传递应用服务器1016所允许的内容执行临时访问。为此,短暂计时器系统1102并入了多个计时器,这些计时器基于与消息、或消息集合(例如另外在本文中被称为媒体集合、图库、消息集合、故事等)相关联的持续时间和显示参数,经由消息传递客户端应用1014选择性地显示并使能对消息和相关联内容的访问。
集合管理系统1104负责管理媒体的集合(例如,文本、图像、视频和音频数据的集合),另外在本文中被称为“媒体集合”。在一些示例中,内容的集合(例如,包括图像、视频、文本和音频的消息)可以被组织成“事件图库”或“事件故事”。这种集合可以在指定时间段(例如,与内容相关的事件的持续时间)内可用。例如,与音乐会有关的内容可以在该音乐会的持续时间内作为“故事”可用。集合管理系统1104还可负责发布图标,该图标向消息传递客户端应用1014的用户界面提供特定集合的存在的通知。
集合管理系统1104还包括策展界面1108,该策展界面1108允许集合管理器管理和策展特定内容集合。例如,策展界面1108使事件组织者能够策展与特定事件有关的内容的集合(例如,删除不适当的内容或冗余消息)。另外,集合管理系统1104采用机器视觉(或图像识别技术)和内容规则来自动策展内容集合。在某些实施例中,补偿(例如,与消息传递系统或第三方奖赏系统相关联的货币、非货币信用或得分,旅行里程,对艺术品或专用镜头的访问等)可被支付给用户以用于将用户生成的内容包括到集合中。在这种情况下,策展界面1108操作以自动向此类用户就使用其内容而支付费用。
注释系统1106提供使用户能够注释或以其他方式修改或编辑与消息相关联的媒体内容的各种功能。例如,注释系统1106提供与针对由联网系统1000处理的消息产生和发布媒体叠加有关的功能。在一个示例中,注释系统1106基于客户端设备1010的地理位置向消息传递客户端应用1014可操作地提供媒体叠加(例如,滤镜或媒体增强)。在另一个示例中,注释系统1106基于其他信息(例如,客户端设备1010的用户的社交网络信息)可操作地向消息传递客户端应用1014提供媒体叠加。媒体叠加可包括音频和视觉内容以及视觉效果。音频和视觉内容的示例包括图像、文本、徽标、动画和声音效果。视觉效果的示例包括颜色叠加。音频和视觉内容或视觉效果可在客户端设备1010处被应用于媒体内容项(例如照片)。例如,媒体叠加包括可被叠加在由客户端设备1010拍摄的照片之上的文本。在另一个示例中,媒体叠加包括位置叠加(例如,威尼斯海滩)的标识、现场活动的名称、或商家叠加的名称(例如,海滩咖啡馆)。在另一个示例中,注释系统1106使用客户端设备1010的地理位置来识别媒体叠加,该媒体叠加包括在客户端设备1010的地理位置处的商家的名称。媒体叠加可包括与商家相关联的其他标记。媒体叠加可被存储在数据库1020中并且可通过数据库服务器1024来访问。
注释系统1106还可诸如如下文更详细描述的通过将一个或多个媒体内容项添加到交互式消息来使得用户能够与交互式消息交互。在一个示例实施例中,注释系统1106提供允许用户或者商家创建具有多个对象的交互式消息的发布平台,该多个对象与用户可针对其添加个人内容的交互式消息相关联。例如,设计师可创建具有针对乐队的不同成员(鼓手、键盘手、吉他手等)的多个交互式对象的摇滚乐队的视频。摇滚乐队的视频可作为交互式消息对于用户可用。
在一个示例实施例中,注释系统1106提供基于用户的发布平台,该平台使用户能够在地图上选择地理位置并上载与所选地理位置相关联的内容。用户还可指定在什么情况下应将特定媒体叠加提供给其他用户。注释系统1106生成包括所上载内容的媒体叠加,并将所上载内容与所选地理位置相关联。
在另一个示例实施例中,注释系统1106提供基于商家的发布平台,该平台使商家能够通过投标过程选择与地理位置相关联的特定媒体叠加。例如,注释系统1106在预定的时间量内将出价最高的商家的媒体叠加与对应的地理位置相关联。
图12是示出根据某些示例实施例的可存储在服务器系统1008的数据库1020中的数据的示意图1200。尽管数据库1020的内容被示出为包括多个表,但是应当理解,数据可以以其他类型的数据结构(例如,作为面向对象的数据库)来存储。
数据库1020包括存储在消息表1214中的消息数据。实体表1202存储包括实体图1204的实体数据。其记录被维护在实体表1202内的实体可包括个体、公司实体、组织、对象、地点、事件等。不管类型如何,服务器系统1008关于其存储数据的任何实体都可以是公认的实体。每个实体具有唯一的标识符以及实体类型标识符(未示出)。
实体图1204还存储关于实体之间的关系和关联的信息。这样的关系可以是社交的、专业的(例如,在同一家公司或组织中工作)、基于兴趣的或基于活动的,这仅是示例。
数据库1020还以媒体叠加或滤镜的示例形式将注释数据存储在注释表1212中。注释数据在本文中也可被称为“创造性工具”或者“交互式特征”。注释数据可包括将要提供给用户的预定义交互式消息。
针对其数据被存储在注释表1212中的媒体叠加或滤镜与视频(针对其数据被存储在视频表1210中)和/或图像(针对其数据被存储在图像表1208中)相关联并且被应用于该视频和/或图像。在一个示例中,滤镜是在向接收方用户呈现的过程中被显示为叠加在图像或视频上的叠加。滤镜可以是各种类型的,包括当发送方用户正在编写消息时,来自由消息传递客户端应用1014向发送方用户呈现的滤镜库中的用户选择的滤镜。其他类型的滤镜包括可基于地理位置呈现给发送方用户的地理位置滤镜(也称为地理滤镜)。例如,基于由客户端设备1010的GPS单元所确定的地理位置信息,消息传递客户端应用1014可在用户界面内呈现特定于相邻或特定位置的地理位置滤镜。另一类型的滤镜是数据滤镜,它可基于在消息创建过程期间由客户端设备1010收集的其他输入或信息,由消息传递客户端应用1014选择性地将其呈现给发送方用户。数据滤镜的示例包括特定位置处的当前温度、发送方用户正在行进的当前速度、客户端设备1010的电池寿命或当前时间。
可存储在注释表1212内的其他注释数据是所谓的“镜头”数据。“镜头”可以是可添加到图像或视频中的实时的特殊效果和声音。
如上所述,视频表1210存储视频数据,在一个实施例中,该视频数据与其记录在消息表1214内被维护的消息相关联。类似地,图像表1208存储与消息相关联的图像数据,其中,在消息表1214内为该消息存储消息数据。实体表1202可将来自注释表1212的多个注释与存储在图像表1208和视频表1210中的多个图像和视频相关联。
故事表1206存储与消息以及相关联的图像、视频或音频数据的集合有关的数据,这些数据被编译成一个集合(例如,故事、图库、或媒体集合)。特定集合的创建可由特定用户(例如,在实体表1202中针对其维护记录的任何用户)发起。用户可以以该用户已经创建和发送/广播的内容集合的形式创建“个人故事”。为此,消息传递客户端应用1014的用户界面可包括用户可选择的图标,以使发送方用户能够将特定内容添加到他或她的个人故事中。
媒体或消息集合还可构成“现场故事”,它是来自多个用户的内容的集合,该内容的集合是手动、自动或使用手动和自动技术的组合创建的。例如,“现场故事”可从各种位置和事件组成用户提交的内容的策展流。例如,可以经由消息传递客户端应用1014的用户界面向其客户端设备1010启用了位置服务并且在特定时间处在共同事件位置的用户呈现选项,以向特定的现场故事贡献内容。现场故事可由消息传递客户端应用1014基于他或她的位置识别给用户。最终的结果是从社区角度讲的“现场故事”。
另一类型的内容集合被称为“位置故事”,其使得其客户端设备1010位于特定地理位置内(例如,在学院或大学校园内)的用户能够对特定集合做出贡献。在一些实施例中,对位置故事的贡献可能需要二级认证,以验证最终用户属于特定组织或其他实体(例如,是大学校园中的学生)。
图13是示出根据一些实施例的消息1300的结构的示意图,该消息1300由客户端应用1014生成以用于与另一客户端应用1014或消息传递应用服务器1016进行通信。特定消息1300的内容被用于填充消息传递应用服务器1016可访问的、存储在数据库1020中的消息表1214。类似地,消息1300的内容被存储在存储器中,作为客户端设备1010或应用服务器1012的“传输中(in-transit)”或“运行中(in-flight)”数据。消息1300被示为包括以下成分:
·消息标识符1302:识别消息1300的唯一标识符。
·消息文本有效载荷1304:将由用户通过客户端设备1010的用户界面生成的并被包括在消息1300中的文本。
·消息图像有效载荷1306:由客户端设备1010的摄像头组件采集或从客户端设备1010的存储器中取得的并被包括在消息1300中的图像数据。
·消息视频有效载荷1308:由摄像头组件采集的或从客户端设备1010的存储器组件中取得的并被包括在消息1300中的视频数据。
·消息音频有效载荷1310:由麦克风采集的或从客户端设备1010的存储器组件中取得的并被包括在消息1300中的音频数据。
·消息注释1312:表示将要应用于消息1300的消息图像有效载荷1306、消息视频有效载荷1308或消息音频有效载荷1310的注释的注释数据(例如,媒体叠加,诸如滤镜、贴纸(sticker)或其他增强)。
·消息持续时间参数1314:以秒为单位指示消息1300的内容(例如消息图像有效载荷1306、消息视频有效载荷1308,消息音频有效载荷1310)要经由消息传递客户端应用1014呈现给用户或使用户可以访问消息1300的内容的时间量的参数值。
·消息地理位置参数1316:与消息1300的内容有效载荷相关联的地理位置数据(例如,纬度和经度坐标)。多个消息地理位置参数1316值可被包括在有效载荷中,这些参数值中的每一个都与内容中包括的内容项相关联(例如,消息图像有效载荷1306中的特定图像、或消息视频有效载荷1308中的特定视频)。
·消息故事标识符1318:识别值,该值识别与消息1300的消息图像有效载荷1306中的特定内容项相关联的一个或多个内容集合(例如“故事”)。例如,消息图像有效载荷1306内的多个图像可各自使用标识符值与多个内容集合相关联。
·消息标记1320:每个消息1300可用多个标记来标记,每个标记指示消息有效载荷中包括的内容的主题。例如,在消息图像有效载荷1306中包括的特定图像描绘了动物(例如,狮子)的情况下,可在消息标记1320内包括指示相关动物的标记值。标记值可基于用户输入手动生成,或者可使用例如图像识别自动生成。
·消息发送方标识符1322:指示在其上生成消息1300并且从其发送消息1300的客户端设备1010的用户的标识符(例如,消息传递系统标识符、电子邮件地址,或设备标识符)。
·消息接收方标识符1324:指示消息1300被寻址到的客户端设备1010的用户的标识符(例如,消息传递系统标识符、电子邮件地址或设备标识符)。
消息1300的各个成分的内容(例如,值)可以是指向在存储内容数据值的表中的位置的指针。例如,消息图像有效载荷1306中的图像值可以是指向图像表1208中的位置的指针(或地址)。类似地,消息视频有效载荷1308中的值可指向视频表1210中存储的数据,消息注释1312中存储的值可指向注释表1212中存储的数据,消息故事标识符1318中存储的值可指向故事表1206中存储的数据,以及消息发送方标识符1322和消息接收方标识符1324中存储的值可指向实体表1202中存储的用户记录。
图14是示出了软件架构1402的框图1400,该软件架构1402可被安装在上文所描述的设备中的任何一个或多个上。例如,在各种实施例中,客户端设备1010、服务器系统1008、以及服务器1002、1012、1016、1018、1022和1024可使用软件架构1402的元素中的一些或全部实现。图14仅是软件架构的非限制性示例,并且将理解,可实现多个其他架构以促进本文描述的功能。在各种实施例中,软件架构1402由诸如包括处理器1510、存储器1530、和I/O组件1550的图15的机器1500的硬件来实现。在该示例中,软件架构1402可被概念化为层的堆叠,其中,每个层可提供特定功能。例如,软件架构1402包括诸如操作系统1404、库1406、框架1408、和应用1410的层。操作地,应用1410通过软件栈调用API调用1412,并且响应于与一些实施例一致的API调用1412来接收消息1414。
在各种实现方式中,操作系统1404管理硬件资源并提供公共服务。操作系统1404包括例如内核1420、服务1422和驱动器1424。按照一些实施例,内核1420充当硬件与其他软件层之间的抽象层。例如,除其他功能外,内核1420提供存储器管理、处理器管理(例如,调度)、组件管理、联网、和安全性设置。服务1422可为其他软件层提供其他公共服务。根据一些实施例,驱动器1424负责控制底层硬件或与底层硬件接口连接。例如,驱动器1424可包括显示驱动器、相机驱动器、或低能量驱动器、闪存驱动器、串行通信驱动器(例如,通用串行总线(USB)驱动器)、驱动器、音频驱动器、电源管理驱动器等。
在一些实施例中,库1406提供由应用1410利用的低级公共基础设施。库1406可包括系统库1430(例如,C标准库),该系统库1430可提供诸如存储器分配功能、字符串操纵功能、数学功能等的功能。另外,库1406可包括诸如媒体库的API库1432(例如,用于支持各种媒体格式(例如运动图像专家组4(MPEG4)、高级视频编码(H.264或AVC)、运动图像专家组层3(MP3)、高级音频编码(AAC)、自适应多速率(AMR)音频编解码器、联合图像专家组(JPEG或JPG)、或便携式网络图形(PNG))的呈现和操作的库)、图形库(例如,用于在显示器上呈现二维(2D)和三维(3D)图形内容的OpenGL框架)、数据库库(例如,提供各种关系数据库功能的SQLite)、网络库(例如,提供网络浏览功能的WebKit)等。库1406还可包括各种各样的其他库1434,以向应用1410提供多个其他API。
根据一些实施例,框架1408提供可被应用1410使用的高级公共基础设施。例如,框架1408提供各种图形用户界面(GUI)功能、高级资源管理、高级位置服务等。框架1408可提供可被应用1410使用的广泛的其他API,其中一些可能是特定于特定操作系统1404或平台的。
在示例实施例中,应用1410包括主页应用1450、联系人应用1452、浏览器应用1454、阅读器应用1456、位置应用1458、媒体应用1460、消息传递应用1462、游戏应用1464、和广泛的其他应用,诸如第三方应用1466。根据一些实施例,应用1410是执行程序中定义的函数的程序。各种编程语言可用于创建以各种方式结构化的应用1410中的一个或多个,诸如面向对象编程语言(例如,Objective-C、Java、或C++)或程序化编程语言(例如,C或汇编语言)。在特定示例中,第三方应用1466(例如,由特定平台的卖方以外的实体使用ANDROIDTM或IOSTM软件开发工具包(SDK)开发的应用)可以是在移动操作系统(例如,IOSTM、ANDROIDTM、Phone或另一移动操作系统)上运行的移动软件。在该示例中,第三方应用1466可调用由操作系统1404提供的API调用1412,以促进本文所描述的功能。
一些实施例可特别地包括基于相机的应用1467。在某些实施例中,这可以是操作以管理与诸如第三方服务器或者服务器系统1008的服务器系统通信的独立应用。在其他实施例中,该功能可以与另一应用(例如,消息传递应用1462)集成在一起。基于相机的应用1467可请求和显示与消息传递、媒体内容、媒体集合、媒体叠加等有关的各种数据,并且可提供如下能力:用户经由触摸界面、键盘或使用机器1500的相机设备输入与系统有关的数据、经由I/O组件1550与服务器系统通信、以及存储器1530中接收和存储对象数据。信息以及与信息相关联的用户输入的呈现可由基于相机的应用1467使用在机器1500上操作的不同框架1408、库1406元件、或操作系统1404来管理。
图15是示出根据一些实施例的能够从机器可读介质(例如,机器可读存储介质)读取指令并执行本文讨论的方法中的任何一个或多个的机器1500的组件的框图。具体地,图15示出了具有计算机系统的示例形式的机器1500的图解表示,在其中可执行用于使机器1500执行本文讨论的任何一种或多种方法的指令1516(例如软件、程序、应用、小应用、应用程序或其他可执行代码)。在替代实施例中,机器1500作为独立设备运行,或者可耦接(例如,联网)到其他机器。在网络部署中,机器1500可在服务器-客户端网络环境中以服务器机器1008、1012、1016、1022、1024等或客户端设备1010的身份运行,或者在对等(或分布式)网络环境中作为对等机器运行。机器1500可包括但不限于:服务器计算机、客户端计算机、个人计算机(PC)、平板计算机、膝上型计算机、上网本、个人数字助理(PDA)、娱乐媒体系统、蜂窝电话、智能电话、移动设备、可穿戴设备(例如智能手表)、智能家居设备(例如,智能电器)、其他智能设备、web家电、网络路由器、网络交换机、网桥,或能够依次或以其他方式执行指令1516的任何机器,这些指令指定了机器1500将要采取的动作。此外,尽管仅示出了单个机器1500,但术语“机器”还应被认为包括单独地或共同地执行指令1516以执行本文讨论的方法中的任何一个或多个方法的机器1500的集合。
在各种实施例中,机器1500包括处理器1510、存储器1530、和I/O组件1550,它们可被配置为经由总线1502彼此通信。在示例实施例中,处理器1510(例如,中央处理单元(CPU)、精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、射频集成电路(RFIC)、另一处理器,或其任何合适的组合)包括例如可执行指令1516的处理器1512和处理器1514。术语“处理器”旨在包括可包括两个或更多个可同时执行指令1516的两个或更多个独立处理器1512、1514(也称为“核”)的多核处理器1510。虽然图15示出了多个处理器1510,机器1500可包括具有单个核的单个处理器1510、具有多个核的单个处理器1510(例如,多核处理器1510)、具有单个核的多个处理器1512、1514、具有多个核的多个处理器1512、1514、或其任何组合。
根据一些实施例,存储器1530包括主存储器1532、静态存储器1534、和存储单元1536,它们都可经由总线1502被处理器1510访问。存储单元1536可包括机器可读介质1518,在该机器可读介质1518上存储了体现本文所描述的方法或者功能中的任何一个或多个的指令1516。在由机器1500执行期间,指令1516还可全部或至少部分地驻留在主存储器1532内、静态存储器1534内、处理器1510中的至少一个处理器内(例如在处理器的高速缓存存储器内)或其任何合适的组合。因此,在各种实施例中,主存储器1532、静态存储器1534、和处理器1510被认为是机器可读介质1518。
如本文所使用的,术语“存储器”是指能够暂时或者永久存储数据的机器可读介质1518并且可被理解为包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、缓冲存储器、闪存、和高速缓存存储器。尽管在示例实施例中机器可读介质1518被示出为单个介质,但是术语“机器可读介质”应被认为包括能够存储指令1516的单个介质或多个介质(例如,集中式或分布式数据库,或相关联的高速缓存和服务器)。术语“机器可读介质”还应被理解为包括能够存储由机器(例如,机器1500)执行的指令(例如,指令1516)以使得指令1516在由机器1500(例如,处理器1510)的一个或多个处理器执行时使得机器1500执行本文描述的任何一种或多种方法的任何介质或多个介质的组合。因此,“机器可读介质”是指单个存储装置或设备,以及包括多个存储装置或设备的“基于云的”存储系统或存储网络。因此,术语“机器可读介质”应被理解为包括但不限于以固态存储器(例如,闪存)、光介质、磁介质、其他非易失性存储器(例如,可擦除可编程只读存储器(EPROM))、或其任何合适的组合的形式的一个或多个数据存储库。术语“机器可读介质”具体地不包括非暂态信号本身。
I/O组件1550包括各种各样的组件,以接收输入、提供输出、产生输出、发送信息、交换信息、采集测量等。通常,应当理解,I/O组件1550可包括在图15中未示出的多个其他组件。仅出于简化下面讨论的目的,根据功能对I/O组件1550进行分组,并且分组绝不是限制性的。在各种示例实施例中,I/O组件1550包括输出组件1552和输入组件1554。输出组件1552包括视觉组件(例如,显示器,诸如,等离子体显示面板(PDP)、发光二极管(LED)显示器、液晶显示器(LCD)、投影仪、或阴极射线管(CRT))、听觉组件(例如,扬声器)、触觉组件(例如,振动马达)、其他信号发生器等。输入组件1554包括字母数字输入组件(例如,键盘、被配置为接收字母数字输入的触摸屏、光电键盘或其他字母数字输入组件)、基于点的输入组件(例如,鼠标、触摸板、轨迹球、操纵杆、运动传感器或其他指向仪器)、触知输入组件(例如,物理按钮、提供触摸的位置和力或触摸手势的触摸屏,或其他触知输入组件)、音频输入组件(例如,麦克风)等。
在一些进一步的示例实施例中,I/O组件1550包括除各种各样的其他组件外的生物特征组件1556、运动组件1558、环境组件1560或位置组件1562。例如,生物特征组件1556包括用于检测表达(例如,手部表达、面部表情、声音表达、身体姿势或眼睛跟踪)、测量生物信号(例如,血压、心率、体温、汗水或脑波)、识别人(例如,语音识别、视网膜识别、面部识别、指纹识别或基于脑电图的识别)等的组件。运动组件1558包括加速度传感器组件(例如,加速度计)、重力传感器组件、旋转传感器组件(例如,陀螺仪)等。环境组件1560包括例如照明传感器组件(例如,光度计)、温度传感器组件(例如,检测环境温度的一个或多个温度计)、湿度传感器组件、压力传感器组件(例如,气压计)、声学传感器组件(例如,一个或多个检测背景噪声的麦克风)、接近度传感器组件(例如,检测附近物体的红外传感器)、气体传感器组件(例如,机器嗅觉检测传感器,用于为了安全而检测有害气体的浓度或测量大气中的污染物的气体检测传感器)、或可提供与周围物理环境相对应的指示、测量或信号的其他组件。位置组件1562包括位置传感器组件(例如,全球定位系统(GPS)接收机组件)、高度传感器组件(例如,检测可从哪个高度获得该空气压力的高度计或气压计)、取向传感器组件(例如,磁力计)等。
可使用多种技术来实现通信。I/O组件1550可包括通信组件1564,该通信组件1564可操作以分别经由耦接(coupling)1582和耦接1572将机器1500耦接到网络1580或设备1570。例如,通信组件1564包括网络接口组件或与网络1580接口连接的其它合适的设备。在进一步的示例中,通信组件1564包括有线通信组件、无线通信组件、蜂窝通信组件、近场通信(NFC)组件、组件(例如,低能耗)、组件和经由其它形态提供通信的其他通信组件。设备1570可以是另一机器1500或各种各样的外围设备(例如,经由通用串行总线(USB)耦接的外围设备)中的任何一个。
此外,在一些实施例中,通信组件1564检测标识符或包括可操作以检测标识符的组件。例如,通信组件1564包括射频识别(RFID)标签读取器组件、NFC智能标记检测组件、光学读取器组件(例如用于检测诸如通用产品代码(UPC)条形码的一维条形码、多维条形码(例如快速响应(QR)码、Aztec码、数据矩阵、数字图形、最大码、PDF417、超码、统一商业码缩小空间符号(UCC RSS)-2D条形码)和其他光学码的光学传感器)、声学检测组件(例如,用于识别所标记的音频信号的麦克风)、或其任何合适的组合。另外,可经由通信组件1564来获得各种信息,例如经由互联网协议(IP)地理位置来获得位置、经由信号三角测量来获得位置、经由检测可指示特定位置的或NFC信标信号来获得位置等。
在各种示例实施例中,网络1580的一个或多个部分可以是自组网、内联网、外联网、虚拟专用网(VPN)、局域网(LAN)、无线局域网(WLAN)、广域网(WAN)、无线广域网(WWAN)、城域网(MAN)、互联网、互联网的一部分、公共交换电话网络(PSTN)的一部分、老式电话服务(POTS)网络、蜂窝电话网络、无线网络、网络、另一类型的网络,或两个或更多个此类网络的组合。例如,网络1580或网络1580的一部分可包括无线或蜂窝网络,并且耦接1582可以是码分多址(CDMA)连接、全球移动通信系统(GSM)连接或另一类型的蜂窝或无线耦接。在该示例中,耦接1582可实现多种类型的数据传输技术中的任何一种,例如单载波无线电传输技术(1xRTT)、演进数据优化(EVDO)技术、通用分组无线电服务(GPRS)技术、增强型数据速率GSM演进(EDGE)技术、包括3G的第三代合作伙伴计划(3GPP)、第四代无线(4G)网络、通用移动电信系统(UMTS)、高速分组接入(HSPA)、全球微波接入互操作性(WiMAX)、长期演进(LTE)标准、由各种标准制定组织定义的其他标准、其他远程协议或其他数据传输技术。
在示例实施例中,指令1516可使用传输介质经由网络接口设备(例如,通信组件1564中包括的网络接口组件)在网络1580上发送或接收,并且可以利用许多众所周知的传输协议(例如,超文本传输协议(HTTP))中的任何一个。类似地,在其他示例实施例中,指令1516可使用传输介质经由到设备1570的耦接1572(例如,对等耦接)发送或接收。术语“传输介质”应被认为包括能够存储、编码或携带由机器1500执行的指令1516的任何无形介质,并且包括数字或模拟通信信号或其他无形介质以促进此类软件的通信。
此外,机器可读介质1518是非暂态的(换句话说,不具有任何暂态信号),因为它不体现传播信号。然而,将机器可读介质1518标记为“非暂态”不应被解释为意指介质不能够运动;介质1518应被认为是可从一个物理位置运送到另一个物理位置。此外,由于机器可读介质1518是有形的,因此,机器可读介质1518可以被认为是机器可读设备。
贯穿本说明书,复数实例可实现被描述为单个实例的部件、操作或者结构。虽然一个或多个方法的单独操作被示出并且被描述为分离的操作,但是可以并行执行单独操作中的一个或多个,并且不要求操作以所图示的次序执行。在示例配置中呈现为分离的组件的结构和功能可被实现为组合的结构或组件。类似地,呈现为单个组件的结构和功能可被实现为分离的组件。这些和其他变型、修改、添加和改进落在本文中的主题的范围内。
虽然已经参考特定示例实施例描述了发明主题的概述,但是在不脱离本公开的实施例的更宽范围的情况下,可以对这些实施例做出各种修改和改变。
以足够的细节描述本文所图示的实施例以使得本领域的技术人员能够实践所公开的教导。可以使用并且从其导出其他实施例,以使得在不脱离本公开的范围的情况下,可以做出结构和逻辑替换和改变。因此,详细描述将不以限制性意义理解,并且各种实施例的范围仅由随附的权利要求连同此类权利要求被授予的等同物的完整范围一起定义。
如本文所使用的,术语“或者”可以以包括性或者专有性意义解释。而且,多个实例可被提供用于在本文中被描述为单个实例的资源、操作或结构。此外,各种资源、操作、模块、引擎和数据存储之间的界限在某种程度上是任意的,并且在特定说明性配置的上下文中示出了特定操作。功能的其他分配被预想并且可以落在本公开的各种实施例的范围内。一般而言,在示例配置中被呈现为分离的资源的结构和功能可以被实现为组合的结构或资源。类似地,如单个资源所呈现的结构和功能可以被实现为分离的资源。这些和其他变型、修改、添加和改进落在如在所附权利要求所表示的本公开的实施例的范围内。因此,说明书和附图将被认为是说明性而非限制性意义。
Claims (20)
1.一种方法,包括:
由计算设备从计算设备的相机接收图像数据;
由所述计算设备根据所述图像数据生成图像金字塔,所述图像金字塔包括在所述图像数据中的图像的多个级别,所述图像数据针对每个级别以多个分辨率被二次采样;
通过所述计算设备启动与所述图像金字塔的包括更高分辨率的至少一个预定级别相对应的图像数据到所述计算设备的图形处理单元GPU的传输;
由所述计算设备的中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流;
由所述计算设备的所述CPU将所计算的所述图像金字塔的所述至少一个预定粗略级别的光流传输到所述GPU;
由所述计算设备的所述GPU计算所述图像金字塔的包括更高分辨率的所述至少一个预定级别的光流;以及
由所述计算设备的所述GPU输出所述图像数据的所述光流。
2.根据权利要求1所述的方法,其中,图像数据包括用于由所述计算设备的所述相机采集的视频的视频流的一帧或多帧。
3.根据权利要求1所述的方法,其中,所述图像是用于由所述计算设备的所述相机采集的视频的视频流的帧。
4.根据权利要求1所述的方法,其中,由所述计算设备的所述中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流包括:
针对每个像素计算在X和Y方向上的源图像梯度;
将所述图像分成块网格;
计算每个块的梯度之和;
计算逆黑塞矩阵;
设置初始流场;
执行迭代块搜索;以及
计算逐像素流场。
5.根据权利要求1所述的方法,其中,由所述计算设备的所述中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流包括针对每个级别:
预处理图像梯度;
执行逐块光流;
根据所述逐块光流来执行稠密光流。
6.根据权利要求5所述的方法,其中,执行逐块光流包括:针对所述级别的每个块,基于逆成分执行迭代逆块搜索,以找到所述图像在X和Y方向上的增量光流。
7.根据权利要求6所述的方法,其中,执行迭代逆块搜索包括:计算块匹配的成本,并且其中,计算所述块匹配的成本是在单指令多数据SIMD上实现的。
8.根据权利要求5所述的方法,其中,执行稠密光流包括:使用相邻光流输出来评估像素差成本的过程,并且其中,所述过程通过一次生成四个双线性插值像素来在单指令多数据SIMD上实现。
9.根据权利要求6所述的方法,其中,执行迭代逆块搜索包括:
(a)确定所述图像与前一帧之间的像素差;
(b)使用所述像素差来计算X和Y运动矢量中的差;
(c)更新X和Y;
(d)确定像素成本是否小于预定阈值;以及
(e)如果所述像素成本不小于所述预定阈值,则返回步骤(a)。
10.根据权利要求1所述的方法,其中,由所述计算设备的所述GPU计算所述图像金字塔的包括更高分辨率的所述至少一个预定级别的所述光流包括对于每个并行级别:
预处理图像梯度;
执行逐块光流;
执行相邻同步;以及
根据所述逐块光流来执行稠密光流。
11.根据权利要求10所述的方法,其中,执行相邻同步包括:
对于所述图像金字塔的层中的多个块的给定块:
确定所述给定块的所有相邻块;
确定由成本函数针对每个相邻块运动矢量值给出的成本值;
比较每个相邻块成本值与所述给定块的成本值;以及
如果任何相邻块成本值小于所述给定块的所述成本值,则更新所述给定块的所述矢量值,其中,所述给定块的所述矢量值被更新为包括具有最低成本值的相邻块运动矢量值。
12.一种计算设备,包括:
存储指令的存储器;以及
由所述指令配置的一个或多个硬件处理器以执行以下操作:
从所述计算设备的相机接收图像数据;
根据所述图像数据生成图像金字塔,所述图像金字塔包括在所述图像数据中的图像的多个级别,所述图像数据针对每个级别以多个分辨率被二次采样;
启动与所述图像金字塔的包括更高分辨率的至少一个预定级别相对应的图像数据到所述计算设备的图形处理单元GPU的传输;
由所述计算设备的所述中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流;
由所述计算设备的所述CPU将所计算的所述图像金字塔的所述至少一个预定粗略级别的光流传输到所述GPU;
由所述计算设备的所述GPU计算所述图像金字塔的包括更高分辨率的所述至少一个预定级别的光流;以及
由所述计算设备的所述GPU输出所述图像数据的所述光流。
13.根据权利要求12所述的计算设备,其中,由所述计算设备的所述中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流包括针对每个级别:
预处理图像梯度;
执行逐块光流;
根据所述逐块光流来执行稠密光流。
14.根据权利要求13所述的计算设备,其中,执行逐块光流包括:针对所述级别的每个块,基于逆成分执行迭代逆块搜索,以找到所述图像在X和Y方向上的增量光流。
15.如权利要求14所述的计算设备,其中,执行迭代逆块搜索包括:计算块匹配的成本,并且其中,计算所述块匹配的成本是在单指令多数据SIMD上实现的。
16.根据权利要求13所述的计算设备,其中,执行稠密光流包括:使用相邻光流输出来评估像素差成本的过程,并且其中,所述过程通过一次生成四个双线性插值像素来在单指令多数据SIMD上实现。
17.根据权利要求14所述的计算设备,其中,执行迭代逆块搜索包括:
(a)确定所述图像与前一帧之间的像素差;
(b)使用所述像素差来计算X和Y运动矢量中的差;
(c)更新X和Y;
(d)确定像素成本是否小于预定阈值;以及
(e)如果所述像素成本不小于所述预定阈值,则返回步骤(a)。
18.根据权利要求12所述的计算设备,其中,由所述计算设备的所述GPU计算所述图像金字塔的包括更高分辨率的所述至少一个预定级别的所述光流包括对于每个并行级别:
预处理图像梯度;
执行逐块光流;
执行相邻同步;以及
根据所述逐块光流来执行稠密光流。
19.根据权利要求18所述的计算设备,其中,执行相邻同步包括:
对于所述图像金字塔的层中的多个块的给定块:
确定所述给定块的所有相邻块;
确定由成本函数针对每个相邻块运动矢量值给出的成本值;
比较每个相邻块成本值与所述给定块的成本值;以及
如果任何相邻块成本值小于所述给定块的所述成本值,则更新所述给定块的所述矢量值,其中,所述给定块的所述矢量值被更新为包括具有最低成本值的相邻块运动矢量值。
20.一种非暂态计算机可读介质,包括存储在其上的指令,所述指令可由至少一个处理器执行以使计算设备执行包括以下内容的操作:
从所述计算设备的相机接收图像数据;
根据所述图像数据生成图像金字塔,所述图像金字塔包括在所述图像数据中的图像的多个级别,所述图像数据针对每个级别以多个分辨率被二次采样;
启动与所述图像金字塔的包括更高分辨率的至少一个预定级别相对应的图像数据到所述计算设备的图形处理单元GPU的传输;
由所述计算设备的所述中央处理单元CPU计算所述图像金字塔的至少一个预定粗略级别的光流;
由所述计算设备的所述CPU将所计算的所述图像金字塔的所述至少一个预定粗略级别的光流传输到所述GPU;
由所述计算设备的所述GPU计算所述图像金字塔的包括更高分辨率的所述至少一个预定级别的所述光流;以及
由所述计算设备的所述GPU输出所述图像数据的所述光流。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862661958P | 2018-04-24 | 2018-04-24 | |
US62/661,958 | 2018-04-24 | ||
PCT/US2019/028732 WO2019209833A1 (en) | 2018-04-24 | 2019-04-23 | Efficient parallel optical flow algorithm and gpu implementation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112041887A true CN112041887A (zh) | 2020-12-04 |
CN112041887B CN112041887B (zh) | 2024-09-03 |
Family
ID=66912899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980027763.6A Active CN112041887B (zh) | 2018-04-24 | 2019-04-23 | 高效的并行光流算法和gpu实现 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11030721B2 (zh) |
EP (1) | EP3785225B1 (zh) |
KR (2) | KR102545642B1 (zh) |
CN (1) | CN112041887B (zh) |
WO (1) | WO2019209833A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115359097A (zh) * | 2022-10-20 | 2022-11-18 | 湖北芯擎科技有限公司 | 稠密光流生成方法、装置、电子设备及可读存储介质 |
CN116523951A (zh) * | 2023-07-03 | 2023-08-01 | 瀚博半导体(上海)有限公司 | 多层并行光流估计方法和装置 |
US11783448B2 (en) | 2018-04-24 | 2023-10-10 | Snap Inc. | Efficient parallel optical flow algorithm and GPU implementation |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11200678B2 (en) * | 2019-09-17 | 2021-12-14 | Sony Corporation | Image-based mask frame interpolation |
US11700225B2 (en) * | 2020-04-23 | 2023-07-11 | Snap Inc. | Event overlay invite messaging system |
US11360733B2 (en) | 2020-09-10 | 2022-06-14 | Snap Inc. | Colocated shared augmented reality without shared backend |
US11893668B2 (en) | 2021-03-31 | 2024-02-06 | Leica Camera Ag | Imaging system and method for generating a final digital image via applying a profile to image information |
CN114140502B (zh) * | 2021-12-10 | 2023-03-24 | 江南大学 | 一种基于嵌入式gpu的图像光流计算方法、装置以及设备 |
CN114612513B (zh) * | 2022-03-10 | 2024-03-01 | 西安交通大学 | 一种基于fpga的图像金字塔光流值计算方法及系统 |
CN117876206B (zh) * | 2024-01-17 | 2024-07-23 | 电子科技大学 | 基于可重构计算阵列的金字塔光流加速电路 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090072263A (ko) * | 2007-12-28 | 2009-07-02 | 주식회사 케이티 | 계층적인 구조의 영상 모델을 이용한 3차원 영상 생성방법과 장치, 이를 이용한 영상 인식 방법과 특징점 추출방법 그리고 상기 방법들을 수행하는 프로그램이 기록된기록매체 |
JP2009171498A (ja) * | 2008-01-21 | 2009-07-30 | Sony Corp | 画像処理装置、その処理方法およびプログラム |
US20110311099A1 (en) * | 2010-06-22 | 2011-12-22 | Parrot | Method of evaluating the horizontal speed of a drone, in particular a drone capable of performing hovering flight under autopilot |
US20140225902A1 (en) * | 2013-02-11 | 2014-08-14 | Nvidia Corporation | Image pyramid processor and method of multi-resolution image processing |
JP2014194797A (ja) * | 2008-10-15 | 2014-10-09 | Innovative Technologies Distributors Llc | オプティカルフローの決定のためのデジタル処理方法およびシステム |
US20150365696A1 (en) * | 2014-06-13 | 2015-12-17 | Texas Instruments Incorporated | Optical flow determination using pyramidal block matching |
CN106502782A (zh) * | 2015-09-04 | 2017-03-15 | 联发科技股份有限公司 | 异构计算系统及其方法 |
CN107657599A (zh) * | 2017-08-07 | 2018-02-02 | 北京航空航天大学 | 基于混合粒度划分和动态负载分配的遥感图像融合系统并行实现方法 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7706583B2 (en) * | 2002-11-11 | 2010-04-27 | Canon Kabushiki Kaisha | Image processing apparatus and method |
EP1849123A2 (en) * | 2005-01-07 | 2007-10-31 | GestureTek, Inc. | Optical flow based tilt sensor |
US7783096B2 (en) * | 2005-10-17 | 2010-08-24 | Siemens Corporation | Device systems and methods for imaging |
US7961925B2 (en) * | 2006-11-14 | 2011-06-14 | Siemens Aktiengesellschaft | Method and system for dual energy image registration |
US8553943B2 (en) | 2011-06-14 | 2013-10-08 | Qualcomm Incorporated | Content-adaptive systems, methods and apparatus for determining optical flow |
JP5633550B2 (ja) * | 2012-09-05 | 2014-12-03 | カシオ計算機株式会社 | 画像処理装置、画像処理方法及びプログラム |
US9083960B2 (en) * | 2013-01-30 | 2015-07-14 | Qualcomm Incorporated | Real-time 3D reconstruction with power efficient depth sensor usage |
US20140369557A1 (en) * | 2013-06-14 | 2014-12-18 | Qualcomm Incorporated | Systems and Methods for Feature-Based Tracking |
CN103426184B (zh) | 2013-08-01 | 2016-08-10 | 华为技术有限公司 | 一种光流跟踪方法和装置 |
US20180239948A1 (en) * | 2014-11-18 | 2018-08-23 | Elwha Llc | Satellite with machine vision for disaster relief support |
US10839487B2 (en) * | 2015-09-17 | 2020-11-17 | Michael Edwin Stewart | Methods and apparatus for enhancing optical images and parametric databases |
US11164295B2 (en) * | 2015-09-17 | 2021-11-02 | Michael Edwin Stewart | Methods and apparatus for enhancing optical images and parametric databases |
KR102469567B1 (ko) * | 2016-04-11 | 2022-11-22 | 삼성전자주식회사 | 이미징 장치 및 그 동작 방법 |
US10424069B2 (en) * | 2017-04-07 | 2019-09-24 | Nvidia Corporation | System and method for optical flow estimation |
US10621725B2 (en) * | 2017-04-12 | 2020-04-14 | Here Global B.V. | Small object detection from a large image |
US10499870B2 (en) * | 2017-05-19 | 2019-12-10 | The Chinese University Of Hong Kong | Methods and apparatuses for quantifying vascular fluid motions from DSA |
US20180333120A1 (en) * | 2017-05-19 | 2018-11-22 | The Chinese University Of Hong Kong | Methods and apparatuses for quantifying vascular fluid motions from dsa |
US10852419B2 (en) * | 2017-10-20 | 2020-12-01 | Texas Instruments Incorporated | System and method for camera radar fusion |
EP3785225B1 (en) | 2018-04-24 | 2023-09-13 | Snap Inc. | Efficient parallel optical flow algorithm and gpu implementation |
-
2019
- 2019-04-23 EP EP19731361.2A patent/EP3785225B1/en active Active
- 2019-04-23 KR KR1020207033347A patent/KR102545642B1/ko active IP Right Grant
- 2019-04-23 CN CN201980027763.6A patent/CN112041887B/zh active Active
- 2019-04-23 WO PCT/US2019/028732 patent/WO2019209833A1/en unknown
- 2019-04-23 US US16/392,138 patent/US11030721B2/en active Active
- 2019-04-23 KR KR1020237020243A patent/KR102655540B1/ko active IP Right Grant
-
2021
- 2021-05-24 US US17/328,689 patent/US11783448B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090072263A (ko) * | 2007-12-28 | 2009-07-02 | 주식회사 케이티 | 계층적인 구조의 영상 모델을 이용한 3차원 영상 생성방법과 장치, 이를 이용한 영상 인식 방법과 특징점 추출방법 그리고 상기 방법들을 수행하는 프로그램이 기록된기록매체 |
JP2009171498A (ja) * | 2008-01-21 | 2009-07-30 | Sony Corp | 画像処理装置、その処理方法およびプログラム |
JP2014194797A (ja) * | 2008-10-15 | 2014-10-09 | Innovative Technologies Distributors Llc | オプティカルフローの決定のためのデジタル処理方法およびシステム |
US20110311099A1 (en) * | 2010-06-22 | 2011-12-22 | Parrot | Method of evaluating the horizontal speed of a drone, in particular a drone capable of performing hovering flight under autopilot |
US20140225902A1 (en) * | 2013-02-11 | 2014-08-14 | Nvidia Corporation | Image pyramid processor and method of multi-resolution image processing |
US20150365696A1 (en) * | 2014-06-13 | 2015-12-17 | Texas Instruments Incorporated | Optical flow determination using pyramidal block matching |
CN106502782A (zh) * | 2015-09-04 | 2017-03-15 | 联发科技股份有限公司 | 异构计算系统及其方法 |
CN107657599A (zh) * | 2017-08-07 | 2018-02-02 | 北京航空航天大学 | 基于混合粒度划分和动态负载分配的遥感图像融合系统并行实现方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11783448B2 (en) | 2018-04-24 | 2023-10-10 | Snap Inc. | Efficient parallel optical flow algorithm and GPU implementation |
CN115359097A (zh) * | 2022-10-20 | 2022-11-18 | 湖北芯擎科技有限公司 | 稠密光流生成方法、装置、电子设备及可读存储介质 |
CN116523951A (zh) * | 2023-07-03 | 2023-08-01 | 瀚博半导体(上海)有限公司 | 多层并行光流估计方法和装置 |
CN116523951B (zh) * | 2023-07-03 | 2023-09-05 | 瀚博半导体(上海)有限公司 | 多层并行光流估计方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3785225B1 (en) | 2023-09-13 |
US11783448B2 (en) | 2023-10-10 |
US11030721B2 (en) | 2021-06-08 |
US20190325561A1 (en) | 2019-10-24 |
KR20230093076A (ko) | 2023-06-26 |
EP3785225A1 (en) | 2021-03-03 |
KR20210002578A (ko) | 2021-01-08 |
KR102545642B1 (ko) | 2023-06-21 |
CN112041887B (zh) | 2024-09-03 |
US20210279842A1 (en) | 2021-09-09 |
WO2019209833A1 (en) | 2019-10-31 |
KR102655540B1 (ko) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112041887B (zh) | 高效的并行光流算法和gpu实现 | |
US11743426B2 (en) | Generating an image mask using machine learning | |
US11669561B2 (en) | Content sharing platform profile generation | |
KR102467236B1 (ko) | 실시간 추적 보상 이미지 효과 | |
KR20220098814A (ko) | 가상 비전 시스템 | |
US11087513B1 (en) | Real-time bokeh effect | |
US20210334993A1 (en) | Photometric-based 3d object modeling | |
EP3844718A1 (en) | Active image depth prediction | |
US11763130B2 (en) | Compact neural networks using condensed filters | |
KR20230079257A (ko) | 사용자 생애 가치 결정 | |
CN114365198A (zh) | 遮挡检测系统 | |
US11907312B1 (en) | User type affinity estimation using gamma-poisson model | |
KR20230074588A (ko) | 메시징 시스템에서 제시하기 위한 콘텐츠를 선택하기 위한 사용자들의 생애 가치들의 이용 | |
US20240185524A1 (en) | Augmented three-dimensional structure generation | |
KR20240049575A (ko) | 조합된 판독 및 반응 메시지 |
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 |