DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE...

44
DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan Herhut, Philipp Slusallek 1

Transcript of DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE...

Page 1: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

DECLARATIVE AR ANDIMAGE PROCESSING

ON THE WEBWITH XFLOW

Felix Klein, Dmitri Rubinstein, Kristian Sons, FarshadEinabadi, Stephan Herhut, Philipp Slusallek

1

Page 2: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan
Page 3: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

MOTIVATION

Page 4: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

THE WEB IS READY FOR ARFast JavaScript

WebGL, WebCL upcoming

getUserMedia, WebRTC

Geolocation, Orientation, Motion

Problem: Usability>

Page 5: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

HTMLDeclarative, High-Level

Pretty straight forward!

WEBGLImperative, Low-Level

Pretty difficult...

NEW WEB IS POWERFUL AND COMPLICATED

<div> <p> This is some declarative HTML </p> <img src="blub.png" alt="with an image too" > <a href="someWhereElse.html" > ...and a famous link. </a></div>

var canvas = document.getElementById("cvs");initGL(canvas);initShaders();initBuffers();

gl.clearColor(0.0, 0.0, 0.0, 1.0);gl.enable(gl.DEPTH_TEST);

drawScene();

Plz make 3D simpler for Web developers kthxbye.>

Page 6: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

DECLARATIVE 3D FOR THE WEBW3C Community Group

Goals

Extension to HTML5 for 3D Content

Integrated with DOM, CSS etc.

Accessible to Web developers

Evaluation Platform (polyfills)

X3DOM - X3D inside the DOM

XML3D & Xflow

Page 7: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

XML3DAn extension to HTML5 for 3D graphics.

Presented at Web3D 2010

Key features

Declarative 3D inside of Web document

Minimal extension to HTML

Generic core - matching modern GPUs

<html xmlns="http://www.w3.org/1999/xhtml"><!-- ... --><body> <xml3d xmlns="http://www.xml3d.org/2009/xml3d"> <!-- ... --> <group shader="shaders.xml#xml3dTex" > <mesh src="cube.json" /> </group> </xml3d></body></html>

Page 8: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan
Page 9: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

XFLOWDeclarative Data Processing based on Dataflows.

Presented at Web3D 2012

Key features

Declare Dataflows inside the Web document

Dataflows execution parallelized / mapped on GPU

Generic Design - reusable operators for processing

<data id="wave" compute="(position, normal) = xflow.mywave(pos, norm, str, len, phase)" > <float name="str">0.01</float> <float name="len">40.0</float> <float name="phase">0.0</float> <data compute="(pos, norm, texcoord, index) = xflow.mygrid(size)"> <int name="size">50</int> </data></data>

Page 10: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan
Page 11: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

GOALExtend XML3D & Xflow

Support for images processing

Support for augmented reality

Go for a minimal extension

Page 12: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

IMAGE PROCESSINGWhat do we need for image processing with Xflow?

Page 13: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

XFLOW FOR REGULAR MESHES

Use compute attribute

access typed arrays (e.g. with float data)

output typed arrays

<data id="morphedPos" compute="pos = xflow.morph(pos, pAdd, weight)" > <float3 name="pos" >1.0 0.04 -0.5 ...</float3> <float3 name="pAdd" >0.0 1.0 2.0 ...</float3> <float name="weight" >0.45</float></data>

Page 14: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

XFLOW WITH IMAGES

Use texture element to pass images or videos to Xflowoperators

Xflow operator generates new image

Output images can have arbitrary size

Default: output image same size as input image

<!-- Process image --><data compute="grayImage = xflip.grayscale(image)"> <texture name="image" > <img sr c="someImage.png" /> </texture></data><!-- Process videos --><data compute="grayImage = xflip.grayscale(image)"> <texture name="image" > <video src="someVideo.avi" autoplay /> </texture></data>

Page 15: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

CONNECT PROCESSED IMAGES TO 3D

Used processed image as surface texture

Link processed images to shader

Link shader to group

<shader id="ipShader" script="urn:xml3d:shader:phong" > <data compute="diffuseTexture=xflip.grayscale(image)"> <texture name="image" > <img src="someImage.png" /> </texture> </data></shader><group shader="#ipShader" > <mesh src="squareMesh.xml" /></group>

Page 16: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

USE PROCESSED IMAGE WITHOUT 3D: XFLIP

Runs indepentent of XML3D

Display processed images with xflip element

Exactly like regular images

<!-- Process image --><xflip id="ipData" compute="output = xflip.grayscale(input)" > <texture name="input" > <img src="someImage.png" /> </texture></xflip><!-- Display process images in HTML --><h3>Input:</h3><xflimg src="#ipData" srcName="input" />

Page 17: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

EXAMPLE: IMAGE PROCESSING

Page 18: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

AUGMENTED REALITY

Page 19: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

THE ACTUAL XFLOW CODE

Based on JSARToolKit

Output

transforms: world-space transformation for each marker

visibilities: visibility flag for each marker

perspective: matrix for intrinsic camera transformation

<data id="arBase" compute="transforms, visibilities, perspective = xflar.detect(arvideo, markers, threshold)"> <texture name="arvideo"> <video autoplay="true" src="ar_marker.ogg"></video> </texture> <int name="markers">22 64</int> <int name="threshold" >110</int></data>

Page 20: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

CONNECTION WITH DOCUMENT

Page 21: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

UPDATE INTRINSIC CAMERA PARAMETERS

Refer xflow element via perspective attribute

Expected to contain perspective value of type float4x4

