# Migration from older versions

Visage Technologies strives to minimize changes in API and configuration files when releasing new versions of the SDK. The inevitable changes are listed here together with specific instructions for developers who have existing applications built with older versions.

## Changes in this release

This section covers all changes introduced in all releases since 9.0.

### Landmark detection changes:

Additional eyebrows landmarks

- 8 additional eyebrows landmarks contained in the group 14 (14.5-14.12) are added as part of the extended eyebrows landmarks improvements.

Additional eyes landmarks

- 28 additional eyes landmarks contained in the group 16 (16.1-16.28) are added as part of the extended eyes landmarks improvements.

Additional lips landmarks

- 16 additional lips landmarks contained in the group 17 (17.5-17.20) are added as part of the extended lips landmarks improvements.

For more details please see FDP documentation.

### Changes in configuration file:

- enable_smoothing configuration parameter added. Controls whether the tracker output is smoothed with the smoothing_factors parameter or not.
  - Value 0 - Tracker outputs are not smoothed.
  - Value 1 - Tracker outputs are smoothed.
- temporally_denoise_input configuration parameter added. Controls whether the input frames are denoised in the time domain. This parameter is used to minimize noise (such as small variations in the light or electrical noise coming from the camera) in the input images to increase feature point stability and precision.
  - Value 0 - The input frame stream is not denoised.
  - Value 1 - The input frame stream is denoised.
- Major changes in fitting related parameters:
  - pose_fitting_model configuration parameter replaced with pose_fitting_model_configuration
  - pose_fitting_fdp configuration parameter removed
  - au_fitting_model configuration parameter replaced with au_fitting_model_configuration
  - au_fitting_fdp configuration parameter removed
  - mesh_fitting_model configuration parameter replaced with mesh_fitting_model_configuration
  - mesh_fitting_fdp configuration parameter removed
  - pose_fitting_au_use configuration parameter removed
  - pose_fitting_su_use configuration parameter removed
  - pose_fitting_pose_sensitivity configuration parameter removed
  - pose_fitting_au_sensitivity configuration parameter removed
  - pose_fitting_su_sensitivity configuration parameter removed
  - au_fitting_au_use configuration parameter removed
  - au_fitting_su_use configuration parameter removed
  - au_fitting_au_sensitivity configuration parameter removed
  - au_fitting_su_sensitivity configuration parameter removed
  - mesh_fitting_au_use configuration parameter removed
  - mesh_fitting_su_use configuration parameter removed
  - mesh_fitting_au_sensitivity configuration parameter removed
  - mesh_fitting_su_sensitivity configuration parameter removed
  - au_names configuration parameter removed
  - rotation_limit configuration parameter removed
  - translation_limit configuration parameter removed
  - action_unit_limit configuration parameter removed

For detailed description of these changes consult VisageTracker Configuration Manual, section 2.1. for additional information.

### API changes:

VisageConfiguration API

Introducing new functions for getting and setting `enable_smoothing` parameter:

-     VisageConfiguration.getEnableSmoothing();

-     VisageConfiguration.setEnableSmoothing(var enable_smoothing);

Introducing new functions for getting and setting `temporally_denoise_input` parameter:

-     VisageConfiguration.getTemporallyDenoiseInput();

-     VisageConfiguration.setTemporallyDenoiseInput(var temporally_denoise_input);

Introducing major changes in fitting related parameters API.
The following API methods have been replaced:

-     VisageConfiguration.get/setPoseFittingModel

  replaced with

      VisageConfiguration.get/setPoseFittingModelConfiguration

-     VisageConfiguration.get/setAuFittingModel

  replaced with

      VisageConfiguration.get/setAuFittingModelConfiguration

-     VisageConfiguration.get/setMeshFittingModel

  replaced with

      VisageConfiguration.get/setMeshFittingModelConfiguration

The following API methods have been removed:

-     VisageConfiguration.get/setPoseFittingFdp

-     VisageConfiguration.get/setAuFittingFdp

-     VisageConfiguration.get/setMeshFittingFdp

-     VisageConfiguration.get/setPoseFittingAuUse

-     VisageConfiguration.get/setPoseFittingSuUse

-     VisageConfiguration.get/setPoseFittingPoseSensitivity

-     VisageConfiguration.get/setPoseFittingAuSensitivity

-     VisageConfiguration.get/setPoseFittingSuSensitivity

-     VisageConfiguration.get/setAuFittingAuUse

-     VisageConfiguration.get/setAuFittingSuUse

-     VisageConfiguration.get/setAuFittingAuSensitivity

-     VisageConfiguration.get/setAuFittingSuSensitivity

-     VisageConfiguration.get/setMeshFittingAuUse

-     VisageConfiguration.get/setMeshFittingSuUse

-     VisageConfiguration.get/setMeshFittingAuSensitivity

-     VisageConfiguration.get/setMeshFittingSuSensitivity

-     VisageConfiguration.get/setAuNames

-     VisageConfiguration.get/setRotationLimit

