SlideShare a Scribd company logo
1 of 18
Download to read offline
Tom Duchêne :: David-Alexandre Chanel
Augmenta contribution guide
https://github.com/Theoriz/Augmenta/wiki
Introduction
Implementing an Augmenta library (or addon, module, node,
object…) for your usual tool is pretty easy !
This document is here to give some specifications about the
basic features each Augmenta library should offer.
It ensures that users won’t be lost when changing from one
technology to another, and allows code to be easily ported.
Let’s start coding !
General
• The repository must contain a clear step by step and noob proof
Readme.md file (ex : https://github.com/Theoriz/AugmentaP5)
• It must contain the lib and the examples following the
specifications of this doc
• It must be as clear and commented as possible so the community
can help maintain it in a good shape : )
• The lib must not be dependent of any other external lib except
OSC (if it’s not native)
Naming and conventions
• The name of the lib should be “Augmenta”, in the fashion of the
technology it is implemented for (“ofxAugmenta” for
OpenFrameworks, “AugmentaP5” for processing, etc.).
If there is no convention for naming the libraries, you can simply append the name of
the technology (AugmentaUnity for example)
• If needed, you can add the prefix “Augmenta” or “au” to specify
that an object is linked to Augmenta
• For everything else, use the code conventions of the technology
you’re using
Objects
Here are the different objects (or classes) that should be implemented :
• The object containing the Augmenta data for one person should be
called AugmentaPerson
• The object containing the Augmenta data of the whole scene
should be called AugmentaScene
• The main object should have the name of the lib. The instance of this
object in the example code can be called augmentaReceiver,
auReceiver or simply receiver
AugmentaPerson
• Contains all the Augmenta data of one person sent in the OSC
messages (see next slide)
• If possible, has a draw() function that displays all info (centroid,
bounding box, id, etc.)
AugmentaPerson data
/au/personEntered args0 arg1 ...
/au/personWillLeave args0 arg1 …
/au/personUpdated args0 arg1 …
Where args are :
0: pid (int)
1: oid (int)
2: age (int)
3: centroid.x (float 0-1)
4: centroid.y (float 0-1)
5: velocity.x (float 0-1)
6: velocity.y (float 0-1)
7: depth (float)
8: boundingRect.x (float 0-1)
9: boundingRect.y (float 0-1)
10: boundingRect.width (float 0-1)
11: boundingRect.height (float 0-1)
12: highest.x (float 0-1)
13: highest.y (float 0-1)
14: highest.z (float 0-1)
// Personal ID ex : 42th person to enter has pid=41
// Ordered ID ex : 3rd person still present has oid=2
// Time on stage (in frame number)
// Position projected to the ground
// Speed and direction vector
// Distance to sensor (in m) (not implemented)
// Top view bounding box
// Highest point placement
// Height of the person (not implemented)
OSC messages sent for each detected person :
Data protocol is up-to-date here :
https://github.com/Theoriz/Augmenta/wiki
AugmentaScene
• Contains all the Augmenta data of the scene sent in the OSC
message sent each frame (see next slide)
• The most important info we’ll use is the scene’s width/height sent by
Augmenta
AugmentaScene data
/au/scene args0 arg1 …
Where args are :
0: currentTime (int)
1: percentCovered (float 0-1)
2: numPeople (int)
3: averageMotion.x (float 0-1)
4: averageMotion.y (float 0-1)
5: scene.width (int)
6: scene.height (int)
7: scene.depth (int)
OSC message sent each frame to describe the
scene :
Data protocol is up-to-date here :
https://github.com/Theoriz/Augmenta/wiki
Main object
• Contains an AugmentaScene and an array (or vector, etc.) of
AugmentaPerson representing all the people in the scene.
• It should be created with a given OSC port (or with default 12000)
and start listening right away
• It should have tools like isConnected() to check if the port has
already been successfully bound by the lib, or reconnect() to
connect to a new OSC port on the fly
• The main object will handle the OSC messages and provide three use
paradigms to the users (see next slides)
Handle the OSC messages
• The main object listens to four specific OSC messages :
– /au/scene : sent everyframe to update the scene info
– /au/personEntered : a new person entered the scene
– /au/personUpdated :a person already present has been updated
– /au/personWillLeave :a person already present is about to leave the scene
• The scene info is directly stored into the AugmentaScene object
• Every “person” message leads to either adding / updating / removing an
AugmentaPerson in the array containing all the people present in the scene
(Warning : If an update message is sent for a person that doesn’t exist, it must
be created)
• For safety reasons, if an AugmentaPerson has not been updated for a certain
number of frames, it is considered missing and must be removed. Set the
number of frames with a setTimeOut() function (default 120).
Paradigm #1
After having handled the OSC messages, there are three paradigms to
implement in the main object. Here is the first one (iterative looping) :
• The user may want to simply iterate over all the people in the scene
• Then we have to provide a way to get the AugmentaPeople
array/vector/etc. containing all the AugmentaPerson
• The function can be named getPeopleArray() for example
Paradigms #2
• The second paradigm is dataflow/event oriented
• The lib should register and call the following callback methods, which should be
triggered at every similar OSC event (or when a person is artificially
added/removed). It provides the AugmentaPerson as an argument.
void personEntered (AugmentaPerson p) {
print(“Person entered : "+ p.pid );
};
void personUpdated (AugmentaPerson p) {
print(“Person updated : "+ p.pid );
};
void personWillLeave (AugmentaPerson p) {
print(“Person left : "+ p.pid );
};
• The user can simply implement those methods in his code to get notified
when a change occurs and get the person related to it.
Paradigms #3
• The third paradigm is especially useful when only one user is supposed
to interact, or for quick prototyping.
• The lib must implement the two following methods :
getNewestPerson() and getOldestPerson()
• They both return the AugmentaPerson which has the (respectively)
smallest / greatest “age” value, or null if no one is in the scene.
• The oldest person is the most used, because you often want the first
person that has entered the scene to keep interacting even if someone
else came after him. It also prevent noise from disturbing the
experience.
Examples
The repository must contain some examples following those
guidelines :
• It must contain a minimalistic example with no external
libraries dependency (no external GUI, no Syphon, nothing)
– The example should simply display a point for each AugmentaPerson and
a point of a different color for the oldest/newest person
– The draw() function of the AugmentaPerson should be used to draw all
data so the user can quickly test the lib
Examples
The other examples should contain :
• A graphical easy way of changing the OSC port (and ideally the
window size)
• An implementation of the isConnected() method to warn in the
graphical interface if the port is already bound (draw the OSC
port in green if OK, red if not connected)
• The autoSize feature, which resizes the output texture or window
to the correct size of the current frame (contained in
AugmentaScene).
• A toggle button to enable a debug view drawing all the data
with the draw() method
Examples
Some other “Nice to have” options for examples :
• Syphon/spout output
• 3D bounding box drawing
• Assets example (audio/sprites or others)
• Nice visual effects examples
• Nice use case examples
• TUIO support
Share !
When you start working on your library / addon / plugin or even
when it’s fully ready, don’t hesitate to contact us so we can add
it to the official repos/documentation and give you our warmest
thanks for contributing to this exciting project !
contact@theoriz.com
https://github.com/Theoriz/Augmenta

More Related Content

What's hot

Python for Scientists
Python for ScientistsPython for Scientists
Python for ScientistsAndreas Dewes
 
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob Lisi
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob LisiUsing Grafana with InfluxDB 2.0 and Flux Lang by Jacob Lisi
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob LisiInfluxData
 
Performance Portability Through Descriptive Parallelism
Performance Portability Through Descriptive ParallelismPerformance Portability Through Descriptive Parallelism
Performance Portability Through Descriptive ParallelismJeff Larkin
 
Optimizing the Grafana Platform for Flux
Optimizing the Grafana Platform for FluxOptimizing the Grafana Platform for Flux
Optimizing the Grafana Platform for FluxInfluxData
 
C++ AMP 실천 및 적용 전략
C++ AMP 실천 및 적용 전략 C++ AMP 실천 및 적용 전략
C++ AMP 실천 및 적용 전략 명신 김
 
OCamlOScope: a New OCaml API Search
OCamlOScope: a New OCaml API SearchOCamlOScope: a New OCaml API Search
OCamlOScope: a New OCaml API SearchJun Furuse
 
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsEarly Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsJeff Larkin
 
Best Practices for OpenMP on GPUs - OpenMP UK Users Group
Best Practices for OpenMP on GPUs - OpenMP UK Users GroupBest Practices for OpenMP on GPUs - OpenMP UK Users Group
Best Practices for OpenMP on GPUs - OpenMP UK Users GroupJeff Larkin
 
Computer notes - Hashing
Computer notes - HashingComputer notes - Hashing
Computer notes - Hashingecomputernotes
 
190111 tf2 preview_jwkang_pub
190111 tf2 preview_jwkang_pub190111 tf2 preview_jwkang_pub
190111 tf2 preview_jwkang_pubJaewook. Kang
 
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5GTC16 - S6510 - Targeting GPUs with OpenMP 4.5
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5Jeff Larkin
 
DSC - Android Study Jams - Session 2
DSC - Android Study Jams - Session 2 DSC - Android Study Jams - Session 2
DSC - Android Study Jams - Session 2 vaishnaviayyappan
 
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018Piotr Wikiel
 
Presentation template - jupyter2slides
Presentation template - jupyter2slidesPresentation template - jupyter2slides
Presentation template - jupyter2slidesDat Tran
 

What's hot (20)

Python for Scientists
Python for ScientistsPython for Scientists
Python for Scientists
 
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob Lisi
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob LisiUsing Grafana with InfluxDB 2.0 and Flux Lang by Jacob Lisi
Using Grafana with InfluxDB 2.0 and Flux Lang by Jacob Lisi
 
Performance Portability Through Descriptive Parallelism
Performance Portability Through Descriptive ParallelismPerformance Portability Through Descriptive Parallelism
Performance Portability Through Descriptive Parallelism
 
Optimizing the Grafana Platform for Flux
Optimizing the Grafana Platform for FluxOptimizing the Grafana Platform for Flux
Optimizing the Grafana Platform for Flux
 
Lrz kurse: r visualisation
Lrz kurse: r visualisationLrz kurse: r visualisation
Lrz kurse: r visualisation
 
C++ AMP 실천 및 적용 전략
C++ AMP 실천 및 적용 전략 C++ AMP 실천 및 적용 전략
C++ AMP 실천 및 적용 전략
 
OCamlOScope: a New OCaml API Search
OCamlOScope: a New OCaml API SearchOCamlOScope: a New OCaml API Search
OCamlOScope: a New OCaml API Search
 
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsEarly Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
 
A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
XRobots
XRobotsXRobots
XRobots
 
Circuloapp
CirculoappCirculoapp
Circuloapp
 
Best Practices for OpenMP on GPUs - OpenMP UK Users Group
Best Practices for OpenMP on GPUs - OpenMP UK Users GroupBest Practices for OpenMP on GPUs - OpenMP UK Users Group
Best Practices for OpenMP on GPUs - OpenMP UK Users Group
 
Computer notes - Hashing
Computer notes - HashingComputer notes - Hashing
Computer notes - Hashing
 
Twisted is easy
Twisted is easyTwisted is easy
Twisted is easy
 
program on Function overloading in java
program on  Function overloading in javaprogram on  Function overloading in java
program on Function overloading in java
 
190111 tf2 preview_jwkang_pub
190111 tf2 preview_jwkang_pub190111 tf2 preview_jwkang_pub
190111 tf2 preview_jwkang_pub
 
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5GTC16 - S6510 - Targeting GPUs with OpenMP 4.5
GTC16 - S6510 - Targeting GPUs with OpenMP 4.5
 
DSC - Android Study Jams - Session 2
DSC - Android Study Jams - Session 2 DSC - Android Study Jams - Session 2
DSC - Android Study Jams - Session 2
 
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018
Apache beam — promyk nadziei data engineera na Toruń JUG 28.03.2018
 
Presentation template - jupyter2slides
Presentation template - jupyter2slidesPresentation template - jupyter2slides
Presentation template - jupyter2slides
 

Viewers also liked (7)

01
0101
01
 
лобзин
лобзинлобзин
лобзин
 
CV Sankalp16.doc
CV Sankalp16.docCV Sankalp16.doc
CV Sankalp16.doc
 
Williams Globalization Paper
Williams Globalization PaperWilliams Globalization Paper
Williams Globalization Paper
 
куртцер
куртцеркуртцер
куртцер
 
Best dewalt router
Best dewalt routerBest dewalt router
Best dewalt router
 
Metodos agiles
Metodos agilesMetodos agiles
Metodos agiles
 

Similar to Augmenta Contribution guide

C5 c++ development environment
C5 c++ development environmentC5 c++ development environment
C5 c++ development environmentsnchnchl
 
Week1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC BeginWeek1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC Begin敬倫 林
 
ACM DEBS 2015: Realtime Streaming Analytics Patterns
ACM DEBS 2015: Realtime Streaming Analytics PatternsACM DEBS 2015: Realtime Streaming Analytics Patterns
ACM DEBS 2015: Realtime Streaming Analytics PatternsSrinath Perera
 
DEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
DEBS 2015 Tutorial : Patterns for Realtime Streaming AnalyticsDEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
DEBS 2015 Tutorial : Patterns for Realtime Streaming AnalyticsSriskandarajah Suhothayan
 
Apache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapApache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapKostas Tzoumas
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems PerformanceBrendan Gregg
 
designpatterns_blair_upe.ppt
designpatterns_blair_upe.pptdesignpatterns_blair_upe.ppt
designpatterns_blair_upe.pptbanti43
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustEvan Chan
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesJamund Ferguson
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 RoboticsMax Kleiner
 
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxCS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxfaithxdunce63732
 
Deploying Machine Learning Models with Pulsar Functions - Pulsar Summit Asia...
Deploying Machine Learning Models with Pulsar Functions  - Pulsar Summit Asia...Deploying Machine Learning Models with Pulsar Functions  - Pulsar Summit Asia...
Deploying Machine Learning Models with Pulsar Functions - Pulsar Summit Asia...StreamNative
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageDamien Dallimore
 

Similar to Augmenta Contribution guide (20)

C5 c++ development environment
C5 c++ development environmentC5 c++ development environment
C5 c++ development environment
 
Week1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC BeginWeek1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC Begin
 
ACM DEBS 2015: Realtime Streaming Analytics Patterns
ACM DEBS 2015: Realtime Streaming Analytics PatternsACM DEBS 2015: Realtime Streaming Analytics Patterns
ACM DEBS 2015: Realtime Streaming Analytics Patterns
 
DEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
DEBS 2015 Tutorial : Patterns for Realtime Streaming AnalyticsDEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
DEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
 
Introduction Of C++
Introduction Of C++Introduction Of C++
Introduction Of C++
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
Apache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmapApache Flink: API, runtime, and project roadmap
Apache Flink: API, runtime, and project roadmap
 
Python1
Python1Python1
Python1
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems Performance
 
designpatterns_blair_upe.ppt
designpatterns_blair_upe.pptdesignpatterns_blair_upe.ppt
designpatterns_blair_upe.ppt
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax Trees
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 Robotics
 
Java applet
Java appletJava applet
Java applet
 
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxCS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
 
SRAVANByCPP
SRAVANByCPPSRAVANByCPP
SRAVANByCPP
 
Deploying Machine Learning Models with Pulsar Functions - Pulsar Summit Asia...
Deploying Machine Learning Models with Pulsar Functions  - Pulsar Summit Asia...Deploying Machine Learning Models with Pulsar Functions  - Pulsar Summit Asia...
Deploying Machine Learning Models with Pulsar Functions - Pulsar Summit Asia...
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the message
 
JavaScript for real men
JavaScript for real menJavaScript for real men
JavaScript for real men
 
Apache Thrift
Apache ThriftApache Thrift
Apache Thrift
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 

Augmenta Contribution guide

  • 1. Tom Duchêne :: David-Alexandre Chanel Augmenta contribution guide https://github.com/Theoriz/Augmenta/wiki
  • 2. Introduction Implementing an Augmenta library (or addon, module, node, object…) for your usual tool is pretty easy ! This document is here to give some specifications about the basic features each Augmenta library should offer. It ensures that users won’t be lost when changing from one technology to another, and allows code to be easily ported. Let’s start coding !
  • 3. General • The repository must contain a clear step by step and noob proof Readme.md file (ex : https://github.com/Theoriz/AugmentaP5) • It must contain the lib and the examples following the specifications of this doc • It must be as clear and commented as possible so the community can help maintain it in a good shape : ) • The lib must not be dependent of any other external lib except OSC (if it’s not native)
  • 4. Naming and conventions • The name of the lib should be “Augmenta”, in the fashion of the technology it is implemented for (“ofxAugmenta” for OpenFrameworks, “AugmentaP5” for processing, etc.). If there is no convention for naming the libraries, you can simply append the name of the technology (AugmentaUnity for example) • If needed, you can add the prefix “Augmenta” or “au” to specify that an object is linked to Augmenta • For everything else, use the code conventions of the technology you’re using
  • 5. Objects Here are the different objects (or classes) that should be implemented : • The object containing the Augmenta data for one person should be called AugmentaPerson • The object containing the Augmenta data of the whole scene should be called AugmentaScene • The main object should have the name of the lib. The instance of this object in the example code can be called augmentaReceiver, auReceiver or simply receiver
  • 6. AugmentaPerson • Contains all the Augmenta data of one person sent in the OSC messages (see next slide) • If possible, has a draw() function that displays all info (centroid, bounding box, id, etc.)
  • 7. AugmentaPerson data /au/personEntered args0 arg1 ... /au/personWillLeave args0 arg1 … /au/personUpdated args0 arg1 … Where args are : 0: pid (int) 1: oid (int) 2: age (int) 3: centroid.x (float 0-1) 4: centroid.y (float 0-1) 5: velocity.x (float 0-1) 6: velocity.y (float 0-1) 7: depth (float) 8: boundingRect.x (float 0-1) 9: boundingRect.y (float 0-1) 10: boundingRect.width (float 0-1) 11: boundingRect.height (float 0-1) 12: highest.x (float 0-1) 13: highest.y (float 0-1) 14: highest.z (float 0-1) // Personal ID ex : 42th person to enter has pid=41 // Ordered ID ex : 3rd person still present has oid=2 // Time on stage (in frame number) // Position projected to the ground // Speed and direction vector // Distance to sensor (in m) (not implemented) // Top view bounding box // Highest point placement // Height of the person (not implemented) OSC messages sent for each detected person : Data protocol is up-to-date here : https://github.com/Theoriz/Augmenta/wiki
  • 8. AugmentaScene • Contains all the Augmenta data of the scene sent in the OSC message sent each frame (see next slide) • The most important info we’ll use is the scene’s width/height sent by Augmenta
  • 9. AugmentaScene data /au/scene args0 arg1 … Where args are : 0: currentTime (int) 1: percentCovered (float 0-1) 2: numPeople (int) 3: averageMotion.x (float 0-1) 4: averageMotion.y (float 0-1) 5: scene.width (int) 6: scene.height (int) 7: scene.depth (int) OSC message sent each frame to describe the scene : Data protocol is up-to-date here : https://github.com/Theoriz/Augmenta/wiki
  • 10. Main object • Contains an AugmentaScene and an array (or vector, etc.) of AugmentaPerson representing all the people in the scene. • It should be created with a given OSC port (or with default 12000) and start listening right away • It should have tools like isConnected() to check if the port has already been successfully bound by the lib, or reconnect() to connect to a new OSC port on the fly • The main object will handle the OSC messages and provide three use paradigms to the users (see next slides)
  • 11. Handle the OSC messages • The main object listens to four specific OSC messages : – /au/scene : sent everyframe to update the scene info – /au/personEntered : a new person entered the scene – /au/personUpdated :a person already present has been updated – /au/personWillLeave :a person already present is about to leave the scene • The scene info is directly stored into the AugmentaScene object • Every “person” message leads to either adding / updating / removing an AugmentaPerson in the array containing all the people present in the scene (Warning : If an update message is sent for a person that doesn’t exist, it must be created) • For safety reasons, if an AugmentaPerson has not been updated for a certain number of frames, it is considered missing and must be removed. Set the number of frames with a setTimeOut() function (default 120).
  • 12. Paradigm #1 After having handled the OSC messages, there are three paradigms to implement in the main object. Here is the first one (iterative looping) : • The user may want to simply iterate over all the people in the scene • Then we have to provide a way to get the AugmentaPeople array/vector/etc. containing all the AugmentaPerson • The function can be named getPeopleArray() for example
  • 13. Paradigms #2 • The second paradigm is dataflow/event oriented • The lib should register and call the following callback methods, which should be triggered at every similar OSC event (or when a person is artificially added/removed). It provides the AugmentaPerson as an argument. void personEntered (AugmentaPerson p) { print(“Person entered : "+ p.pid ); }; void personUpdated (AugmentaPerson p) { print(“Person updated : "+ p.pid ); }; void personWillLeave (AugmentaPerson p) { print(“Person left : "+ p.pid ); }; • The user can simply implement those methods in his code to get notified when a change occurs and get the person related to it.
  • 14. Paradigms #3 • The third paradigm is especially useful when only one user is supposed to interact, or for quick prototyping. • The lib must implement the two following methods : getNewestPerson() and getOldestPerson() • They both return the AugmentaPerson which has the (respectively) smallest / greatest “age” value, or null if no one is in the scene. • The oldest person is the most used, because you often want the first person that has entered the scene to keep interacting even if someone else came after him. It also prevent noise from disturbing the experience.
  • 15. Examples The repository must contain some examples following those guidelines : • It must contain a minimalistic example with no external libraries dependency (no external GUI, no Syphon, nothing) – The example should simply display a point for each AugmentaPerson and a point of a different color for the oldest/newest person – The draw() function of the AugmentaPerson should be used to draw all data so the user can quickly test the lib
  • 16. Examples The other examples should contain : • A graphical easy way of changing the OSC port (and ideally the window size) • An implementation of the isConnected() method to warn in the graphical interface if the port is already bound (draw the OSC port in green if OK, red if not connected) • The autoSize feature, which resizes the output texture or window to the correct size of the current frame (contained in AugmentaScene). • A toggle button to enable a debug view drawing all the data with the draw() method
  • 17. Examples Some other “Nice to have” options for examples : • Syphon/spout output • 3D bounding box drawing • Assets example (audio/sprites or others) • Nice visual effects examples • Nice use case examples • TUIO support
  • 18. Share ! When you start working on your library / addon / plugin or even when it’s fully ready, don’t hesitate to contact us so we can add it to the official repos/documentation and give you our warmest thanks for contributing to this exciting project ! contact@theoriz.com https://github.com/Theoriz/Augmenta