From 2dafc1ae4c63f1d0d6b4926dfd28b8d74b0a4b1f Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Tue, 3 Apr 2018 19:28:17 +0200 Subject: [PATCH 1/7] Node structure --- ld2dap/Filter.py | 20 ++++++++++++++++++++ ld2dap/Input.py | 22 ++++++++++++++++++++++ ld2dap/Node.py | 23 +++++++++++++++++++++++ ld2dap/Output.py | 30 ++++++++++++++++++++++++++++++ ld2dap/test.py | 25 +++++++++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 ld2dap/Filter.py create mode 100644 ld2dap/Input.py create mode 100644 ld2dap/Node.py create mode 100644 ld2dap/Output.py create mode 100644 ld2dap/test.py diff --git a/ld2dap/Filter.py b/ld2dap/Filter.py new file mode 100644 index 0000000..01cb13e --- /dev/null +++ b/ld2dap/Filter.py @@ -0,0 +1,20 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file Filter.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 03 avril 2018 +# +# TODO details + +from Input import Input +from Output import Output + +class Filter(Input, Output): + def __init__(self): + super().__init__('Filter') + + def _run(self): + print('ima not virtual!') + diff --git a/ld2dap/Input.py b/ld2dap/Input.py new file mode 100644 index 0000000..e3cf792 --- /dev/null +++ b/ld2dap/Input.py @@ -0,0 +1,22 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file Input.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 03 avril 2018 +# +# TODO details + +from Node import Node + +class Input(Node): + def __init__(self, name='__CHILD__'): + super().__init__('Input:{}'.format(name)) + self.outputs = list() + + def register(self, output): + self.outputs.append(output) + + def run(self): + print('IMA INPUT N I RUNIN') diff --git a/ld2dap/Node.py b/ld2dap/Node.py new file mode 100644 index 0000000..4ccad9f --- /dev/null +++ b/ld2dap/Node.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file Node.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 03 avril 2018 +# +# TODO details + + +class Node: + def __init__(self, name='A NODE HAS NO NAME'): + self.name = name + + def __str__(self): + return ("Node:{}".format(self.name)) + + def _run(self): + raise NotImplementedError('This method is virtual') + + def run(self): + return self._run() diff --git a/ld2dap/Output.py b/ld2dap/Output.py new file mode 100644 index 0000000..007e695 --- /dev/null +++ b/ld2dap/Output.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file Output.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 03 avril 2018 +# +# TODO details + +from Node import Node +from Input import Input + +class Output(Node): + def __init__(self, name='__CHILD__'): + super().__init__('Output:{}'.format(name)) + self.__dict__['input'] = None + + def __setattr__(self, name, value): + if name == 'input': + self._input(value) + else: + self.__dict__[name] = value + + def _input(self, inode): + if not isinstance(inode, (Input)): + raise NotImplementedError('{} is not an Input'.format(inode)) + self.__dict__['input'] = inode + + diff --git a/ld2dap/test.py b/ld2dap/test.py new file mode 100644 index 0000000..ba2bb55 --- /dev/null +++ b/ld2dap/test.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file test.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 03 avril 2018 +# +# TODO details + +from Node import Node +from Filter import Filter +from Input import Input + +def main(): + n = Filter() + f = Filter() + print(n) + n.run() + print(n.input) + n.input = f + print(n.input) + +if __name__ == '__main__': + main() From 5909db187f3e2d838c25edae36d0fbce2e95ac12 Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Tue, 3 Apr 2018 19:40:35 +0200 Subject: [PATCH 2/7] Some abstract concepts --- ld2dap/Filter.py | 4 ---- ld2dap/Output.py | 7 +++++++ ld2dap/test.py | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ld2dap/Filter.py b/ld2dap/Filter.py index 01cb13e..fa21c66 100644 --- a/ld2dap/Filter.py +++ b/ld2dap/Filter.py @@ -14,7 +14,3 @@ from Output import Output class Filter(Input, Output): def __init__(self): super().__init__('Filter') - - def _run(self): - print('ima not virtual!') - diff --git a/ld2dap/Output.py b/ld2dap/Output.py index 007e695..bd2b5cc 100644 --- a/ld2dap/Output.py +++ b/ld2dap/Output.py @@ -26,5 +26,12 @@ class Output(Node): if not isinstance(inode, (Input)): raise NotImplementedError('{} is not an Input'.format(inode)) self.__dict__['input'] = inode + inode.register(self) + + def process(self, data): + self._process(data) + + def _process(self, data): + raise NotImplementedError('{} should override _process()'.format(self)) diff --git a/ld2dap/test.py b/ld2dap/test.py index ba2bb55..d8643ea 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -20,6 +20,8 @@ def main(): print(n.input) n.input = f print(n.input) + print(f.outputs) + f.process(None) if __name__ == '__main__': main() From 8f393c880609872c12bfb45a043fecdff4c8073f Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Wed, 4 Apr 2018 11:16:35 +0200 Subject: [PATCH 3/7] Core seems ok --- ld2dap/Filter.py | 3 ++- ld2dap/Input.py | 4 ++-- ld2dap/Node.py | 2 +- ld2dap/Output.py | 5 +++++ ld2dap/test.py | 9 +++++++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ld2dap/Filter.py b/ld2dap/Filter.py index fa21c66..9f1bde2 100644 --- a/ld2dap/Filter.py +++ b/ld2dap/Filter.py @@ -11,6 +11,7 @@ from Input import Input from Output import Output -class Filter(Input, Output): +class Filter(Output, Input): + """Output should be first""" def __init__(self): super().__init__('Filter') diff --git a/ld2dap/Input.py b/ld2dap/Input.py index e3cf792..3070193 100644 --- a/ld2dap/Input.py +++ b/ld2dap/Input.py @@ -18,5 +18,5 @@ class Input(Node): def register(self, output): self.outputs.append(output) - def run(self): - print('IMA INPUT N I RUNIN') + def _run(self): + print('I RUN ADSAOADIQJOWDOASJDOQIJWDOIJQOWIDJO') diff --git a/ld2dap/Node.py b/ld2dap/Node.py index 4ccad9f..4ef972c 100644 --- a/ld2dap/Node.py +++ b/ld2dap/Node.py @@ -17,7 +17,7 @@ class Node: return ("Node:{}".format(self.name)) def _run(self): - raise NotImplementedError('This method is virtual') + raise NotImplementedError('{} should override _run()'.format(self)) def run(self): return self._run() diff --git a/ld2dap/Output.py b/ld2dap/Output.py index bd2b5cc..76826c5 100644 --- a/ld2dap/Output.py +++ b/ld2dap/Output.py @@ -34,4 +34,9 @@ class Output(Node): def _process(self, data): raise NotImplementedError('{} should override _process()'.format(self)) + def _run(self): + if self.input is None: + raise RuntimeError('{} do not have an input'.format(self)) + return self.input.run() + diff --git a/ld2dap/test.py b/ld2dap/test.py index d8643ea..498ff7b 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -11,17 +11,22 @@ from Node import Node from Filter import Filter from Input import Input +from Output import Output def main(): + i = Input() + o = Output() n = Filter() f = Filter() print(n) - n.run() + #n.run() print(n.input) + f.input = i n.input = f + o.input = n + o.run() print(n.input) print(f.outputs) - f.process(None) if __name__ == '__main__': main() From f0bfac52b9c0c013ed828d34992768225d3c9573 Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Wed, 4 Apr 2018 11:39:53 +0200 Subject: [PATCH 4/7] Create package core --- ld2dap/{ => core}/Filter.py | 4 ++-- ld2dap/{ => core}/Input.py | 5 +---- ld2dap/{ => core}/Node.py | 0 ld2dap/{ => core}/Output.py | 5 +++-- ld2dap/core/__init__.py | 13 +++++++++++++ ld2dap/test.py | 5 +---- 6 files changed, 20 insertions(+), 12 deletions(-) rename ld2dap/{ => core}/Filter.py (85%) rename ld2dap/{ => core}/Input.py (79%) rename ld2dap/{ => core}/Node.py (100%) rename ld2dap/{ => core}/Output.py (93%) create mode 100644 ld2dap/core/__init__.py diff --git a/ld2dap/Filter.py b/ld2dap/core/Filter.py similarity index 85% rename from ld2dap/Filter.py rename to ld2dap/core/Filter.py index 9f1bde2..916340e 100644 --- a/ld2dap/Filter.py +++ b/ld2dap/core/Filter.py @@ -8,8 +8,8 @@ # # TODO details -from Input import Input -from Output import Output +from .Input import Input +from .Output import Output class Filter(Output, Input): """Output should be first""" diff --git a/ld2dap/Input.py b/ld2dap/core/Input.py similarity index 79% rename from ld2dap/Input.py rename to ld2dap/core/Input.py index 3070193..7475067 100644 --- a/ld2dap/Input.py +++ b/ld2dap/core/Input.py @@ -8,7 +8,7 @@ # # TODO details -from Node import Node +from .Node import Node class Input(Node): def __init__(self, name='__CHILD__'): @@ -17,6 +17,3 @@ class Input(Node): def register(self, output): self.outputs.append(output) - - def _run(self): - print('I RUN ADSAOADIQJOWDOASJDOQIJWDOIJQOWIDJO') diff --git a/ld2dap/Node.py b/ld2dap/core/Node.py similarity index 100% rename from ld2dap/Node.py rename to ld2dap/core/Node.py diff --git a/ld2dap/Output.py b/ld2dap/core/Output.py similarity index 93% rename from ld2dap/Output.py rename to ld2dap/core/Output.py index 76826c5..dbd6df3 100644 --- a/ld2dap/Output.py +++ b/ld2dap/core/Output.py @@ -8,8 +8,9 @@ # # TODO details -from Node import Node -from Input import Input +#from . import Node, Input +from .Node import Node +from .Input import Input class Output(Node): def __init__(self, name='__CHILD__'): diff --git a/ld2dap/core/__init__.py b/ld2dap/core/__init__.py new file mode 100644 index 0000000..ac7bdea --- /dev/null +++ b/ld2dap/core/__init__.py @@ -0,0 +1,13 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file %filename%.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 04 avril 2018 +# +# TODO details + +from .Output import Output +from .Input import Input +from .Filter import Filter diff --git a/ld2dap/test.py b/ld2dap/test.py index 498ff7b..0d70d47 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -8,10 +8,7 @@ # # TODO details -from Node import Node -from Filter import Filter -from Input import Input -from Output import Output +from core import Input, Output, Filter def main(): i = Input() From c48f0497e26388d935c02af1bcd2e8466e219d79 Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Wed, 4 Apr 2018 14:44:35 +0200 Subject: [PATCH 5/7] Node streaming complete --- ld2dap/core/Input.py | 9 +++++++++ ld2dap/core/Node.py | 6 ++++++ ld2dap/core/Output.py | 8 -------- ld2dap/test.py | 1 + 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ld2dap/core/Input.py b/ld2dap/core/Input.py index 7475067..0cda81d 100644 --- a/ld2dap/core/Input.py +++ b/ld2dap/core/Input.py @@ -17,3 +17,12 @@ class Input(Node): def register(self, output): self.outputs.append(output) + + def process(self, data, metadata=None): + """Override abstract method""" + data, meta = self._process(data, metadata) + for output in self.outputs: + output.process(data, meta) + + def _run(self): + self.process(None, None) diff --git a/ld2dap/core/Node.py b/ld2dap/core/Node.py index 4ef972c..6508dda 100644 --- a/ld2dap/core/Node.py +++ b/ld2dap/core/Node.py @@ -16,6 +16,12 @@ class Node: def __str__(self): return ("Node:{}".format(self.name)) + def process(self, data, metadata=None): + self._process(data) + + def _process(self, data, metadata=None): + raise NotImplementedError('{} should override _process()'.format(self)) + def _run(self): raise NotImplementedError('{} should override _run()'.format(self)) diff --git a/ld2dap/core/Output.py b/ld2dap/core/Output.py index dbd6df3..c2abe02 100644 --- a/ld2dap/core/Output.py +++ b/ld2dap/core/Output.py @@ -29,15 +29,7 @@ class Output(Node): self.__dict__['input'] = inode inode.register(self) - def process(self, data): - self._process(data) - - def _process(self, data): - raise NotImplementedError('{} should override _process()'.format(self)) - def _run(self): if self.input is None: raise RuntimeError('{} do not have an input'.format(self)) return self.input.run() - - diff --git a/ld2dap/test.py b/ld2dap/test.py index 0d70d47..21065cd 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -22,6 +22,7 @@ def main(): n.input = f o.input = n o.run() + #i.process(None) print(n.input) print(f.outputs) From 05e7474a3314b31fce7965d537009b99d4ec7241 Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Wed, 4 Apr 2018 16:02:35 +0200 Subject: [PATCH 6/7] LoadTIFF --- ld2dap/LoadTIFF.py | 32 ++++++++++++++++++++++++++++++++ ld2dap/core/Filter.py | 4 ++-- ld2dap/core/Node.py | 5 +++-- ld2dap/test.py | 9 +++++---- 4 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 ld2dap/LoadTIFF.py diff --git a/ld2dap/LoadTIFF.py b/ld2dap/LoadTIFF.py new file mode 100644 index 0000000..e63830b --- /dev/null +++ b/ld2dap/LoadTIFF.py @@ -0,0 +1,32 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file LoadTIFF.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 04 avril 2018 +# +# TODO details + +from core import Input +import numpy as np + +## TODO: dep +import sys +sys.path.append('../triskele/python') +import triskele + +class LoadTIFF(Input): + def __init__(self, tiffFiles): + super().__init__(self.__class__.__name__) + self.files = tiffFiles + + def _process(self, data, metadata): + layers = list() + + for file in self.files: + print('Loading {}'.format(file)) + layers.append(triskele.read(file)) + + return np.stack(layers, axis=2), self.files + diff --git a/ld2dap/core/Filter.py b/ld2dap/core/Filter.py index 916340e..d67334d 100644 --- a/ld2dap/core/Filter.py +++ b/ld2dap/core/Filter.py @@ -13,5 +13,5 @@ from .Output import Output class Filter(Output, Input): """Output should be first""" - def __init__(self): - super().__init__('Filter') + def __init__(self, name='__CHILD__'): + super().__init__('Filter:{}'.format(name)) diff --git a/ld2dap/core/Node.py b/ld2dap/core/Node.py index 6508dda..1a6ca27 100644 --- a/ld2dap/core/Node.py +++ b/ld2dap/core/Node.py @@ -9,7 +9,7 @@ # TODO details -class Node: +class Node(object): def __init__(self, name='A NODE HAS NO NAME'): self.name = name @@ -20,7 +20,8 @@ class Node: self._process(data) def _process(self, data, metadata=None): - raise NotImplementedError('{} should override _process()'.format(self)) + raise NotImplementedError( + '{} should override _process(self, data, metadata)'.format(self)) def _run(self): raise NotImplementedError('{} should override _run()'.format(self)) diff --git a/ld2dap/test.py b/ld2dap/test.py index 21065cd..cea299e 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -9,12 +9,13 @@ # TODO details from core import Input, Output, Filter +from LoadTIFF import LoadTIFF def main(): - i = Input() - o = Output() - n = Filter() - f = Filter() + i = LoadTIFF(['../Data/test.tiff']) + o = Output('o') + n = Filter('n') + f = Filter('f') print(n) #n.run() print(n.input) From 4c8b9738e454d76dd22c55e14ad5ae2869b6d63d Mon Sep 17 00:00:00 2001 From: Karamaz0V1 Date: Wed, 4 Apr 2018 18:28:05 +0200 Subject: [PATCH 7/7] Start of AttributeProfiles --- ld2dap/AttributeProfiles.py | 34 ++++++++++++++++++++++++++++++++++ ld2dap/test.py | 17 ++++++----------- 2 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 ld2dap/AttributeProfiles.py diff --git a/ld2dap/AttributeProfiles.py b/ld2dap/AttributeProfiles.py new file mode 100644 index 0000000..c8551cf --- /dev/null +++ b/ld2dap/AttributeProfiles.py @@ -0,0 +1,34 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# \file AttributeProfiles.py +# \brief TODO +# \author Florent Guiotte +# \version 0.1 +# \date 04 avril 2018 +# +# TODO details + +from core import Filter + +## TODO: dep +import sys +sys.path.append('../triskele/python') +import triskele + +class AttributeProfiles(Filter): + def __init__(self, area=None, sd=None, moi=None): + super().__init__(self.__class__.__name__) + self.area = area + self.sd = sd + self.moi = moi + + def _process(self, data, metadata): + t = triskele.Triskele(data, verbose=False) + att_min = t.filter(tree='min-tree', area=self.area, + standard_deviation=self.sd, + moment_of_inertia=self.moi) + att_max = t.filter(tree='max-tree', area=self.area, + standard_deviation=self.sd, + moment_of_inertia=self.moi) + + return att, None diff --git a/ld2dap/test.py b/ld2dap/test.py index cea299e..1e3fbed 100644 --- a/ld2dap/test.py +++ b/ld2dap/test.py @@ -10,22 +10,17 @@ from core import Input, Output, Filter from LoadTIFF import LoadTIFF +from AttributeProfiles import AttributeProfiles as APs def main(): i = LoadTIFF(['../Data/test.tiff']) + ap = APs() o = Output('o') - n = Filter('n') - f = Filter('f') - print(n) - #n.run() - print(n.input) - f.input = i - n.input = f - o.input = n + + ap.input = i + o.input = i + o.run() - #i.process(None) - print(n.input) - print(f.outputs) if __name__ == '__main__': main()