-     VisageConfiguration.get/setTranslationLimit

-     VisageConfiguration.get/setActionUunitLimit

Introducing new functions for getting and setting pose_fitting_model_configuration, au_fitting_model_configuration, mesh_fitting_model_configuration parameters respectively:

-     VisageConfiguration.getPoseFittingModelConfiguration();

-     VisageConfiguration.setPoseFittingModelConfiguration(var pose_fitting_model_configuration);

-     VisageConfiguration.getAuFittingModelConfiguration()

-     VisageConfiguration.setAuFittingModelConfiguration(var au_fitting_model_configuration);

-     VisageConfiguration.getMeshFittingModelConfiguration()

-     VisageConfiguration.settMeshFittingModelConfiguration(var mesh_fitting_model_configuration);

FDP class:

- FDP group 14 (additional eyebrows landmarks) has been updated as part of extended eyebrows landmark tracking feature.

- FDP group 16 (additional eyes landmarks) has been added as part of extended eyes landmark tracking feature.

- FDP group 17 (additional lips landmarks) has been added as part of extended lips landmark tracking feature.

Additional information pertaining eyes and lips tracking are documented under paragraph Landmark detection changes.

Please note: FDP files saved with visage|SDK 9.1 will not be backwards compatible with previous versions due to the addition of new FDP points.

### Data files changes:

Following data files in www/lib folder updated:

- visageSDK.data
- visageSDK.js
- visageSDK.wasm

Please make sure to have the current files in your folder.

### Sample changes:

Samples displaying feature points are updated to draw additional lip points.

## Changes in older releases

## visage|SDK 9.0

### General:

Reduced size of visage|SDK libraries.

Multi-frame analysis feature

VisageFaceAnalyser now offers multi-frame analysis functionality which performs estimations on the selected high-quality frames and returns an averaged, smoothed value. This functionality is available via the VisageFaceAnalyser::analyseStream() function.

New tracking algorithm models

Introducing smaller and faster tracking algorithm models while retaining the same accuracy which completely replace the old models that will no longer be distributed.

New age and gender estimation models

Introducing smaller, faster and more accurate age and gender estimation models which completely replace the old models that will no longer be distributed.

### API changes:

Introducing new FaceData member for getting the face bounding box:

-     FaceData.getFaceBoundingBox

VisageFaceAnalyser API

VisageFaceAnalyser API was refactored to optimise usage and to include newly introduced multi-frame analysis feature.
Old face analysis functions were removed:

-     VisageFaceAnalyser.estimateAge

-     VisageFaceAnalyser.estimateGender

-     VisageFaceAnalyser.estimateEmotion

and replaced with new ones:

-     VisageFaceAnalyser.analyseImage(frameWidth, frameHeight, p_imageData, faceData, options, results)

-     VisageFaceAnalyser.analyseStream(frameWidth, frameHeight, p_imageData, faceData, options, results, faceIndex)

-     VisageFaceAnalyser.resetStreamAnalysis(faceIndex)

Three separate calls to old analysis estimation functions can now be performed by a single call to analyseImage() or analyseStream() where parameter options specifies which analysis operations to perform.
For more details please see VisageFaceAnalyser API documentation.

Introducing new AnalysisData structure which contains face analysis results (age, gender and emotions) returned by the VisageFaceAnalyser.analyseImage and VisageFaceAnalyser.analyseStream functions.

VisageDetector API

Prototype of VisageDetector constructor has been changed:

-     VisageDetector()

to:

-     VisageDetector(configFileName)

For more details please see VisageDetector API documentation.

VisageGazeTracker API

Prototype of following method has been changed:

-     track(frameWidth, frameHeight, p_imageData, faceDataVector, format, origin, widthStep, timeStamp)

to:

-     track(frameWidth, frameHeight, p_imageData, faceDataVector, format, origin, widthStep, timeStamp, maxFaces)

For more details please see VisageTracker API documentation.

### Data files changes:

Location of 3D models changed from root of the Virtual File System to vft/fm (e.g. jk_300.wfm to vft/fm/jk_300.wfm).

Following data files in www/lib folder updated:

- visageAnalysisData.data
- visageAnalysisData.js
- VisageAnalyserUnityPlugin.jslib
- visageEarsRefinerData.data
- visageEarsRefinerData.js
- visageRecognitionData.data
- visageRecognitionData.js
- visageSDK.data
- visageSDK.js
- visageSDK.wasm
- VisageTrackerUnityPlugin.jslib

Please make sure to have the current files in your folder.

### Sample changes:

Due to native FaceData API and VisageFaceAnalyser API changes, VisageTrackerUnityPlugin API and VisageAnalyserUnityPlugin API were updated accordingly.

ShowcaseDemo and VisageTrackerUnityDemo:

Newly introduced face analysis functions, analyseStream() and resetStreamAnalysis(), are used to perform face analysis, thus replacing previously used estimation functions and in-app filtering.

## visage|SDK 8.8

### General:

Face tracking and detection algorithms

