__init__.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from .detect import *
  2. def _get_format(record):
  3. if isinstance(record, LabelmeRecord):
  4. return ('labelme',)
  5. elif isinstance(record, YoloRecord):
  6. return ('yolo',)
  7. elif isinstance(record, PascalVocRecord):
  8. return ('voc', 'pascal', 'pascal_voc')
  9. elif isinstance(record, CocoRecord):
  10. return ('coco',)
  11. else:
  12. return ()
  13. def load(filename, fmt, **kwargs):
  14. if fmt == 'labelme':
  15. record = LabelmeHandler.load(filename)
  16. elif fmt == 'yolo':
  17. record = YoloHandler.load(filename)
  18. elif fmt in ('voc', 'pascal', 'pascal_voc'):
  19. record = PascalVocHandler.load(filename)
  20. elif fmt == 'coco':
  21. record = CocoDetectHandler.load(filename, **kwargs)
  22. else:
  23. raise ValueError(f"Unsupported detect label fmt. Got {fmt}")
  24. return record
  25. def save(filename, record):
  26. if isinstance(record, LabelmeRecord):
  27. LabelmeHandler.save(filename, record)
  28. elif isinstance(record, YoloRecord):
  29. YoloHandler.save(filename, record)
  30. elif isinstance(record, PascalVocRecord):
  31. PascalVocHandler.save(filename, record)
  32. elif isinstance(record, CocoRecord):
  33. raise ValueError("Unsupported for CocoRecord now!")
  34. else:
  35. raise ValueError("Unsupported type!")
  36. def convert(record, out_fmt):
  37. allowed_fmts = ("labelme", "yolo", "voc", "coco", 'pascal', 'pascal_voc')
  38. if out_fmt not in allowed_fmts:
  39. raise ValueError("Unsupported label format conversions for given out_fmt")
  40. if out_fmt in _get_format(record):
  41. return record
  42. if isinstance(record, LabelmeRecord):
  43. ir_record = LabelmeHandler.to_ir(record)
  44. elif isinstance(record, YoloRecord):
  45. ir_record = YoloHandler.to_ir(record)
  46. elif isinstance(record, PascalVocRecord):
  47. ir_record = PascalVocHandler.to_ir(record)
  48. elif isinstance(record, CocoRecord):
  49. ir_record = CocoDetectHandler.to_ir(record)
  50. else:
  51. raise ValueError('Unsupported type for record')
  52. if out_fmt == 'labelme':
  53. dst_record = LabelmeHandler.from_ir(ir_record)
  54. elif out_fmt == 'yolo':
  55. dst_record = YoloHandler.from_ir(ir_record)
  56. elif out_fmt in ('voc', 'pascal', 'pascal_voc'):
  57. dst_record = PascalVocHandler.from_ir(ir_record)
  58. elif out_fmt == 'coco':
  59. dst_record = CocoDetectHandler.from_ir(ir_record)
  60. return dst_record