Speed Up Development with a JSON Configuration File
by Jason Koo | Jul 07, 2020 | How-To Tutorials | 2 minute read
by Jason Koo | Jul 07, 2020 | How-To Tutorials | 2 minute read
Separating certain variables from the main application into a configuration file can improve your development time by reducing the need to recompile apps for minor changes. In this tutorial, we’ll cover how to setup a very basic method for leveraging a JSON file for runtime configuration options.
This tutorial will have three parts:
The first part of the tutorial is creating the configuration file, which we’ll call config.json. We've gone with the JSON file format, which is a ubiquitous and human readable standard that's already being delivered by countless REST services. Create this file using the file browser, or if developing on a Mac, type the following into the Terminal app:
touch config.json
Or in Window's Powershell:
type nul > config.json
Open this file and declare any data your app will need to run. In our example we'll put in an entry for specifying a model name and what camera index to use, two common things changed when using our starter apps:
{
"model" : "alwaysai/squeezenet_ssd",
"var_2" : 0
}
To make use of the config.json file use the following convenience function:
import os
import json
def load_json(filepath):
"""Returns a JSON file as a Python object"""
if os.path.exists(filepath) == False:
raise Exception('File at {} does not exist'.format(filepath))
with open(filepath) as data:
return json.load(data)
I often put this into a separate file, something like file_manager.py, where I can include additional file access functions (like saving back to JSON) when needed, but you can place it directly in any .py file.
To make use of the config.json data :
import file_manager.py
import edgeiq
def main():
...
config = file_manager.load_json("./config.json")
model = config.get("model", None)
obj_detect = edgeiq.ObjectDetection(model)
...
camera_index = config.get("camera", None)
with edgeiq.WebcamVideoStream(cam=camera_index)
...
Now, if you want to change the model your app is referencing or to toggle between multiple cameras attached to your system, just edit the config.json instead of rebuilding* with aai app deploy/aai app install.
*NOTE: This is just for changing which model to use, however, you'll still need to run 'aai app models add/remove' to actually update the CLI for downloading the models during an 'aai app deploy/aai app install'. See our docs for more info.