detector.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import cv2
  2. import numpy as np
  3. import typing as T
  4. from munch import munchify
  5. from collections import namedtuple
  6. from blob_detector import utils
  7. from blob_detector.core.bbox import BBox
  8. from blob_detector.core.bbox_proc import Splitter
  9. from blob_detector.core.binarizers import BinarizerType
  10. from blob_detector.core.pipeline import Pipeline
  11. class Detector(object):
  12. def __init__(self, configuration: T.Dict[str, T.Dict]) -> None:
  13. super().__init__()
  14. config = munchify(configuration)
  15. self.img_proc = Pipeline()
  16. self.img_proc.rescale(
  17. min_size=config.preprocess.min_size,
  18. min_scale=config.preprocess.scale)
  19. self.img_proc.find_border()
  20. self.img_proc.preprocess(
  21. equalize=False, sigma=config.preprocess.sigma)
  22. self.img_proc.binarize(
  23. type=BinarizerType.gauss_local,
  24. use_masked=True,
  25. use_cv2=True,
  26. sigma=5.0,
  27. window_size=config.threshold.window_size,
  28. offset=2.0,
  29. )
  30. self.img_proc.remove_border()
  31. self.img_proc.open_close(
  32. kernel_size=config.postprocess.kernel_size,
  33. iterations=config.postprocess.dilate_iterations)
  34. self.bbox_proc = Pipeline()
  35. self.bbox_proc.detect()
  36. _, splitter = self.bbox_proc.split_bboxes(
  37. preproc=Pipeline(), detector=Pipeline())
  38. _, bbox_filter = self.bbox_proc.bbox_filter(
  39. score_threshold=0.5,
  40. nms_threshold=0.3,
  41. enlarge=0.01,
  42. )
  43. _, scorer = self.bbox_proc.score()
  44. self.img_proc.requires_input(splitter.set_image)
  45. self.img_proc.requires_input(bbox_filter.set_image)
  46. self.img_proc.requires_input(scorer.set_image)
  47. def __call__(self, im: np.ndarray) -> T.List[BBox]:
  48. _im = self.img_proc(im)
  49. bboxes, labels, scores = self.bbox_proc(_im)
  50. return bboxes