in deepracer_follow_the_leader_ws/webserver_pkg/webserver_pkg/models.py [0:0]
def api_list_models():
"""API to get all the models and their details, and sensor status to populate the
model list drop down.
Returns:
dict: List of models and their status based on connected sensor information.
"""
webserver_node = webserver_publisher_node.get_webserver_node()
data = {
"models": [],
"sensor_status": {"camera_status": "error",
"stereo_status": "error",
"lidar_status": "error"}
}
try:
ext_length = len(constants.MODEL_FILE_TYPE)
disabled_models = list()
sensor_status_info = dict()
sensor_status_code, sensor_resp = get_sensor_status()
if sensor_status_code == 0:
sensor_status_info["camera_status"] = \
"not_connected" if sensor_resp.single_camera_status == 1 else "connected"
sensor_status_info["stereo_status"] = \
"not_connected" if sensor_resp.stereo_camera_status == 1 else "connected"
sensor_status_info["lidar_status"] = \
"not_connected" if sensor_resp.lidar_status == 1 else "connected"
data["sensor_status"] = sensor_status_info
for root, _, filenames in os.walk(constants.MODEL_DIRECTORY_PATH):
for file_name in fnmatch.filter(filenames, "*" + constants.MODEL_FILE_TYPE):
model_folder_name = os.path.basename(root)
if model_folder_name:
err_code, err_msg, model_metadata_content = \
read_model_metadata_file(os.path.join(
os.path.join(constants.MODEL_DIRECTORY_PATH,
model_folder_name),
"model_metadata.json"))
model_metadata_sensors = None
training_algorithm = ""
action_space_type = ""
if err_code == 0:
err_code, err_msg, model_metadata_sensors = \
get_sensors(model_metadata_content)
if err_code == 0:
err_code, err_msg, training_algorithm = \
get_training_algorithm(model_metadata_content)
if err_code == 0:
err_code, err_msg, action_space_type = \
get_action_space_type(model_metadata_content)
if err_code == 0:
model_disabled = False
if sensor_status_code == 1:
model_disabled = True
else:
sensor_status, _ = verify_sensor_connection(model_metadata_sensors,
sensor_resp)
model_disabled = sensor_status == 1
model = {"model_name": file_name[:-ext_length],
"model_folder_name": model_folder_name,
"model_training_algorithm":
constants.TRAINING_ALGORITHM_NAME_MAPPING[
constants.TrainingAlgorithms(training_algorithm)],
"model_action_space_type":
constants.ACTION_SPACE_TYPE_NAME_MAPPING[
constants.ActionSpaceTypes(action_space_type)],
"model_sensors":
[constants.SENSOR_INPUT_NAME_MAPPING[
constants.SensorInputKeys(sensor)]
for sensor in model_metadata_sensors],
"is_select_disabled": model_disabled}
if not model_disabled:
data["models"].append(model)
else:
disabled_models.append(model)
data["models"] += disabled_models
except AttributeError:
webserver_node.get_logger().error("Model folder not found")
except OSError:
webserver_node.get_logger().error("Model not found")
return jsonify(data)