/// Copyright (c) 2020 ARM Limited.
///
/// SPDX-License-Identifier: MIT
///
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to deal
/// in the Software without restriction, including without limitation the rights
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
/// copies of the Software, and to permit persons to whom the Software is
/// furnished to do so, subject to the following conditions:
///
/// The above copyright notice and this permission notice shall be included in all
/// copies or substantial portions of the Software.
///
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
/// SOFTWARE.
///

namespace armnn
{
/**
@page other_tools Other Tools
@tableofcontents

@section S14_image_csv_file_generator The ImageCSVFileGenerator

The `ImageCSVFileGenerator` is a program for creating a CSV file that contains a list of .raw tensor files. These
.raw tensor files can be generated using the`ImageTensorGenerator`.

|Cmd:|||
| ---|---|---|
| -h | --help    | Display help messages |
| -i | --indir   | Directory that .raw files are stored in |
| -o | --outfile | Output CSV file path |

Example usage: <br/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.sh
./ImageCSVFileGenerator -i /path/to/directory/ -o /output/path/csvfile.csv
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br/><br/><br/><br/>

@section S15_image_tensor_generator The ImageTensorGenerator

The `ImageTensorGenerator` is a program for pre-processing a .jpg image before generating a .raw tensor file from it.

Build option:
To build ModelAccuracyTool, pass the following options to Cmake:
* -DBUILD_ARMNN_QUANTIZER=1

|Cmd:|||
| ---|---|---|
| -h | --help         | Display help messages |
| -f | --model-format | Format of the intended model file that uses the images.Different formats have different image normalization styles.Accepted values (caffe, tensorflow, tflite) |
| -i | --infile       | Input image file to generate tensor from |
| -o | --outfile      | Output raw tensor file path |
| -z | --output-type  | The data type of the output tensors.If unset, defaults to "float" for all defined inputs. Accepted values (float, int or qasymm8)
|    | --new-width    |Resize image to new width. Keep original width if unspecified |
|    | --new-height   |             Resize image to new height. Keep original height if unspecified |
| -l | --layout       | Output data layout, "NHWC" or "NCHW". Default value: NHWC |

Example usage: <br/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.sh
 .sh ./ImageTensorGenerator -i /path/to/image/dog.jpg -o /output/path/dog.raw --new-width 224 --new-height 224
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br/><br/><br/><br/>

@section S16_model_accuracy_tool_armnn The ModelAccuracyTool-ArmNN

The `ModelAccuracyTool-Armnn` is a program for measuring the Top 5 accuracy results of a model against an image dataset.

Prerequisites:
1. The model is in .armnn format model file. The `ArmnnConverter` can be used to convert a model to this format.

Build option:
To build ModelAccuracyTool, pass the following options to Cmake:
* -DFLATC_DIR=/path/to/flatbuffers/x86build/
* -DBUILD_ACCURACY_TOOL=1
* -DBUILD_ARMNN_SERIALIZER=1

|Cmd:|||
| ---|---|---|
| -h | --help                   | Display help messages |
| -m | --model-path             | Path to armnn format model file |
| -f | --model-format           | The model format. Supported values: caffe, tensorflow, tflite |
| -i | --input-name             | Identifier of the input tensors in the network separated by comma |
| -o | --output-name            | Identifier of the output tensors in the network separated by comma |
| -d | --data-dir               | Path to directory containing the ImageNet test data |
| -p | --model-output-labels    | Path to model output labels file.
| -v | --validation-labels-path | Path to ImageNet Validation Label file
| -l | --data-layout ]          | Data layout. Supported value: NHWC, NCHW. Default: NHWC
| -c | --compute                | Which device to run layers on by default. Possible choices: CpuRef, CpuAcc, GpuAcc. Default: CpuAcc, CpuRef |
| -r | --validation-range       | The range of the images to be evaluated. Specified in the form <begin index>:<end index>. The index starts at 1 and the range is inclusive. By default the evaluation will be performed on all images. |
| -b | --blacklist-path         | Path to a blacklist file where each line denotes the index of an image to be excluded from evaluation. |

Example usage: <br/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.sh
./ModelAccuracyTool -m /path/to/model/model.armnn -f tflite -i input -o output -d /path/to/test/directory/ -p /path/to/model-output-labels -v /path/to/file/val.txt -c CpuRef -r 1:100
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br/><br/>

**/
}