The default legacy algorithm that could be allowed via the use_vnn configuration parameter (value 0) has been removed. The VNN algorithm is now the default and only tracking and detection algorithm.
The algorithm can be configured to improve feature points precision and robustness, over tracking speed (performance) by setting the refine_landmarks parameter to 1 in the configuration file. Otherwise, when performance is preferred over feature points precision, the recommendation is to disable refine_landmarks parameter by setting it to 0 in the configuration file.

Face tracking and detection with protection masks

Face tracking and detection algorithms are enhanced so that they can track and detect faces wearing protective masks of various colors and patterns.

### Landmark detection changes:

Contour landmarks

- Visible contour landmarks from group 13 (13.1-13.17) are no longer available (not detected or estimated). Instead, contour landmarks are now provided only in the form of a physical contour within group 15 (15.1-15.17). For more details please see FDP documentation.

Changing the detection of contour points from visible to physical results in improved stability and accuracy of the 3D head-pose estimation.

### Library changes:

VisageTrackerUnityPlugin and VisageAnalyserUnityPlugin

Renaming unityInstance to unityGame:

- Since unityInstance is no longer globally available as it became Promise, the resolved instance of Promise is expected to be assigned to the global variable called unityGame in the generated main application index.html file and as such used within the plugin libraries.

### API changes:

Introducing new FaceData class member for getting the rotation of the face from the camera viewpoint:

-     FaceData.getFaceRotationApparent

VisageTrackerUnityPlugin API

Introducing new function for getting the rotation of the face from the camera viewpoint:

-     VisageTrackerNative._getHeadRotationApparent(rotationApparent, faceIndex)

### Changes in configuration file:

Removed

- Parameters:

- use_vnn
- lbf_stage_modifier
- lbf_nperturb
- lbf_nperturb_threads

- Files:

- Facial Features Tracker - Ultra.cfg
- Facial Features Tracker - Low.cfg

Added

- refine_landmarks parameter

- value 0 - landmarks refinement is disabled
- value 1 - landmarks refinement is enabled

Renamed

- Facial Features Tracker - High.cfg to Facial Features Tracker.cfg

Modified

- Facial Features Tracker.cfg configuration file - new refine_landmarks parameter set to 1 (enabled)
- Head Tracker.cfg configuration file - new refine_landmarks parameter set to 0 (disabled)

Please refer to the VisageTracker Configuration Manual, section 2.1. for additional information.

If you want to update your existing configuration files, it is recommended to copy the parameters values from Facial Features Tracker.cfg configuration file supplied in this package.

### Data files changes:

Removed

- Legacy tracking and detection algorithm data file visageLBFData.data (along with loader script visageLBFData.js)
- Default tracking and detection algorithm data file visageVNNData.data (along with loader script visageVNNData.js)

Modified

- The main visageSDK.data data file now encompass all data needed for running tracking and detection algorithms.

Added

- Ears tracking data file visageEarsRefinmentData.data (along with data loader script visageEarsRefinmentData.js)

Projects using older versions of these files should be updated to load the newest data files along with libraries (visageSDK.js, visageSDK.wasm) from the www/lib folder.

### Sample changes:

Samples displaying feature points are updated to draw physical contour points.

ShowcaseDemo and VisageTrackerUnityDemo:

Newly introduced FaceData class member, faceRotationApparent, is used to check if face rotation is within constraints to successfully run face recognition and face analysis.

## visage|SDK 8.7

### General:

Configurable neural network runner

To improve the performance of our algorithms and to support a wider variety of neural network models we are introducing an API and a configurable framework for choosing between different neural network running backends.

As a result, additional configuration file NeuralNet.cfg is now included in visage|SDK (located in www/lib). This file allows the users to configure which backend will be used by visage|SDK. Users can choose between:

- AUTO - defaults to WEBGL
- WEBGL - allowing GPU-assisted neural network running
- WASM - allowing CPU-accelerated neural network running with supported SIMD instructions

For more information on the parameters of NeuralNet.cfg file see the API page.

New face recognition model

Introducing smaller, faster and more accurate face recognition model.

New face detection model

Introducing a more accurate and robust face detection model. The new model is used in face tracking and face detection when use_vnn configuration parameter is set to 1. Otherwise, the previous face detection model will be used.
For more information about using VNN detection algorithm, please consult VisageTracker Configuration Manual and VisageDetector documentation.

### Library changes:

ASM library format

Depricated ASM library format is no longer supported.

visageAR

visageAR.js library now supports changing screen orientation on mobile devices.

### API changes:

visage|SDK initialization order

The order in which the VisageModule is declared and library and data scripts are included is predefined and should be as follows:

1. Declare VisageModule

   VisageModule has to be declared with all its attributes in charge of preloading of the configuration files, license files and possibly, changing the location of data files, before loading visageSDK.js library.

2. Include visageSDK.js library

   visageSDK.js library has to be included via script tag before any other external data loader script.

3. Include external data loader scripts

VisageTrackerUnityPlugin API

