How to add parameters to your algorithm#
Most of the time, you need to add parameters to control your algorithm behaviour.
Let’s take the same example as in the previous part.
Add parameters#
In the MyFirstAlgoParam
class, you have to do the following :
# --------------------
# - Class to handle the process parameters
# - Inherits core.CWorkflowTaskParam from Ikomia API
# --------------------
class MyFirstAlgoParam(core.CWorkflowTaskParam):
def __init__(self):
core.CWorkflowTaskParam.__init__(self)
# Place default value initialization here
self.threshold1 = 100
self.threshold2 = 200
def set_values(self, params):
# Set parameters values from Ikomia application
# Parameters values are stored as string and accessible like a python dict
self.threshold1 = int(params["threshold1"])
self.threshold2 = int(params["threshold2"])
def get_values(self):
# Send parameters values to Ikomia application
# Create the specific dict structure (string container)
params = {}
params["threshold1"] = str(self.threshold1)
params["threshold2"] = str(self.threshold2)
return params
Use parameters in your code#
Then, you can use your parameters in the core algorithm :
import cv2
...
def run(self):
# Core function of your process
# Call begin_task_run() for initialization
self.begin_task_run()
# Examples :
# Get input :
task_input = self.get_input(0)
# Get output :
task_output = self.get_output(0)
# Get parameters :
param = self.get_param_object() # <-- Get the parameters
# Get image from input/output (numpy array):
src_image = task_input.get_image()
# Call to the process main routine
dst_image = cv2.Canny(src_image, threshold1=param.threshold1, threshold2=param.threshold2)
# Set image of input/output (numpy array):
task_output.set_image(dst_image)
# Step progress bar:
self.emit_step_progress()
# Call end_task_run() to finalize process
self.end_task_run()
Use parameters in your workflows#
Now you can change parameters in your workflows :
from ikomia.dataprocess.workflow import Workflow
from ikomia.utils.displayIO import display
from ikomia.utils import ik
# Init the workflow
wf = Workflow()
# Add your algorithm
my_algo = wf.add_task(ik.my_first_algo(threshold1="100", threshold2="200"), auto_connect=True)
# Run on your image
wf.run_on(url="https://raw.githubusercontent.com/Ikomia-dev/notebooks/main/examples/img/img_fireman.jpg")
# Inspect your results
output_data = my_algo.get_output(0).get_image()
display(output_data)