Skip to content

PatchPartPlugin

Patch part plugin

Plugin conditionally patches (inpaints / erases) foreground regions of an input image. Foreground is defined by the body segmentation mask provided by a PoseProcessor or by a FaceProcessor. There are 2 types of regions: “patch” and “keep”, both are defined by corresponding sets of scene meshes. Plugin patches foreground/masked pixels that belong to “patch” regions but are not part of “keep” regions. This can be used in apparel virtual try-on to remove parts of a body that stick out of (not covered by) an outfit. In this case, “patch” region is defined by outfit meshes and “keep” region is the reference body model that at the same time serves as occluder. The plugin may optionally update segmentation mask and discard foreground regions that were patched, in other words flag patched pixels as background. The PatchPartPlugin is compatible with renderers derived from the BabylonUniRenderer. Plugin depends on @geenee/bodyrenderers-common!MaskUploadPlugin that must be attached to the renderer to upload mask buffer in texture. One may utilize a @geenee/bodyrenderers-common!MaskUpscalePlugin providing higher resolution segmentation mask that significantly increases accuracy of patching and reduces the size of the patch region. Other mask post-processing plugins may be used to fine-tune for particular use case.

new PatchPartPlugin(thresh, radius, updateMask, maskSize): PatchPartPlugin

Constructor

number = 0.55

Foreground threshold

number = 512

Radius of foreground search

boolean = false

Update segmentation mask

Size = ...

Size of segmentation mask

PatchPartPlugin

ShaderPlugin.constructor

protected optional fragSrc: string

Code of fragment shader (copy shader by default)

ShaderPlugin.fragSrc


protected optional inputs: string[]

Shader texture inputs (names of sampler uniforms)

ShaderPlugin.inputs


loaded: boolean

Loaded state

ShaderPlugin.loaded


protected maskSize: Size

Size of segmentation mask


ordinal: number

Ordinal number

ShaderPlugin.ordinal


protected radius: number = 512

Radius of foreground search


protected optional renderer: Renderer<SegmentationResult>

Renderer loaded the plugin

ShaderPlugin.renderer


protected optional shader: ShaderProgram

Rendering shader

ShaderPlugin.shader


protected optional shaderCtx: WebGL2RenderingContext

Rendering context

ShaderPlugin.shaderCtx


protected size: Size

Image size

ShaderPlugin.size


protected thresh: number = 0.55

Foreground threshold


protected optional uniforms: object

Shader uniforms as name-type map object

[key: string]: UniformType

ShaderPlugin.uniforms


protected updateMask: boolean = false

Update segmentation mask


protected optional vertSrc: string

Vertex shader source (copy shader by default)

ShaderPlugin.vertSrc

dispose(): void

Dispose video plugin

void

ShaderPlugin.dispose


load(renderer): Promise<void>

Initialize plugin

Initializes resources required for conditional body patching.

Renderer<SegmentationResult>

Renderer this plugin is attached to

Promise<void>

Promise resolving when initialization is finished

ShaderPlugin.load


process(result, input): Promise<boolean>

Process the image

Patches (inpaints) foreground image pixels according to the provided segmentation mask. Patched pixels must also belong to “patch” region and not be a part of “keep” region. Regions are defined by corresponding sets of scene meshes.

SegmentationResult

Results of video processing

WebGLTexture

Current image texture

Promise<boolean>

True on success, false otherwise

ShaderPlugin.process


protected renderParts(): null | WebGLTexture

Render patch and keep meshes

Rendered meshes provide mask of patch/keep regions.

null | WebGLTexture

Mask texture


setParts(patchParts, keepParts): void

Set meshes defining patch regions

AbstractMesh[] = []

Meshes defining “patch” regions

AbstractMesh[] = []

Meshes defining “keep” regions

void


setupCamera(ratio, angle): void

Set camera parameters

Could be overridden to adjust plugin’s pipeline.

number

Aspect ration of input video

number

Vertical field of view in radians

void

ShaderPlugin.setupCamera


setupVideo(size): void

Set video size

Adjusts shader and texture to a new size.

Size

Resolution of input video

void

ShaderPlugin.setupVideo


unload(): void

Reset plugin

Releases all resources and instances created in load().

void

ShaderPlugin.unload


update(result, stream): Promise<void>

Sealed

Update the image

Main method implementing webgl shader effect or filter. ShaderRenderer keeps track of the current iamge texture that will be be rendered. ShaderPlugin uses the current texture as input and writes results to ShaderPlugin#output. ShaderPlugin#output becomes new current texture of ShaderRenderer. This way all ShaderPlugins attached to renderer organize a chain of effects applied on top of each other. Method process() implements shader effect itself, it’s intended to be overridden by effect authors.

SegmentationResult

Results of video processing

HTMLCanvasElement

Captured video frame

Promise<void>

Promise resolving when update is finished

ShaderPlugin.update