Segmentation of measurement using an external python script.

On a Windows machine, you need to install Python version 3 or higher and be able to run the py command from the console.

First, select Segmentation as node type and then select Python script as the method. Select the python script file using the Browse button or type the path to the script file directly.

Parameters

Python file

Select python file.

Min area

The minimum number of pixels for an object to be included.

Max area

The maximum number of pixels for an object to be included.

If 0 no maximum area is defined.

Object filter

Use an expression to further exclude unwanted objects based on shape.

Properties that can be used for the Expression:

  • Area

  • Length

  • Width

  • Circumference

  • Regularity

  • Roundness

  • Angle

  • D1

  • D2

  • X

  • Y

  • MaxBorderDistance

  • BoundingBoxArea

Shrink

Takes away x numbers of pixels at the borders of the objects included in images.

Separate

  • Normal

    • Can have both separated and combined objects.

  • Separate adjacent objects

    • All objects are defined separately.

  • Merge all objects into one

    • All objects are defined as one.

  • Merge all objects per row

    • All objects per row segmentation are defined as one.

  • Merge all objects per column

    • All objects per column segmentation are defined as one.

Simple python script for segmentation

import sys

try:
    with open(sys.argv[1], "r") as f:
        frames = f.read().splitlines()
    result = []
    for frame in frames:
        values = list(map(float, frame.split(";")))
        if len(values) > 0 and values[1] < 18.0:
            result.append(1)
        else:
            result.append(0)

    print(result)

except Exception as inst:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    print("Error: {0}, at line {1}".format(inst, exc_tb.tb_lineno))         
PY

Example input to the script

The input to the script is saved to a temp file. The path to the temp file is then passed as a parameter to the python script. The script has to read this file to collect the input from Breeze. This is since the max parameter length is too short to hold all data needed. This type of segmentation is not recommended if performance is an priority as it has a lot of overhead.

[[17.0, 16.0, 19.0], [18.0, 17.0, 21.0], [19.0, 18.0, 22.0]]

Example output from the script

The output has to be printed from the python script to be returned to Breeze: print(result).

[1, 1, 0]

Everything inside the yellow line has now been selected as a sample.