Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

Say there’s an existing component (service or actuator) that does almost everything you want it to, but there’s some slight changes you wish you could make. Luckily, SIC’s object-oriented architecture enables you to inherit from and extend the component you wish to modify. Let’s take the ‘detect’ function of the FaceDetectionComponent, for example:

...

In this function the ‘scaleFactor’ and ‘minNeighbors’ variables are hidden within the function, meaning the only way to change them is to rewrite them. However, rather than rewriting the whole entire FaceDetectionComponent, we can simply create a new component where we inherit from the FaceDetectionComponent, and change just the detect function.

Outline

To extend an existing component we will go through the following steps:

...

  1. Import the original component and relevant modules in the new custom component.

  2. Extend the original component, rewrite the functions you wish to change.

  3. Change the connector and component manager to match the new component name.

  4. Import the new connector for the custom component in your scripts that use it.

  5. Run the new custom component in place of the old one.

Setup (steps 1 and 2)

First, we have already decided we are going to change the ‘detect’ function of the FaceDetectionComponent. So secondly, we create a ‘custom_components’ folder in our repo if we do not have one already, and within that add a ‘custom_{COMPONENT}’ script:

...

Writing the new component (steps 3, 4, and 5)

Inside the new custom component script, we import the old component, as well as the SICComponentManager, SICConnector, and anything the new custom component may need:

...

Code Block
class CustomFaceDetection(SICConnector):
    component_class = CustomFaceDetectionComponent # make sure to change the component name here

def main():
    # register the custom component in the component manager
    SICComponentManager([CustomFaceDetectionComponent])

if __name__ == "__main__":
    main()

Using the new component (step 6)

The work on the new custom component is done. Now, you must change the scripts that you want to use the new component. Here the demo_desktop_camera_facedetection.py is used as an example.

...

Code Block
### face_rec = FaceDetection()
face_rec = CustomFaceDetection()

Run the component (step 7)

Run the new component in a separate shell as if it were the old service (assuming you’re inside ‘custom_components') folder:

...