__init__.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import cv2
  2. import numpy as np
  3. from json import dump, load
  4. from pycs.interfaces.MediaFile import MediaFile
  5. from pycs.interfaces.MediaStorage import MediaStorage
  6. from pycs.interfaces.Pipeline import Pipeline as Interface
  7. from .detector import Detector
  8. from .classifier import Classifier
  9. class Scanner(Interface):
  10. def __init__(self, root_folder: str, configuration: dict):
  11. super().__init__(root_folder, configuration)
  12. self.detector = Detector(configuration["detector"])
  13. self.classifier = Classifier(configuration["classifier"], root=root_folder)
  14. def close(self):
  15. pass
  16. def execute(self, storage: MediaStorage, file: MediaFile):
  17. im = self.read_image(file.path)
  18. bw_im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
  19. detections = self.detector(bw_im)
  20. for bbox, info in detections:
  21. if not info.selected:
  22. continue
  23. x0, y0, x1, y1 = bbox
  24. label = self.classifier(bbox.crop(im, enlarge=True))
  25. file.add_bounding_box(x0, y0, bbox.w, bbox.h, label=label)
  26. def read_image(self, path: str, mode: int = cv2.IMREAD_COLOR) -> np.ndarray:
  27. return cv2.imread(path, mode)