class_docstr: An object in VOC detection format.
  
  Args:
      name: the object label
      bndbox: a :class:`VOCBoundingBox`
      **attributes: additional custom attributes
class_docstr_tok: ["An","object","in","VOC","detection","format",".","Args",":","name",":","the","object","label","bndbox",":","a",":","class",":","`","VOCBoundingBox","`","*","*","attributes",":","additional","custom","attributes"]
docstr: Creates a :class:`VOCObject` from a VOC annotation dict.
  
  Args:
      d: an annotation dict
  
  Returns:
      a :class:`VOCObject`
docstr_tok: ["Creates","a",":","class",":","`","VOCObject","`","from","a","VOC","annotation","dict",".","Args",":","d",":","an","annotation","dict","Returns",":","a",":","class",":","`","VOCObject","`"]
code: def from_annotation_dict(cls, d):
      """Creates a :class:`VOCObject` from a VOC annotation dict.
  
      Args:
          d: an annotation dict
  
      Returns:
          a :class:`VOCObject`
      """
      name = d["name"]
      bndbox = VOCBoundingBox.from_bndbox_dict(d["bndbox"])
  
      # Handles CVAT exported attributes
      if "attributes" in d:
          cvat_attrs = d.pop("attributes", {}).pop("attribute", {})
          cvat_attrs = _ensure_list(cvat_attrs)
          cvat_attrs = {a["name"]: a["value"] for a in cvat_attrs}
          d.update(cvat_attrs)
  
      attributes = {
          k: _parse_attribute(d[k])
          for k in set(d.keys()) - {"name", "bndbox"}
      }
      return cls(name, bndbox, **attributes)
  
imports: import logging
  import os
  import jinja2
  import eta.core.utils
  import fiftyone.constants
  import fiftyone.core.labels
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.core.utils
  import fiftyone.utils.data
label_desc: Use image node_id 2 for calling the VOCObject obj's underlying member method code with example usage: obj.from_annotation_dict(cls, d) and returns: cls