Introducing changes VisageTrackerUnityPlugin API. The list of added and removed function is as follows:
Added:

-     VisageTrackerNative._preloadExternalJS(fileURL)

-     VisageTrackerNative._setDataPath(dataPath)

Removed:

-     VisageTrackerNative._preloadAnalysisData(fileURL)

  - the function has been replaced with `VisageTrackerNative._preloadExternalJS(fileURL)` function

For more details please refer to VisageTrackerUnityPlugin.

### Sample changes:

visage|SDK initialization order

Offical samples has been updated according to changes in the visage|SDK initialization order.

VisageTrackerUnityDemo

The sample now requires the path to the visageSDK.js library and external data loader scripts to be specified in Tracker gameObject.

### Changes in configuration file:

- use_vnn configuration parameter added to VisageDetector configuration file FaceDetector.cfg, set to value 1.

- use_vnn configuration parameter values changed and additional value added:

  - value 0 - VNN algorithm is disabled, default tracking algorithm and default detection model is used
  - value 1 - VNN algorithm enabled in fast mode, at the cost of feature points precision.
  - value 2 - VNN algorithm enabled

For detailed description of these changes consult VisageTracker Configuration Manual.

If you want to update your existing tracker configuration files, it is recommended to copy the parameters values from Facial Features Tracker - High.cfg configuration file supplied in this package.

### Data files changes:

Data files has been saparated to optimize data size.
VisageTracker and VisageDetector in addition to visageSDK.data now require an additional data file depending on the selected algorithm (configuration used).

- visageLBFData.data (along with loader script visageLBFData.js) for the default tracking and detection alogrithms
- visageVNNData.data (along with loader script visageVNNData.js) for the VNN tracking and detection alogrithms

Projects using older versions of these files should be updated to load the newest data files from the www/lib folder.

## visage|SDK 8.6

### General

Configurable detection algorithm
New experimental algorithm for face and facial features detection introduced (VNN algorithm). While it significantly improves detection quality, it also reduces detection speed (performance).
Detector is currently configurable so VNN algorithm can be enabled or disabled via parameter use_vnn in configuration file.
The experimental detection algorithm requires additional data bundled in visageVNNData.data file located in www/lib folder.
For more information about using VNN detection algorithm, please consult VisageDetector documentation.
Configurable tracking algorithm
New experimental algorithm for face tracking introduced (VNN algorithm). While it significantly improves tracking quality and robustness, it also reduces tracking speed (performance).
Tracker is currently configurable so VNN algorithm can be enabled or disabled via parameter use_vnn in configuration file.
The experimental tracking algorithm requires additional data bundled in visageVNNData.data file located in www/lib folder.
For more information about using VNN tracking algorithm, please consult VisageTracker Configuration Manual and VisageTracker documentation.

### API changes:

VisageConfiguration API

Introducing new API for programatically changing VisageTracker configuration parameters, including class:

-     VisageConfiguration

  Class used to change, apply, load and save configuration parameters.

used in conjunction with new VisageTracker methods:

-     VisageConfiguration VisageTracker::getConfiguration() and

-     VisageTracker::setConfiguration(VisageConfiguration configuration)

For more details and usage code examples please refer to VisageConfiguration.

FDP class:

- FDP group 10 (ears) has been extended from 10 to 24 points (12 points per ear) as part of ear tracking feature. Additional changes pertaining ear tracking are documented under paragraphs Model changes, Changes in configuration file and Data files changes.

  Please note: FDP files saved with visage|SDK 8.6 will not be backwards compatible with previous versions due to the addition of new FDP points.

VisageTracker class:

The following function has been deprecated and soon will be removed:

-     VisageTracker::stop()

### Model changes:

A new model file has been added for ear tracking functionality - jk_300_wEars. The new model is based on the previous 'jk_300' model and contains an additional 334 polygons and 14 new FDP points in group 10 (10.11 - 10.24).

For detailed description of these changes consult VisageTracker Configuration Manual.

### Changes in configuration file:

- refine_ears parameter added, which is off by default. Toggles the tracking and refinement of ear points (group 10) for Visage Tracker.

- Facial Features Tracker - High - With Ears.cfg configuration file introduced specifically for purposes of ear tracking. It is largely identical to the regular high configuration with the exception that it uses 'jk_300_wEars' as the active model, and has the 'refine_ears' parameter set to 1 (on).

- Facial Features Tracker - Ultra.cfg configuration file introduced specifically for demonstrating VNN algorithm. It is largely identical to the regular high configuration with the exception that it enables 'use_vnn' option setting the parameter to 1 (on).

For detailed description of these changes consult VisageTracker Configuration Manual.

If you want to update your existing configuration files, it is recommended to copy the parameters values from Facial Features Tracker - High.cfg configuration file supplied in this package.

### Data files changes:

- visageSDK.data file, located in the www/lib folder, has been updated the new model files ('jk_300_wEars.fdp' and 'jk_300_wEars.wfm').

- Data files required by VNN algorithm are bundled in new data file visageVNNData.data located in www/lib.

