Source: LightConditionsAnalyzer.js

import Globals from "./Globals";
import { MountFileWithProgress } from "./Utility/MountFileWithProgress";

/**
 * Provides light conditions estimation functionality.
 * To enable this module pass the ShadeFinder license to the SDKProvider.
 */
export class LightConditionsAnalyzer {
    static async Create(modulesManager, uniformityThreshold, backlightThreshold, onProgress) {
        const bsc = modulesManager.modules.visage.module;
        await bsc.MountFile("Light Conditions.cfg", Globals.pathToAssets + "Assets/Plugins/Light Conditions.cfg");

        const uniformity = uniformityThreshold;
        const backlight = backlightThreshold;

        if (onProgress) {
            onProgress({
                contentLength: 0,
                receivedLength: 0,
                progress: 1,
                done: true,
            });
        }

        const bscAnalyzer = bsc.GetLightConditionsAnalysis("Light Conditions.cfg", uniformity, backlight);

        return new LightConditionsAnalyzer(bscAnalyzer, bsc, uniformity, backlight);
    }

    constructor(bscAnalyzer, bsc, uniformityThreshold, backlightThreshold) {
        this.bscAnalyzer = bscAnalyzer;
        this.bsc = bsc;
        this.uniformityThreshold = uniformityThreshold
        this.backlightThreshold = backlightThreshold
    }

    /**
     *@callback LightConditionsCallback
     *@param {Object} LightConditionsAnalyzerResult - Analyzed light conditions
     *@param {float} LightConditionsAnalyzerResult.hasNoBacklight - Boolean value indicating the presence or absence of backlight in the analyzed image.
     *@param {float} LightConditionsAnalyzerResult.hasNoBacklightProbability - float value ranging from 0-1 representing model's confidence that backlight is present in the image.
     *@param {boolean} LightConditionsAnalyzerResult.isFaceUniformlyLit - Boolean value indicating whether the face in the image is uniformly lit.
     *@param {boolean} LightConditionsAnalyzerResult.isFaceUniformlyLitProbability - float value ranging from 0-1 representing model's confidence that the face in the image is uniformly lit.
     *@param {number} LightConditionsAnalyzerResult.frameIndex -  Index of the frame that has been analyzed.
     */

    /**
     * Initiates the light conditions analysis. When a frame has been analyzed a call to the {@link LightConditionsCallback}
     * function is issued, with the analysis results passed as the argument.
     * <br/>
     * @param {LightConditionsCallback} LightConditionsCallback - callback which will be called every time a new frame is analyzed
     */
    StartAnalysis(LightConditionsCallback) {
        this.bscAnalyzer.SetCallback(LightConditionsCallback);
        this.bscAnalyzer.StartAnalysis();
    }

    /**
     * Stops the light conditions analysis and stops issuing calls to the callback given as a argument to the
     * {@link StartAnalysis} function.
     * <br/>
     */
    StopAnalysis() {
        this.bscAnalyzer.StopAnalysis();
    }

    /**
     * Resets the internal state of the light conditions analyzer. This is useful when switching between frames of different people.
     */
    Reset() {
        this.bscAnalyzer.Reset();
    }
}