Я начинаю с Python и хотел бы прочитать в XML -дереве и создать простой для работы объект python.
Это сегментация. XML Я прочитал, есть еще один, называемый Заголовок. XML Я бы добавил чтение в полных XML -файлах как объекты объективации (-> цель достигнута), но, как вы видите, мне нужно поработать над некоторыми значений, прежде чем я смогу их использовать (например, HSV-минимумы, которые должны быть словарями).
Сегментация. XML:
<?xml version="1.0"?>
<opencv_storage>
<Segmentation>
<Channels>3</Channels>
<Depth>1</Depth>
<Invert>1</Invert>
<Remove-Border>0</Remove-Border>
<Method>2</Method>
<Input-is-RGB>1</Input-is-RGB>
<HSV-Minima>
100 0 50</HSV-Minima>
<HSV-Maxima>
130 255 255</HSV-Maxima></Segmentation>
</opencv_storage>
У меня есть класс «классификатор», который наследует от «сегментации» и «заголовка». Предполагается, что эти два класса содержат атрибуты классификатора и хорошо их группируют, так что я могу получить к ним доступ с помощью
classifier.group.attribute
, например, например:
print(classy.segmentation.depth)
И это python код, который я до сих пор придумал:
from lxml import objectify
def str_to_hsv(input_string):
"""Converts an space-delimited string into an HSV-Dictionary"""
hsv_string = str(input_string).strip()
hsv_values = hsv_string.split(' ')
hsv_dict = {}
hsv_keys=['h', 's', 'v']
for k in hsv_keys:
hsv_dict[k] = hsv_values[hsv_keys.index(k)]
return hsv_dict
class segmentation():
"""A class that holds the Segmentation values"""
def __init__(self, classifier_path, classifier_name):
print("Init Segmentation")
segmentation_tree = self.read_xml_tree(classifier_path, classifier_name, xml_filename='Segmenter.xml')
self.Segmentation=segmentation
self.Segmentation.channels = segmentation_tree.Segmentation.Channels
self.Segmentation.depth = segmentation_tree.Segmentation.Depth
self.Segmentation.invert = segmentation_tree.Segmentation.Invert
self.Segmentation.remove_border = segmentation_tree.Segmentation['Remove-Border']
self.Segmentation.method = segmentation_tree.Segmentation.Method
self.Segmentation.input_is_rgb = segmentation_tree.Segmentation['Input-is-RGB']
self.Segmentation.hsv_minima = str_to_hsv(str(segmentation_tree.Segmentation['HSV-Minima']).strip())
self.Segmentation.hsv_maxima = str_to_hsv(str(segmentation_tree.Segmentation['HSV-Maxima']).strip())
class header():
""" A class that holds the Header values"""
def __init__(self, classifier_path, classifier_name):
print("Init Header")
self.header=header
class classifier(header, segmentation):
""" A class representing a Falco classifier"""
def __init__(self, classifier_path, classifier_name):
self.path=classifier_path
self.name=classifier_name
header.__init__(self, classifier_path, classifier_name)
segmentation.__init__(self, classifier_path, classifier_name)
def read_xml_tree(self, classifier_path, classifier_name, xml_filename):
"""Reads in a XML File and returns its tree as an object"""
filepath = classifier_path + '\\' + classifier_name + xml_filename
with open(filepath) as f:
xml = f.read()
tree = objectify.fromstring(xml)
return tree
Я на полпути, но сомневаюсь, что это лучший способ сделать это. Одна из моих проблем заключается в том, что я могу получить доступ к атрибуту напрямую без группы с помощью
classifier.attribut
Кроме того, я не думаю, что строка
self.Segmentation=segmentation
в init класса сегментации очень элегантен.
Можете ли вы указать мне правильное направление, пожалуйста?
Спасибо!