Projects using older versions of these files should be updated to contain the newest data files from the www/lib folder.

### Sample changes:

VisageTrackerUnityDemo:

VisageTrackerUnityDemo is now distributed only as Unity project. Instructions on how to build and run the provided application can be found here. Additionally, instructions for visage|SDK Unity integration can be found here.

## visage|SDK 8.5

### Changes in configuration file:

- smoothing_factors - due to the implementation of new smoothing algorithms in VisageTracker, default values and optimal ranges for this parameter have been changed in all configuration

Please refer to the VisageTracker Configuration Manual, section 2.1. for additional information.

If you want to update your existing configuration files, it is recommended to copy the parameters values from Facial Features Tracker - High.cfg configuration file supplied in this package.

### API changes:

Copyless data All function that have returned copies of their values in form of Array, VectorInt or VectorFloat are now returning TypedArray. This change refers to track() function, getFPPos() function and most of FaceData members. FaceData

- Three different serialization methods for communicating between web worker and UI thread have been introduced:
  - serializeJson()/deserializeJson()
  - serializeBuffer()/deserializeBuffer()
  - serializeAnalysis()/deserializeAnalysis()

## visage|SDK 8.4

### API changes:

Webassembly format Default visage|SDK library is in WebAssembly format, thus it comes in two file format: visageSDK.js and visageSDK.wasm. Main file is visageSDK.js and can be located independently of the main .html file, while the visageSDK.wasm file depends on visageSDK.js file and is expected to be located at the same folder as the main .html file. The location of visageSDK.wasm file can be changed, which entails changing the location of the .data files (visageSDK.data, visageAnalysisData.data, visageRecognitionData.data) to the same folder. An example can be found at the link: Changing the location of the .data file. To use WebAssembly, MIME type for .wasm file has to be added in .htaccess file on web server as follows (see MIME type):

     AddType application/wasm .wasm

Asynchronous data load

visage|SDK library has been modified to be completely asynchronous. As a result certain .data files need to be preloaded by calling FS_createPreloadedFile() function. The change refers to license and configuration files. Note, that the FS_createPreloadedFile() function must be called after visageSDK.js script is loaded, but before the .data is completely downloaded (see Changing the location of the .data file example).

Change the name of the Module Main visage|SDK module renamed from Module to VisageModule in visageAnalysisData.js and visageRecognitionData.js scripts to improve compatilibity with other libararies and software (for example Unity). In case of using FaceAnalysis or FaceRecognition it is necessary to call Module VisageModule and as such use it in the code.

    <script src="../../lib/visageSDK.js"></script>

    <script>
    VisageModule = VisageModule({onRuntimeInitialized: onModuleInitialized});
    var preloadFiles = function() {
    	VisageModule.FS_createPreloadedFile('/', 'Head Tracker.cfg', "../../lib/Head Tracker.cfg", true, false);
    	VisageModule.FS_createPreloadedFile('/', licenseName, licenseURL, true, false);
     };
     VisageModule.preRun.push(preloadFiles);
    </script>

visageAR

The order of applying rotations on the glasses 3D objects has been fixed to be equal to the tracker's (see getFaceRotation) which is 'YXZ'.

### Sample changes:

FaceDetector and FaceTracker samples have been removed from visage|SDK HTML5 package.

VisageTrackerUnityPlugin

VisageTrackerUnityPlugin was updated so it includes all FaceTrack (including multiple face tracking) and FaceAnalysis functions. The plugin is devided into two files: VisageTrackerUnityPlugin.jslib and VisageAnalyserUnityPlugin.jslib, both file can be found in www/lib folder. Due to major changes, it is recommended to go through documentation before including VisageTrackerUnityPlugin to your existing project.

ShowcaseDemo

Improved sample performance by moving FaceAnalysis functionality to a Web Worker (see analysisWorker.js file).

## visage|SDK 8.3.5959

### General changes:

Module object renamed to VisageModule. Automatic initialization and data download has been deprecated. In order to properly initialize VisageModule object and start visageSDK data download, VisageModule object needs to be initialized manually.

Following code demonstrates:

- how to initialize VisageModule object
- where to place the initialization code (after the script tag that loads visageSDK.js)
- how to pass the callback function (onModuleInitialized) to the VisageModule object that will be triggered when data has been downloaded and VisageModule initialized
- wrapping VisageModule in Module variable so the sample is compatible with previous releases

    <script src="../../lib/visageSDK.js">

    <script>
    var Module = VisageModule({onRuntimeInitialized: onModuleInitialized})
    </script>

See additional examples within sample application code and in the API documentation (API->VisageTracker->Changing the location of the .data file section).

### Landmark detection changes:

- Eyebrows (group 4) detection locations have been changed to the upper contour of the eyebrow to conform more closely to MPEG-4 standard
- Nose (group 9) facial landmarks 9.1 and 9.2 are no longer detected. Instead, facial landmarks 9.5 and 9.4 are detected and 9.1 and 9.2 are estimated from the fitted 3D model.
- Nose contour has been added (group 14, points 21 - 25)

