For Developers¶
Kedgi requires the classifiers or detectors to have uniform format to avoid any potential incompatibility. The detector/classifier ought to be saved in archived file format (file extensions include zip, rar, tar only) for better portability and distribution.
The process of Kedgi consists of following steps:
Unzips the archived detector/classifier file
Invokes one thread to run the classifier/detector, and use thread pipeline to capture the output and forward to the frontend
The toy_detector (can be found within this project) examplifies the basic structure of the detector/classifier folder and it has following structure:
- toy_detector_1/
detector.py The main entry to the detector program, accepts inputs, load relevant data and generate output (Please Note: The script has to be named as detector.py otherwise kedgi is not able to find your detector file.)
cli_conf.json It lists all the CLI arguments, their usages as well as their default values
settings.json It is the place for extra task related configuration
spec_conf.json It is specific to the configuration of spectrogram visualization
detector.py¶
Parse input arguments
1 2 3 4 5 6 7 8 9 10 11 12 | parser = argparse.ArgumentParser(description="Toy Detector Example 1 for Kedgi Application ")
parser.add_argument('--audio_folder', type=str, default=None,
help='path to the folder containing the audio files listed in --input_list. Not relevant if using --hdf5_input')
parser.add_argument('--output', type=str, default=None,
help='the .csv file where the detections will be saved')
parser.add_argument('--step_size', type=float, default=0.5,
help='step size (in seconds) used when ovelapping the spectrograms')
parser.add_argument('--threshold', type=float, default=0.5,
help='minimum score value for a segment to be considered as a detection (ranging from 0 to 1)')
parser.add_argument('--show_progress', type=bool, default=True,
help='Show progress bar and estimated time of completion')
args = parser.parse_args()
|
The above code snippet translates the input arguments stated in the cli_conf.json file to the program variables. It is mandatory for every script.
Note: currently the dataset for this toy_detector_1 is available within the same directory. But in real cases, the dataset might be in other locations.
Specifying the right directory path for your files
Example:
1 | spec_config = load_audio_representation(os.path.join(sys.path[0],'spec_conf.json'), name='spectrogram')
|
The above code snippet reads the input argument from the spec_conf.json. And you could see the use of sys.path[0]
here, because the working directory is the directory from where Kedgi app is called (not the detector directory). In other words, you will receive a ‘File not found’ error if you do not specify this parameter because the current script will try to search the spec_conf.json
file inside the folder of kedgi app instead of the current folder.
Note: If you want to use any files in the detector folder, please includes sys.path[0]
as the prefix to them.
cli_conf.json¶
It contains the arguments to be parsed in the above script. It has two main properties:
type
: tells what the type of file it is,
cli_opts
: object. A array-like inputs with all the CLI commands useful for the application. NOTE,--audio_folder
and--output
are required parameters telling the input dataset and output file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | {
"type": "cli_opts",
"cli_opts": [
{
"param": "--audio_folder",
"default_val": "",
"description": "path to the folder containing the audio files "
},
{
"param": "--output",
"default_val": "",
"description": "the .csv file where the detections will be saved"
},
{
"param": "--threshold",
"default_val": 0.5,
"description": "minimum score value for a segment to be considered as a detection (ranging from 0 to 1)"
},
{
"param": "--step_size",
"default_val": 0.5,
"description": "step size (in seconds) used when ovelapping the spectrograms"
}
]
}
|
settings.json¶
It contains extra parameters that would be used by the detector. Similarly it requires two properties:
type
: tell what the type of file it is,
settings
: object. A key-value object.
1 2 3 4 | {
"type": "settings",
"settings": {}
}
|
spec_conf.json¶
This file stores the configuration of spectrogram. It has two entries:
type
: indicates the file type,
spectrogram
: object. A key-value object has configurations of the spectrogram.
1 2 3 4 5 6 7 8 9 10 11 12 | {
"type": "spectrogram",
"spectrogram": {
"rate": "1000 Hz",
"window": "0.256 s",
"step": "0.032 s",
"freq_min": "0 Hz",
"freq_max": "500 Hz",
"window_func": "hamming",
"type": "MagSpectrogram"
}
}
|