Esempio n. 1
0
    def _parse_xml(base_elem):
        """
        Parse the xml of an <element> tag, extracting the ProjectObject attributes.

        Inputs:
        base_elem (ET.Element) - An Element with tag "element" and appropriate
            sub-elements.

        Return:
        tuple (id, pose, category, bounds, symmetry, score, evaluated)
        ProjectObject attributes (see constructor for details).

        Exceptions:
        ValueError - If base_elem is not <element> or if none of its children is <id>.
        """
        # verify base_elem tag is 'element'
        if base_elem.tag != "element":
            raise ValueError('Expected tag to be "element"')

        # defaults
        proxy = ProjectObject(1)
        category = proxy.category
        pose = proxy.pose
        symmetry = proxy.symmetry
        score = proxy.score
        evaluated = proxy.evaluated

        for elem in base_elem:
            if elem.tag == "id":
                id = elem.text
            elif elem.tag == "pose":
                pose = Pose3.from_xml(elem)
            elif elem.tag == "category":
                category = elem.text
            elif (elem.tag == "bounds"):
                # Note: Boxe3d.from_xml expects tag to be 'box3d'
                elem_temp = deepcopy(elem)
                elem_temp.tag = "box3d"
                bounds = Box3d.from_xml(elem_temp)
            elif elem.tag == "symmetry":
                symmetry = ObjectSymmetry.from_xml(elem)
            elif elem.tag == "detectionScore":
                score = float(elem.text)
            elif elem.tag == "evaluated":
                evaluated = bool(elem.text)

        if id is None:
            raise ValueError("XML is missing required <id> tag.")

        return (id, pose, category, bounds, symmetry, score, evaluated)
Esempio n. 2
0
    def test_xml(self):
        """Test converting to and from xml."""

        s = b"<symmetry><x>twoFold</x><y>cylindrical</y><z>twoFold</z></symmetry>"
        expected_sym = ObjectSymmetry(SymmetryType.twoFold,
                                      SymmetryType.cylindrical,
                                      SymmetryType.twoFold)

        # xml -> object
        xml = ET.fromstring(s)
        sym = ObjectSymmetry.from_xml(xml)
        print("sym=", sym)
        print("expected=", expected_sym)
        self.assertEqual(sym, expected_sym)

        # object -> xml
        xml = sym.to_xml()
        self.assertEqual(ET.tostring(xml), s)