For detailed illustration see MPEG-4 FBA.

### Changes in configuration file:

Configuration file format had stayed the same.

jk_300 model has been set as a default model for pose and action unit estimation instead of candide3 model.

If you want to update your existing configuration files, it is recommended to copy the parameters values from Facial Features Tracker - High.cfg configuration file supplied in this package.

### Data files changes:

visageSDK.data file, located in the folder where the application html file is located (e.g. www/Samples/FaceTracker folder), has been updated.

## visage|SDK 8.2.5684

### API changes:

    VisageTracker:

Due to the introduction of multitracking prototype of following methods has been changed:

-     number VisageTracker.track(number frameWidth,
                                 number frameHeight,
                                 number p_imageData,
                                 FaceData facedata,
                                 number format = VISAGE_FRAMEGRABBER_FMT_RGB,
                                 number origin = VISAGE_FRAMEGRABBER_ORIGIN_TL,
                                 number widthStep = 0,
                                 number timeStamp = -1);

  to:

      VectorInt VisageTracker::track(number frameWidth,
                                     number frameHeight,
                                     number p_imageData,
                                     FaceDataVector facedata,
                                     number format = VISAGE_FRAMEGRABBER_FMT_RGB,
                                     number origin = VISAGE_FRAMEGRABBER_ORIGIN_TL,
                                     number widthStep = 0,
                                     number timeStamp = -1,
                                     number maxFaces = 1);

    VisageGazeTracker:

Prototype of the VisageGazeTracker' track function has changed and is the same as the VisageTracker' track function.
Note that VisageGazeTracker works on one face only. Parameter maxFaces is not used.

    VisageFaceRecognition:

- New function added to VisageFaceRecognition class for determining descriptor size:

      VisageFaceRecognition.getDescriptorSize();

- Descriptor data type was changed from VectorFloat to VectorShort. Following function are affected:

      VisageFaceRecognition.extractDescriptor(FaceData facedata, number frameWidth, number frameHeight, number p_ImageData, VectorShort descriptor);
      VisageFaceRecognition.descriptorsSimilarity(VectorShort first_descriptor, VectorShort second_descriptor);
      VisageFaceRecognition.addDescriptor(VectorShort descriptor, string name);

### Changes in configuration file format:

- face_detector_sensitivity parameter added. Controls face detector sensitivity (TPR - true positive rate) for VisageFeaturesDetector and for initialization phase of the Visage Tracker.

- Pose fitting model sensitivity for z translation(pose_fitting_pose_sensitivity) increased from 0.001 to 0.1

For detailed description of these changes consult VisageTracker Configuration Manual.

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the Facial Features Tracker - High.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Data files changes:

visageSDK.data file, located in the folder where the application html file is located (e.g. www/Samples/FaceTracker folder), has been updated.

## visage|SDK 8.1.4407

### API changes:

Prototype of following methods has been changed:

-     VisageTracker.setTrackerConfigurationFileName(const char* trackerConfigFile)

  to:

      VisageTracker.setTrackerConfigurationFile(const char* trackerConfigFile, bool au_fitting_disabled = false, bool mesh_fitting_disabled = false)

-     VisageDetector.detectFacialFeatures(VsImage* frame, FaceData* output, int maxFaces = 1, float minFaceScale = 0.1f)

  to:

      VisageDetector.detectFacialFeatures(VsImage* frame, FaceData* output, int maxFaces = 1, float minFaceScale = 0.1f, float maxFaceScale = 1.0f)

### Changes in configuration file format:

- process_eyes configuration parameter changed to bit-flag type parameter. Controls gaze vector calculation and pupil points refinement. Setting the parameter to 1 enables the gaze calculations, setting it to 2 enables the pupil refinement and setting it to 3 enables both functionalities.

- Configuration parameters min_face_scale and max_face_scale added. If they are not listed in the configuration file default values will be used (0.15,1.0).

- Smoothing factor groups have been updated.

  - New group for face contour smoothing has been added - contour.

  - Mouth and chin group has been renamed to mouth and now covers only mouth smoothing. Chin smoothing is moved to contour smoothing group.

- Instead of one model three new separate models have been added: pose fitting, au fitting and mesh fitting model. Old parameters have been modified and new parameters have been added. Changes in the configuration parameters related to the model are reflected in the table below:

  OLD PARAMETER NAME | POSE FITTING MODEL | AU FITTING MODEL | MESH FITTING MODEL
  model_filename | pose_fitting_model | au_fitting_model | mesh_fitting_model
  fdp_filename | pose_fitting_fdp | au_fitting_fdp | mesh_fitting_fdp
  au_use | pose_fitting_au_use | au_fitting_au_use | mesh_fitting_au_use
  ekf_sensitivity | pose_fitting_au_sensitivity | au_fitting_au_sensitivity | mesh_fitting_au_sensitivity
  - | pose_fitting_su_use | au_fitting_su_use | mesh_fitting_su_use
  - | pose_fitting_su_sensitivity | au_fitting_su_sensitivity | mesh_fitting_su_sensitivity

  For detailed description of these changes consult VisageTracker Configuration Manual.

  If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the Facial Features Tracker - High.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Data files changes:

