class PersonFinder: def __init__(self, dataset): self.detector = FaceDetector() self.recognizer = FaceRecognizer(dataset) self.dataset = dataset def find_all(self, frame): rects = self.detector.get_rects(frame) labels = self.recognizer.get_names_from_rects(frame, rects) return list(zip(labels, rects)) def open_window(self): cv2.namedWindow(self.dataset) def close_window(self): cv2.destroyWindow(self.dataset) def render(self, frame): copy = frame.copy() for name, rect in self.find_all(frame): y = rect[1] - 10 if rect[1] - 10 > 10 else rect[1] + 10 cv2.rectangle(copy, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 0, 255), 2) cv2.putText(copy, name, (rect[0], y), cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2) cv2.imshow(self.dataset, copy) return chr(cv2.waitKey(1) & 0xFF) @staticmethod def cycle(dataset=None, port=0): if dataset is None: dataset = input("Enter The Dataset Name: ") finder = PersonFinder(dataset) vid = cv2.VideoCapture(port) ok, frame = vid.read() finder.open_window() while vid.isOpened() and finder.render(frame) not in "qQ": ok, frame = vid.read() finder.close_window() vid.release()