Skip to content

Commit 2b4ffdc

Browse files
Version 1.0.0 (#1)
- Initial version
2 parents d5cf550 + 193699a commit 2b4ffdc

13 files changed

Lines changed: 4128 additions & 518 deletions

CHANGELOG.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4-
## Release 0.1.0
4+
## Release 1.0.0
55
- Initial commit
6-
7-
### New features
8-
- ...
9-
10-
### Improvements
11-
- ...
12-
13-
### Bugfix
14-
- ...

CSK_Module_MultiImageEdgeMatcher/pages/pages/CSK_Module_MultiImageEdgeMatcher/CSK_Module_MultiImageEdgeMatcher.css

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,10 @@
55
margin: 6px;
66
}
77

8-
.myCustomCssClass_CSK_Module_MultiImageEdgeMatcher {
8+
.myCustomMinHeight35px_CSK_Module_MultiImageEdgeMatcher {
9+
min-height: 35px;
10+
}
11+
12+
.myCustomMarginLeft30px_CSK_Module_MultiImageEdgeMatcher {
13+
margin-left: 30px;
914
}

CSK_Module_MultiImageEdgeMatcher/pages/pages/CSK_Module_MultiImageEdgeMatcher/CSK_Module_MultiImageEdgeMatcher.html

Lines changed: 643 additions & 109 deletions
Large diffs are not rendered by default.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
export function convertToList(value) {
22
return JSON.parse(value)
3+
}
4+
5+
export function changeID(id) {
6+
const viewerElement = document.getElementById('Viewer2D1');
7+
viewerElement.setAttribute('viewer-id', id);
8+
viewerElement.triggerResume();
9+
return id;
310
}

CSK_Module_MultiImageEdgeMatcher/project.mf.xml

Lines changed: 239 additions & 34 deletions
Large diffs are not rendered by default.

CSK_Module_MultiImageEdgeMatcher/scripts/CSK_Module_MultiImageEdgeMatcher.lua

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
-- If app property "LuaLoadAllEngineAPI" is FALSE, use this to load and check for required APIs
3232
-- This can improve performance of garbage collection
3333

34-
-- _G.availableAPIs = require('ImageProcessing/MultiImageEdgeMatcher/helper/checkAPIs') -- can be used to adjust function scope of the module related on available APIs of the device
34+
_G.availableAPIs = require('ImageProcessing/MultiImageEdgeMatcher/helper/checkAPIs') -- can be used to adjust function scope of the module related on available APIs of the device
3535
-----------------------------------------------------------
3636
-- Logger
3737
_G.logger = Log.SharedLogger.create('ModuleLogger')
@@ -60,30 +60,6 @@ multiImageEdgeMatcherController.setMultiImageEdgeMatcher_Instances_Handle(multiI
6060
--**********************Start Function Scope *******************************
6161
--**************************************************************************
6262

63-
--[[
64-
--- Function to show how this module could be used
65-
local function startProcessing()
66-
67-
CSK_MultiImageEdgeMatcher.setSelectedInstance(1) --> select instance of module
68-
CSK_MultiImageEdgeMatcher.doSomething() --> preparation
69-
70-
-- Option A --> prepare an event to trigger processing via this one
71-
--Script.serveEvent("CSK_MultiImageEdgeMatcher.OnNewTestEvent", "MultiImageEdgeMatcher_OnNewTestEvent") --> Create event to listen to and process forwarded object
72-
--CSK_MultiImageEdgeMatcher.setRegisterEvent('CSK_MultiImageEdgeMatcher.OnNewTestEvent') --> Register processing to the event
73-
74-
--Script.notifyEvent('OnNewTestEvent', data)
75-
76-
-- Option B --> trigger processing via function call
77-
local result = CSK_MultiImageEdgeMatcher.processSomething(data)
78-
79-
end
80-
end
81-
82-
-- Call processing function after persistent data was loaded
83-
--Script.register("CSK_MultiImageEdgeMatcher.OnDataLoadedOnReboot", startProcessing)
84-
]]
85-
86-
--OR
8763

8864
--- Function to react on startup event of the app
8965
local function main()
@@ -95,11 +71,10 @@ local function main()
9571
-- event CSK_PersistentData.OnInitialDataLoaded
9672
-- (see internal variable _G.multiImageEdgeMatcher_Model.parameterLoadOnReboot)
9773
-- If so, the app will trigger the "OnDataLoadedOnReboot" event if ready after loading parameters
98-
--
99-
-- Can be used e.g. like this
74+
-- Check UI for setup
10075
----------------------------------------------------------------------------------------
10176

102-
--startProcessing() --> see above
77+
CSK_MultiImageEdgeMatcher.setSelectedInstance(1) --> select instance of module
10378
CSK_MultiImageEdgeMatcher.pageCalled() -- Update UI
10479

10580
end

CSK_Module_MultiImageEdgeMatcher/scripts/CSK_MultiImageEdgeMatcher_Processing.lua

Lines changed: 343 additions & 61 deletions
Large diffs are not rendered by default.

CSK_Module_MultiImageEdgeMatcher/scripts/ImageProcessing/MultiImageEdgeMatcher/MultiImageEdgeMatcher_Controller.lua

Lines changed: 270 additions & 36 deletions
Large diffs are not rendered by default.

CSK_Module_MultiImageEdgeMatcher/scripts/ImageProcessing/MultiImageEdgeMatcher/MultiImageEdgeMatcher_Model.lua

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,6 @@ function multiImageEdgeMatcher.create(multiImageEdgeMatcherInstanceNo)
3131
self.multiImageEdgeMatcherInstanceNoString = tostring(self.multiImageEdgeMatcherInstanceNo) -- Number of this instance as string
3232
self.helperFuncs = require('ImageProcessing/MultiImageEdgeMatcher/helper/funcs') -- Load helper functions
3333

34-
-- Optionally check if specific API was loaded via
35-
--[[
36-
if _G.availableAPIs.specific then
37-
-- ... doSomething ...
38-
end
39-
]]
40-
4134
-- Create parameters etc. for this module instance
4235
self.activeInUI = false -- Check if this instance is currently active in UI
4336

@@ -52,62 +45,69 @@ function multiImageEdgeMatcher.create(multiImageEdgeMatcherInstanceNo)
5245
self.parametersName = 'CSK_MultiImageEdgeMatcher_Parameter' .. self.multiImageEdgeMatcherInstanceNoString -- name of parameter dataset to be used for this module
5346
self.parameterLoadOnReboot = false -- Status if parameter dataset should be loaded on app/device reboot
5447

55-
--self.object = Image.create() -- Use any AppEngine CROWN
56-
--self.counter = 1 -- Short docu of variable
57-
--self.varA = 'value' -- Short docu of variable
48+
self.tought = false -- Status if matcher was already tought
5849

5950
-- Parameters to be saved permanently if wanted
6051
self.parameters = {}
61-
self.parameters.registeredEvent = '' -- If thread internal function should react on external event, define it here, e.g. 'CSK_OtherModule.OnNewInput'
62-
self.parameters.processingFile = 'CSK_MultiImageEdgeMatcher_Processing' -- which file to use for processing (will be started in own thread)
63-
--self.parameters.showImage = true -- Short docu of variable
64-
--self.parameters.paramA = 'paramA' -- Short docu of variable
65-
--self.parameters.paramB = 123 -- Short docu of variable
52+
self.parameters.registeredEvent = '' -- Event to register for new images to process, like 'CSK_ImagePlayer.OnNewImage'
53+
self.parameters.processingFile = 'CSK_MultiImageEdgeMatcher_Processing' -- Which file to use for processing (will be started in own thread)
54+
55+
self.parameters.showImage = true -- Show image in UI viewer
6656

67-
self.parameters.internalObject = {} -- optionally
68-
--self.parameters.selectedObject = 1 -- Which object is currently selected
69-
--[[
70-
for i = 1, 10 do
71-
local obj = {}
57+
self.parameters.matcher = Image.Matching.EdgeMatcher.create() -- EdgeMatcher handle
58+
self.parameters.edgeThreshold = 30 -- EdgeMatcher edge threshold
59+
self.parameters.minScore = 0.8 -- Minimum score to count as a found object
60+
self.parameters.downsampleFactor = 2 -- EdgeMatcher downsample factor. ReTeach EdgeMatcher if setting this value.
61+
self.parameters.maxMatches = 1 -- Maximum amount of matches to accept
7262

73-
obj.objectName = 'Object' .. tostring(i) -- name of the object
74-
obj.active = false -- is this object active
75-
-- ...
63+
self.parameters.backgroundClutter = 'HIGH' -- Level the live images supplied to the match function are expected to contain non-object edges
64+
self.parameters.fineSearch = true -- Status if fine sarch shuld be performed
65+
self.parameters.minSeparation = 50.0 -- Minimum separation between the centers of object matches in image world units (typically millimeters) taking the image pixel size into account.
66+
self.parameters.rotationRange = 180 -- Angle in degrees, the maximum deviation from the original object orientation to search for.
67+
self.parameters.priorRotationRange = 0.0 -- Optional prior orientation in radians. If specified, the orientation search range is centered around this orientation
68+
self.parameters.minScaleRange = 1.0 -- The smallest scale factor to search for. Lower limit is 0.8
69+
self.parameters.maxScaleRange = 1.0 -- The largest scale factor to search for. Upper limit is 1.2
70+
self.parameters.priorScale = 1.0 -- Optional prior scale factor. Set to the expected scale of the object to find, relative to the size of the teach object. E.g. 1.25 if the object to find is 25% larger than the teach object. Min: 0.1. Max: 10
71+
self.parameters.tileCount = 0 -- Number of tile images to split into. 0 gives automatic selection. 1 disables tiling
72+
self.parameters.timeout = 5 -- Abort the match call if the match time exceeds set number of seconds.
7673

77-
table.insert(self.parameters.internalObject, obj)
78-
end
74+
self.parameters.showImage = true -- Show image in UI
7975

80-
local internalObjectContainer = self.helperFuncs.convertTable2Container(self.parameters.internalObject)
81-
]]
76+
self.parameters.resultTransX = 320 -- Pixel to translate the found result position in x
77+
self.parameters.resultTransY = 240 -- Pixel to translate the found result position in y
8278

8379
-- Parameters to give to the processing script
8480
self.multiImageEdgeMatcherProcessingParams = Container.create()
8581
self.multiImageEdgeMatcherProcessingParams:add('multiImageEdgeMatcherInstanceNumber', multiImageEdgeMatcherInstanceNo, "INT")
8682
self.multiImageEdgeMatcherProcessingParams:add('registeredEvent', self.parameters.registeredEvent, "STRING")
87-
--self.multiImageEdgeMatcherProcessingParams:add('showImage', self.parameters.showImage, "BOOL")
88-
--self.multiImageEdgeMatcherProcessingParams:add('viewerId', 'multiImageEdgeMatcherViewer' .. self.multiImageEdgeMatcherInstanceNoString, "STRING")
89-
90-
--self.multiImageEdgeMatcherProcessingParams:add('internalObjects', internalObjectContainer, "OBJECT") -- optionally
91-
--self.multiImageEdgeMatcherProcessingParams:add('selectedObject', self.parameters.selectedObject, "INT")
83+
self.multiImageEdgeMatcherProcessingParams:add('showImage', self.parameters.showImage, "BOOL")
84+
self.multiImageEdgeMatcherProcessingParams:add('viewerId', 'multiImageEdgeMatcherViewer' .. self.multiImageEdgeMatcherInstanceNoString, "STRING")
85+
86+
self.multiImageEdgeMatcherProcessingParams:add('edgeThreshold', self.parameters.edgeThreshold, "INT")
87+
self.multiImageEdgeMatcherProcessingParams:add('minScore', self.parameters.minScore, "FLOAT")
88+
self.multiImageEdgeMatcherProcessingParams:add('downsampleFactor', self.parameters.downsampleFactor, "INT")
89+
self.multiImageEdgeMatcherProcessingParams:add('maxMatches', self.parameters.maxMatches, "INT")
90+
91+
self.multiImageEdgeMatcherProcessingParams:add('backgroundClutter', self.parameters.backgroundClutter, "STRING")
92+
self.multiImageEdgeMatcherProcessingParams:add('minSeparation', self.parameters.minSeparation, "FLOAT")
93+
self.multiImageEdgeMatcherProcessingParams:add('fineSearch', self.parameters.fineSearch, "BOOL")
94+
self.multiImageEdgeMatcherProcessingParams:add('rotationRange', self.parameters.rotationRange, "FLOAT")
95+
self.multiImageEdgeMatcherProcessingParams:add('priorRotationRange', self.parameters.priorRotationRange, "FLOAT")
96+
self.multiImageEdgeMatcherProcessingParams:add('minScaleRange', self.parameters.minScaleRange, "FLOAT")
97+
self.multiImageEdgeMatcherProcessingParams:add('maxScaleRange', self.parameters.maxScaleRange, "FLOAT")
98+
self.multiImageEdgeMatcherProcessingParams:add('priorScale', self.parameters.priorScale, "FLOAT")
99+
self.multiImageEdgeMatcherProcessingParams:add('tileCount', self.parameters.tileCount, "INT")
100+
self.multiImageEdgeMatcherProcessingParams:add('timeout', self.parameters.timeout, "FLOAT")
101+
102+
self.multiImageEdgeMatcherProcessingParams:add('resultTransX', self.parameters.resultTransX, "INT")
103+
self.multiImageEdgeMatcherProcessingParams:add('resultTransY', self.parameters.resultTransY, "INT")
92104

93105
-- Handle processing
94106
Script.startScript(self.parameters.processingFile, self.multiImageEdgeMatcherProcessingParams)
95107

96108
return self
97109
end
98110

99-
--[[
100-
--- Some internal code docu for local used function to do something
101-
function multiImageEdgeMatcher:doSomething()
102-
self.object:doSomething()
103-
end
104-
105-
--- Some internal code docu for local used function to do something else
106-
function multiImageEdgeMatcher:doSomethingElse()
107-
self:doSomething() --> access internal function
108-
end
109-
]]
110-
111111
return multiImageEdgeMatcher
112112

113113
--*************************************************************************

CSK_Module_MultiImageEdgeMatcher/scripts/ImageProcessing/MultiImageEdgeMatcher/helper/checkAPIs.lua

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,20 @@ local function loadAPIs()
1010

1111
Container = require 'API.Container'
1212
Engine = require 'API.Engine'
13+
Image = require 'API.Image'
14+
Image.Matching = {}
15+
Image.Matching.EdgeMatcher = require 'API.Image.Matching.EdgeMatcher'
1316
Log = require 'API.Log'
1417
Log.Handler = require 'API.Log.Handler'
1518
Log.SharedLogger = require 'API.Log.SharedLogger'
1619
Object = require 'API.Object'
20+
Point = require 'API.Point'
21+
Shape = require 'API.Shape'
1722
Timer = require 'API.Timer'
23+
Transform = require 'API.Transform'
24+
View = require 'API.View'
25+
View.ShapeDecoration = require 'API.View.ShapeDecoration'
26+
View.TextDecoration = require 'API.View.TextDecoration'
1827

1928
-- Check if related CSK modules are available to be used
2029
local appList = Engine.listApps()

0 commit comments

Comments
 (0)