Image Built-ins¶
Image Built-ins are used to:
-
Computer image structural similarity
-
Extract 7-segment digits from pictures of displays
-
Detects the image display margins
Additional functions try to recognize the picture's display based on user-specified configurations.
Configuration ¶
The DeviceDisplayProfiles
configuration has two sections:
-
displayDetectionOptions
-
sevenSegmentChars
displayDetectionOptions¶
The displayDetectionOptions
parameters are used by the algorithm to detect the display in the image. The algorithm first resizes the image to a lower resolution for a better display contour detection accuracy. Then it will apply a Gaussian blur filter to reduce noise. Next, using the Canny edge detection algorithm, it will detect the display edges and extract the display from the picture. After this step, the detected contours and display images are attached to the report, allowing for inspection of what was detected.
sevenSegmentChars¶
These parameters specify digit coordinates on the display. The coordinate values are specified relative to the display's width/height. Finding the right values is case-specific, for example, some experimentation is required to calibrate the algorithm with the optimal configuration for certain setups.
Note: Blur is only needed to reduce noise that might be otherwise detected as an edge in the image. Applying a blur with too large a kernel size might result in the digit edges no longer being detected reliably.
Syntax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DeviceDisplayProfiles { <name String>: { displayDetectionOptions: { enabled: <Boolean> imageResizeWidth: <Number> displayCropMethod: <String> } } sevenSegmentChars: [{ xPercentage: <Number> yPercentage: <Number> widthPercentage: <Number> heightPercentage: <Number> segmentMinAreaThreshold: <Number> font: <String> }] } } |
Parameters
The following configuration parameters are available within the displayDetectionOptions
block:
-
name - The name assigned to the configuration
-
enabled -
false
skips the display detection steptrue
(default) otherwise
-
imageResizeWidth (Optional) - The width in pixels to which the image will be scaled before applying the edge detection algorithm on it
- Default is set to
500
- Default is set to
-
displayCropMethod (Optional) - The method for cropping the display after its contour detection
- May be one of:
plain
(default) - A plain crop without any other transformations- The
default
is the value when the display is centered straight in the image (no rotation, tilt or recification) perspective-warp
- Crops the display by performing a perspective warp transformation- This value is useful for scenarios where the display is not straight in the image
- In such cases, the algorithm will apply a corrective perspective transformation to bring the display into a straight position
- May be one of:
The following configuration parameters are available within the sevenSegmentChars
block:
-
xPercentage and yPercentage - The approximate position of the digit (starting from top-left corner)
- The values are numbers between
0
and100
- The coordinates are specified (as a percentage) to the display width, respective height
- For example,
xPercentage = 33
andyPercentage = 33
means the top corner of the digit is located on the display ⅓ from left of the screen and ⅓ from the top
- The values are numbers between
-
widthPercentage and heightPercentage - Specifies the width and height of the digit as a percentage of the display size
-
segmentMinAreaThreshold (optional) A threshold used to filter out contours that are too small to be a candidate segment of the digit
- This means all contours that have an area less than the given threshold are not interpreted as digit segments in the image
- Default is set to
50
-
font - May be one of
DSEG-7
(default) orDSEG-14
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | DeviceDisplayProfiles { "device-1": { displayDetectionOptions: { enabled: true imageResizeWidth: 500 } sevenSegmentChars: [{ xPercentage: 10.2 yPercentage: 10.1 widthPercentage: 30 heightPercentage: 50 segmentMinAreaThreshold: 400 font: DSEG-14 }] } } |
Open Image ¶
Opens an image and supports png
and jpg
format. This function must be used before calling any additional Image Built-in functions on the picture.
Syntax
1 | <image Image> := Image.openImage(<url String> OR <file File>) |
Returns
The image.
Parameters
-
url - The path to the file
- If a remote URL is given, intaQt will download the image
-
file - A file object created by File Built-ins
Example 1 - Opening the Image via a URL
1 | img := Image.openImage("http://localhost:8080/tmp/test.png") |
Example 2 - Opening the Image via File Built-ins
1 2 | file := File.fromProject("a.jpg") ing := Image.openImage(file) |
Compare Image Structural Similarity ¶
Computes image structural similarity score by comparing two images.
Syntax
1 | <score Number> := Image.structuralSimilarity(<img1 Image>, <img2 Image>) |
Returns
A number between 0
and 1
, representing the similarity score for the input images. The higher the score, the more similar the two images are. A score is 1
would result from comparing an image with itself.
Parameters
-
img1 - The first image used for comparison, as obtained from the #open function
-
img2 - The second image used for comparison, as obtained from the #open function
Example
1 2 3 4 5 6 | img1 := Image.openImage(File.fromProject("img1.jpg")) img2 := Image.openImage(File.fromProject("img2.jpg")) score := Image.structuralSimilarity(img1, img2) assert score > 0.8 ! "img1 differs from img2 too much" |
Extract Image ¶
Extracts the 7-segment digits from the image.
Syntax
1 | <result Object> := Image.extractSevenSegmentText(<image Image>, <deviceProfile String>) |
Returns
An object that has the following fields/methods available:
-
result.isOk()
- A boolean stating the operation status -
result.result
- A string containing the extracted text
If result.isOk()
returns false
, this means the text extraction failed and the result.result
will be an empty string.
Parameters
-
image - The image object created by the
openImage
function -
deviceProfile - The device profile name to use for the extraction, as configured in the
DeviceDisplayProfiles
configuration section
Example
1 2 | img := Image.openImage("http://device-host:8080/pic") Image.extractSevenSegmentText(img, "device-1") |
Attach Image to Report ¶
Attaches the image to the test report in png
format.
Syntax
1 | Image.attachToReport(<image Image>, <name String>) |
Parameters
-
image - The image object created by the
openImage
function -
name - The name assigned to the attachment
Example
1 2 | img := Image.openImage(File.fromProject("a.png")) Image.attachToReport(img, "my-image") |