{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "",
    "type": "object",
    "properties": {
        "meta": {
            "type": "object",
            "properties": {
                "inputFileType": {
                    "type": "string",
                    "minLength": 1
                },
                "inputFileVersion": {
                    "type": "string",
                    "minLength": 1
                },
                "targetMachine": {
                    "type": "string",
                    "minLength": 1
                },
                "programName": {
                    "type": "string",
                    "minLength": 1
                },
                "programVersion": {
                    "type": "string",
                    "minLength": 1
                }
            },
            "required": [
                "inputFileType",
                "inputFileVersion",
                "targetMachine",
                "programName",
                "programVersion"
            ]
        },
        "name": {
            "type": "string",
            "minLength": 1,
            "description": "only [a-Z], [0-9], '-' and '_' are allowed. Unique ID of the camera configuration. This is used to identify different camera on datalayer.",
            "pattern": "^[a-zA-Z0-9_-]+$"
        },

        "neuralNetworkConfig": {
            "description": "Path to network description file.",
            "type": "string",
            "minLength": 1
        },
        "externalImagePath": {
            "description": "If specified, the image will be loaded from the specified path instead of the ai-object-matching app managed input image.",
            "type": "string",
            "minLength": 1
        },
        "cropImage": {
            "description": "If specified, input image will be cropped and then used for inference. Note that the detected pixel position is related to original image. Use it if you want to accelerate the inference by reducing the image size.",
            "type": "object",
            "properties": {
                "startX": {
                    "type": "number",
                    "minimum": 0
                },
                "startY": {
                    "type": "number",
                    "minimum": 0
                },
                "width": {
                    "type": "number"
                },
                "height": {
                    "type": "number"
                }
            },
            "required": [
                "startX",
                "startY",
                "width",
                "height"
            ]
        },
        "simulateResult": {
            "description": "If specified, the result will be simulated. This is useful for testing the application without the actual neural network.",
            "type": "string",
            "minLength": 1
        },
        "classIndexRemapping": {
            "description": "If specified, the detected object's index will be remapped to other index. Ke",
            "type": "object",
            "additionalProperties": {
                "type": "integer"
            }
        }
    },
    "required": [
        "meta",
        "name",
        "neuralNetworkConfig"
    ]
}