diff --git a/deepfinder/utils/objl.py b/deepfinder/utils/objl.py index e94fa01ad3b0b4ec46773083c9b04a785963c6ee..301e23e041548262213929699d56d50a9a580155 100644 --- a/deepfinder/utils/objl.py +++ b/deepfinder/utils/objl.py @@ -5,6 +5,7 @@ # License: GPL v3.0. See <https://www.gnu.org/licenses/> # ============================================================================================= +import os import numpy as np import warnings @@ -62,6 +63,42 @@ def disp(objlIN): print(strout) + +def read(filename): + """Reads object list. Handles .xml and .xlsx files, according to what extension the file has. + + Args: + filename (str): '/path/to/file.ext' with '.ext' either '.xml' or '.xlsx' + + Returns: + list of dict + """ + data_format = os.path.splitext(filename) + if data_format[1] == '.xml': + objl = read_xml(filename) + elif data_format[1] == '.xlsx': + objl = read_excel(filename) + else: + print('/!\ DeepFinder can only read object lists in .xml and .xlsx formats') + return objl + + +def write(objl, filename): + """Writes object list. Can write .xml and .xlsx files, according to the extension specified in filename. + + Args: + objl (list of dict) + filename (str): '/path/to/file.ext' with '.ext' either '.xml' or '.xlsx' + """ + data_format = os.path.splitext(filename) + if data_format[1] == '.xml': + write_xml(objl, filename) + elif data_format[1] == '.xlsx': + write_excel(objl, filename) + else: + print('/!\ DeepFinder can only write object lists in .xml and .xlsx formats') + + def read_xml(filename): tree = etree.parse(filename) objl_xml = tree.getroot() diff --git a/pyqt/annotation/gui_annotation.py b/pyqt/annotation/gui_annotation.py index 4b29399e33477c49f6d4d8bfa20901eaa6e07b08..bfc658c31a7bb5a2303eaae2712c6907b9d49111 100644 --- a/pyqt/annotation/gui_annotation.py +++ b/pyqt/annotation/gui_annotation.py @@ -208,7 +208,7 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.winDisp.dwidget.goto_coord(coord) # to refresh lmap display # Test: - ol.disp(self.objl) + #ol.disp(self.objl) def on_object_remove_secure(self): @@ -288,9 +288,10 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow): filename = filename[0] else: filename = self.path_objl - s = os.path.splitext(filename) - filename = s[0]+'.xml' # force extension to be xml - ol.write_xml(self.objl, filename) + #s = os.path.splitext(filename) + #filename = s[0]+'.xml' # force extension to be xml + #ol.write_xml(self.objl, filename) + ol.write(self.objl, filename) message = 'Object list saved! Quit?' reply = QtGui.QMessageBox.question(self, 'Quit?', message, @@ -305,7 +306,7 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow): else: path_objl = ('', '') if len(self.objl)!=0: - message = 'This will overwrite current object list. Proceed?' + message = 'This will overwrite current object list. Proceed?' # TODO: DOES NOT OVERWRITE OBJL!! reply = QtGui.QMessageBox.question(self, 'Remove class', message, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: @@ -320,7 +321,8 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow): def load_objl(self, path_objl): - objl = ol.read_xml(path_objl) + #objl = ol.read_xml(path_objl) + objl = ol.read(path_objl) self.label_list = ol.get_labels(objl) for idx in range(len(objl)):