visageSDK.data file, located in the folder where the application html file is located (e.g. www/Samples/FaceTracker folder), has been updated.
New model has been added - jk_300, in two additional files: jk_300.wfm and jk_300.fdp. For detailed information on how the new model is used inside the visage|SDK consult VisageTracker Configuration Manual section 2.3.

## visage|SDK 8.0.3444

### API changes:

- Global helper function for determining SDK version introduced:

      Module.getSDKVersion()

- DetectStrip API has been removed.

- All visage|SDK classes are now part of the global Module object.

- initializeLicenseManager() function is no longer a member class of VisageTracker/VisageDetector/VisageFaceAnalyser but a member class of the global Module object:

      Module.initializeLicenseManager("license_key_file")

  In case of multiple license files call Module.initializeLicenseManager repeatedly.

  IMPORTANT: Call this function before the constructor of visage|SDK class in order for licensing to work.

- Tracker

  - Tracker class has been renamed to VisageTracker.

  - this.setConfigurationFile has been renamed to this.setTrackerConfigurationFile.

  - prototype of the track() function has been changed to:

        this.track(frameWidth,frameHeight,p_imageData,faceData,format,origin,widthStep,timeStamp)

    For additional information on the usage and the extra parameters consult the API documentation.

- Detector

  - Detector class has been renamed to VisageDetector.

  - prototype of the constructor has been changed:

        new Module.VisageDetector();

  - prototype of the detectFeatures() function has been changed:

        this.detectFeatures(frameWidth,frameHeight,p_imageData,faceDataVector,maxFaces,minFaceScale)

- FaceAnalyser

  - FaceAnalyser class has been renamed to VisageFaceAnalyser.

  - prototype of all the estimate() functions has been changed:

        this.estimateAge(frameWidth,frameHeight,p_imageData,faceData);
        this.estimateGender(frameWidth,frameHeight,p_imageData,faceData);
        this.estimateEmotion(frameWidth,frameHeight,p_imageData,faceData,prob_estimates);

- FaceData

  - FaceData class has been reimplemented. Functions returning arrays or custom vector containers are prefixed with get:

        this.getFaceTranslation();
        this.getFaceRotation();
        (...)
        this.getShapeUnits();
        (...)
        this.getFeaturePoints3D();

    Instead of screenSpaceGazePos member FaceData contains the gazeData member encompassing all gaze relevant information:

        ScreenSpaceGazeData.index;
        ScreenSpaceGazeData.x;
        ScreenSpaceGazeData.y;
        ScreenSpaceGazeData.quality;
        ScreenSpaceGazeData.inState;

IMPORTANT: Check the API documentation for major classes FaceData, FDP, FeaturePoint, ScreenSpaceGazeData usage as well as helper classes such as VectorFloat, VectorInt, VectorString and FaceDataVector. Examples of usage can be found in visage|SDK samples.

### Changes in configuration files:

- Smoothing factors groups and their default values have been changed (translation and rotation groups removed, new groups include eyebrows, mouth_and_chin, pupils, eyelids and nose).

- Some parameters have been removed from configuration files since they are not used anymore. Please consult VisageTracker Configuration Manual to see complete list of parameters in configuration files.

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the Facial Features Tracker - High.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Data files changes:

visageSDK.data file, located in the folder where the application html file is located (e.g. www/Samples/FaceTracker folder), has been updated.

### Sample changes:

Due to compiler update to emscripten v1.35, HTML5 samples using visage|SDK must have additional code added to your application main .html file. The additional code must be located inside of the script tag and included before the script tag loading visageSDK.js library. Example:

    <script type="text/javascript">
    var Module =
    {
    	onRuntimeInitialized: function()
    	{
    		onModuleInitialized();
    	}
    };
    </script>
    <script src="../../lib/visageSDK.js"></script>

Emscripten functions that use Module object such as

    Module._malloc

and visage|SDK.js function such as

    m_Tracker.track()

must not be called before the OnModuleInitialized() function is called.
sampleTracker.html line 903

### Licensing changes:

Unlicensed VisageDetector will return complete results but has a delay of 2 seconds for each call of detectFacialFeatures method.

Unlicensed VisageFaceAnalyser has a delay of 2 seconds for each call of estimate function.

## visage|SDK 7.4.2500

### Changes in configuration files:

FFT, HT and Facial Features Tracker - Asymmetric.cfg configuration files have been removed. Two new configurations have been added to the Samples/data folder:

- Facial Features Tracker - High.cfg - for use with newer and faster processors (e.g. Intel i7, iPhone 6, ... ).
- Facial Features Tracker - Low.cfg - for use with older and slower processors (e.g. iPhone 4, iPhone 4S, ... ).

### Changes in configuration file format:

