test_annotations.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import unittest
  2. import numpy as np
  3. import os
  4. from tests.configs import config
  5. from os.path import *
  6. from nabirds import BaseAnnotations, _MetaInfo
  7. from nabirds.utils import read_info_file
  8. class MockAnnotation(BaseAnnotations):
  9. name = "MOCK"
  10. @property
  11. def meta(self):
  12. info = _MetaInfo(
  13. images_folder="images",
  14. images_file="images.txt",
  15. labels_file="labels.txt",
  16. split_file="tr_ID.txt",
  17. bounding_boxes="bounding_boxes.txt",
  18. bounding_box_dtype=np.dtype([(v, np.int32) for v in "xywh"]),
  19. parts_file=join("parts", "part_locs.txt"),
  20. part_names_file=join("parts", "parts.txt"),
  21. )
  22. info.structure = [
  23. [info.images_file, "_images"],
  24. [info.labels_file, "labels"],
  25. [info.split_file, "_split"],
  26. [info.parts_file, "_part_locs"],
  27. [info.part_names_file, "_part_names"],
  28. [info.bounding_boxes, "_bounding_boxes"],
  29. ]
  30. return info
  31. class AnnotationTests(unittest.TestCase):
  32. def setUp(self):
  33. self.info = read_info_file(config.INFO_FILE)
  34. # self.annot = MockAnnotation()
  35. def tearDown(self):
  36. # clear mock data folder?
  37. pass
  38. def create_annotations(self, images, labels, split,
  39. bboxes=False,
  40. index_offset=0,
  41. n_parts=None):
  42. data_root = join(self.info.BASE_DIR, self.info.DATA_DIR)
  43. dataset_info = self.info.DATASETS.MOCK
  44. annot_dir = join(data_root, dataset_info.folder, dataset_info.annotations)
  45. if not isdir(annot_dir):
  46. os.makedirs(annot_dir)
  47. fname = lambda name: join(annot_dir, name)
  48. with open(fname("images.txt"), "w") as images_f,\
  49. open(fname("labels.txt"), "w") as labels_f,\
  50. open(fname("tr_ID.txt"), "w") as split_f:
  51. for i, (im, lab, sp) in enumerate(zip(images, labels, split), index_offset):
  52. print(i, im, file=images_f)
  53. print(lab, file=labels_f)
  54. print(sp, file=split_f)
  55. if bboxes:
  56. with open(fname("bounding_boxes.txt"), "w") as bbox_f:
  57. for i in range(index_offset, index_offset + len(images)):
  58. print(i, 0, 0, 100, 100, file=bbox_f)
  59. if n_parts is not None:
  60. parts_dir = join(annot_dir, "parts")
  61. if not isdir(parts_dir):
  62. os.makedirs(parts_dir)
  63. fname = lambda name: join(parts_dir, name)
  64. with open(fname("parts.txt"), "w") as part_names_f, \
  65. open(fname("part_locs.txt"), "w") as part_locs_f:
  66. for i in range(n_parts):
  67. print(i, "part_{}".format(i), file=part_names_f)
  68. for i in range(index_offset, len(images) + index_offset):
  69. for p in range(n_parts):
  70. print(i, 10*p, 10*p, 1, file=part_locs_f)
  71. def test_foo(self):
  72. self.create_annotations(
  73. ["images{}.jpg".format(i) for i in range(10)],
  74. [i % 5 for i in range(10)],
  75. [int(i < 5) for i in range(10)],
  76. bboxes=False, n_parts=5
  77. )
  78. annot = MockAnnotation(config.INFO_FILE)
  79. def test_bar(self):
  80. self.assertFalse(0)