<!--AR Data (as before) --><data id="arBase" compute="transforms,visibilities,perspective= ..."> ...</data><!-- Connect to view --><view id="mainView" perspective="#arBase" />

Page 22: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

UPDATE POSITION OF GEOMETRY<!--AR Data (as before) --><data id="arBase" compute="transforms,visibilities,perspective= ..."> ...</data><!--Extract transform for specific marker --><data id="obj1Xfm" compute="transform = xflow.select(index, transforms)"> <int name="index">0</int> <data src="#arBase"/></data><!--Apply transform to a group node containing geometry--><group transform="#obj1Xfm" > <!-- Geometry placed relative to Marker 0 --></group>

Page 23: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

UPDATE VISIBILITY OF MESH<!--AR Data (as before) --><data id="arBase" compute="transforms,visibilities,perspective= ..."> ...</data><!--Extract visibility for specific marker --><data id="obj1Vis" compute="visibility = xflow.select(index, visibilities)"> <int name="index">0</int> <data src="#arBase"/></data><!--Assign visibility flag to shader--><shader id="obj1Shader" script="urn:xml3d:shader:phongvs" > <float3 name="diffuseColor">1.0 0.4 0.2</float3> <float name="ambientIntensity">0.2</float> <data src="#obj1Vis" /></shader>

Page 24: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

Basic AR application

Fiducial Marker Detection

Based on JSARToolkit

Fully Declarative

No additional JavaScript

FIRST RESULTS FOR AR

Page 25: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

AR IMPROVEMENTS

Page 26: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

We simply overlap a videowith an xml3d element

Two videos: one in 2D layout,

one in 3D scene

3D content delayed by marker

algorithm + rendering

PROBLEM#1: VIDEO AND 3D NOTSYNCHRONIZED

Page 27: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

Use canvas instead of video

Draw video frame currentlyprocessed by Xflow

Draw it right beforerendering

Drawing in canvas works only

via JavaScript

So far, we have only

declarative content

WORKAROUND: DRAW VIDEO INTO CANVAS

Need JavaScript integrated with Xflow and Rendering>

Page 28: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

INTRODUCTION: DATA OBSERVERS

Designed after DOM MutationObservers

Efficiently integrated

Responses between dataflow computation and rendering

Great way to efficiently integrate scripts for more flexibility

var observer = new XML3DDataObserver(function (records, observer) { var arvideo = records[0].result.getValue("arvideo"); if (arvideo) drawCanvas(canvasElement, arvideo);});observer.observe(dataElement, { names: ["arvideo"] });

Page 29: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

JSARToolKit expectsthreshold

Used to pre-process image

into black/white version

Fixed threshold only worksfor certain lightingconditions

Add a way to automatically

adapt threshold to lighting

conditions

PROBLEM#2: FIXED THRESHOLD

Page 30: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

POWER OF GENERIC DESIGN!

Reuse generic Xflow image processing operators

Grayscale image, compute histogram

Use new xfloar.getOtsuThreshold

compute threshold from histogram

<data id="arBase" compute="transforms, visibilities, perspective = xflar.detect(arvideo, markers, threshold)"> <int name="markers">22 64</int> <data compute="threshold = xflar.getOtsuThreshold(hgram)"> <data compute="hgram = xflip.createHistogram(grvideo,channel)"> <int name="channel">0</int> <data compute="grvideo = xflip.grayscale(arvideo)"> <texture name="arvideo"> <video autoplay="true" src="ar_marker.ogg"></video> </texture> </data> </data> </data></data>

Page 31: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

RESULT: USING OTSU THRESHOLDCOMPUTATION

Page 32: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

PARALLELIZATION

Page 33: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

PARALLELIZATION WITH RIVERTRAILParallel JavaScript API by Intel Labs (RiverTrail project)

Data-parallelism with regular JavaScript functions

Available as Firefox Plug-in

Also first native support in Firefox Beta

Effectively for image processing

Process each pixel in parallel

Page 34: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

PERFORMANCE RESULTSXflow Operator Time in ms Speedup Factor

Sequential Parallel

Convolution 3x3 236 52 4.5

Convolution 5x5 502 89 5.6

Convolution 7x7 880 141 6.2

Convolution 9x9 1420 218 6.5

Image size: 896x512 pixel; Processor: Intel Core i7-2670QM

Page 35: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

EXAMPLES

Page 36: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

JUMPING TEAPOTS!

Page 37: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan
Page 38: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

I HEARD YOU LIKE WEBCAM STREAMS...

Page 39: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan
Page 40: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

CONCLUSION

Page 41: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

CONTRIBUTIONSupport for Image Processing and AR

For Declarative 3D for the Web

Minimal extension to existing standard

0 new nodes

For AR: 2 Xflow operators (+3 otsu)

Several new connections for Xflow (reusable)

Generic Design is awesome!>

Page 42: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

FUTURE WORKFurther decompose xflar.detect into smaller operators

Option to replace individual parts of the detection algorithm

Implement Post-Processing

A better way to combine video with rendered content

Further optimize Xflow

Merge image-processing operators

Execution with parallel JavaScript

Page 43: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

THANKS TO OUR SUPPORTERSIntel Visual Computing Institute

Verve EU Project

FI-CONTENT EU Project

Part of Future Internet PPP program

Page 44: DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB€¦ · DECLARATIVE AR AND IMAGE PROCESSING ON THE WEB WITH XFLOW Felix Klein, Dmitri Rubinstein, Kristian Sons, Farshad Einabadi, Stephan

THANKS!QUESTIONS?