- New configuration optional parameters high_prec_addition and tracking_preproc added. If they are not listed in the configuration file default values will be used (1,1).

- Smoothing factor groups have been updated. Default values of smoothing factors have been changed in configuration files.
  For detailed description of these changes consult VisageTracker Configuration Manual.

- All configuration now use candide3.wfm model file. It is recommended to set the model_filename parameter in all existing configurations so it points to candide3.wfm.

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the Facial Features Tracker - High.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

## visage|SDK 7.3.1860

### API changes:

An additional parameter has been added to the FaceDetector detectFeatures method. The minFaceSize parameter is used to specify a lower limit to face size (in pixels) in a given image:

    this.detectFeatures = function(frameWidth, frameHeight, p_imageData, faceData);

changed to:

    this.detectFeatures = function(frameWidth, frameHeight, p_imageData, faceData, minFaceSize);

### Changes in configuration file format:

- New configuration optional parameters lbf_stage_modifier, lbf_nperturb added. If they are not listed in the configuration file default values will be used (0, 5 in the order listed).
- New configuration optional parameter max_work_size added. If the parameter is not listed in the configuration file or if the supplied value is less than 100 or greater than 1080, default value 320 is used.

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the FFT - HighPerformance.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Data files changes:

Data file is located in the folder where the application html file is located (e.g. www/Samples/FaceTracker folder). Copy the file to appropriate folder in any existing applications.

## Changes in 7.2.1286

This section covers all changes introduced in all releases since 7.1.744.

### API changes:

Screen space gaze tracking API introduced.

1. Screen space gaze tracking API methods added to the Tracker class:

    this.initOnlineGazeCalibration = function();

    this.addGazeCalibrationPoint = function(x, y);

    this.finalizeOnlineGazeCalibration = function();

2. Added two members related to screen space gaze tracking to FaceData container class:

    this.screenSpaceGazePos = [];

    this.screenSpaceGazeState;

### Changes in configuration file format:

- New configuration optional parameters max_work_eye_dist, work_buffer_width, work_buffer_height added. If they are not listed in the configuration file default values will be used (60, 1024, 1024 in the order listed). For detailed description of these parameters consult VisageTracker Configuration Manual
- max_work_image_width parameter is now obsolete
- screen_space_gaze smoothing factor modifier added to the smoothing_factors parameter
- Four eyelids detections added to the bdts_points_use and bdts_points_angle parameters
- ekf_sensitivity value for AU13(au_eye_closed) set to 100

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the FFT - HighPerformance.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Sample changes:

New sample added: Gaze Tracker, demonstrates online screen space gaze tracking.

### Other:

Tracking bug on high in plane rotations (z axis) fixed.

## Changes in 7.1.744

This section covers all changes introduced in all releases since 7.1b4.678.

### API changes:

this.drawResults = function(p_imageData) method added to the Detector class.

### Changes in configuration file format:

Parameter bdts_trees_factor has been introduced. Increase the value to achieve faster detection but note that the quality of detection will lower.

### Sample changes:

For unlicensed use:

- FaceTracker, VirtualEyewearTryOn: 1 minute time trial added.
- FaceDetector: Detection results are drawn but no numeric results are returned.

Start and Stop button removed. Tracking will start automatically when tracker is ready and all files have been downloaded.

### Other:

Firefox freezes when no license is provided bug fixed.

## Changes in 7.1b4.678

This section covers all changes introduced in all releases since 7.1b1.579.

### API changes:

1. FaceData container class for tracking and detection results is introduced. TrackingData class is deprecated.

2. Tracker.track() method is changed to accept FaceData parameter instead of TrackingData parameter. Interface is changed from:

     this.track = function(frameWidth,frameHeight,imageData,trackingData)

to:

     this.track = function(frameWidth,frameHeight,imageData,faceData)

3. Added 3 methods to the Tracker class:

     this.getIPD = function()

     this.setIPD = function(IPD)

     this.detectStrip = function(IPDPointer)

4. Added Detector class with following methods:

     this.detectFeatures = function(frameWidth,frameHeight,imageData,faceData)

     this.setConfigurationFile = function(configFilename)

     this.initializeLicenseManager = function(licenseKey)

### Changes in configuration file format:

- Parameters leye_closure_au and reye_closure_au have been introduced to separate eye closure of left and right eye. These parameters override value set by eye_closure_au parameter. It is necessary to use either these or eye_closing_au. For detailed description of these parameters consult VisageTracker Configuration Manual

If you want to update your existing configuration files, it is recommended to copy the values for these new parameters from the Facial_Features_Tracker_-_Asymmetric.cfg configuration file supplied in this package. In all other cases, simply use the provided configuration files.

### Data files changes:

- Candide model was changed (candide*.wfm and candide*.fdp). Added new vertex at center between the eyes. Expanded fdp group 12. Fdp point 12.1 corresponds to newly added vertex.

- Candide-exp model was changed (candide-exp.wfm). Eye closure action unit was divided into separated action units for left and right eye.