class ThreadedDetector: def __init__(self, cascade, size): self.past = [] self.haar = HaarDetector(cascade, size) self.haarResult = None self.thread = None def detect(self, image): res = None if len(self.past) == 0: res = self.haar.detect(image) else: if self.thread == None or self.thread.is_alive()==False: if self.haarResult != None: res = self.haarResult self.haarResult = None self.image = cv.CloneImage(image) self.thread = threading.Thread(target=ThreadedDetector.doThreadedHaar, args=(self, image)) self.thread.daemon = True self.thread.start() if res == None: res = self.past[len(self.past)-1] self.past.append(res) return res def doThreadedHaar(self, image): self.haarResult = self.haar.detect(self.image) #return self.haarResult
import cv2 import HaarDetector as Detector from Recognizer import searchFace, drawRectangle, FrameCharacter if __name__ == "__main__": cap = cv2.VideoCapture("11.mp4") cv2.namedWindow("Faces found", cv2.WINDOW_NORMAL) font = cv2.FONT_HERSHEY_SIMPLEX detector = Detector.HaarDetector() while (1): #Получаем кадр ret, frame = cap.read() #Характеристики кадра FC = FrameCharacter(frame) frameCharacter = FC.character() #Область определения лица cv2.rectangle(frame, (int(frameCharacter["X0"]), int(frameCharacter["Y0"])), (int(frameCharacter["X1"]), int(frameCharacter["Y1"])), (255, 0, 0), 2) faces = detector.detect(frame) drawRectangle(frame, faces) if (searchFace(frameCharacter, faces) == True): cv2.putText(frame, "STOP ROTATING", (250, 250), font, 0.5, (0, 0, 255), 2, cv2.LINE_AA) else: text = "Face not found."
def __init__(self, cascade, size): self.past = [] self.haar = HaarDetector(cascade, size) self.haarResult = None self.thread = None